본문 바로가기

운영체제/데드락(Dead Lock)

운영체제 - 데드락(Dead Lock)

운영체제 - 데드락(Dead Lock)


Definition

1. Dead Lock

- 자원을 공유하는 프로세스들이 서로가 원하는 자원을 분점하고 있기 때문에 프로세스가 더 진행하지 못하는 현상.

- CPU 낭비는 없음


2. Live Lock

- 자원을 계속적으로 사용하지만 아무런 생산적인 일을 하지 못하는 상황

- 예를들어, 라우터에 지나치게 많은 패킷(packet)이 도착하여 큐(queue)가 꽉 차 기존의 old packet를 지속적으로 버리게 되는 상황

- 혹은 지나치게 많은 interrupt request로 인한 실질적인 job이 수행될 수 없는 상황

* Interrupt Coalescing

- Interrupt 발생 빈도를 줄이기 위해서, 여러 번의 입력을 모아서 한번에 interrupt를 발생시키거나 일정 시간마다 한번씩 interrupt를 발생시키는 기법


3. Indefinite postponement

- 절대 일어날 수 없는 이벤트(event)를 기다리는 상황



<그림 1 : Resource Allocation Graph>

Resource Allocation Graph

1. 사각형 : 프로세스(process)

2. 원 : 자원(resource)

3. 실선(resource->process) : 이미 프로세스에 할당된 자원

4. 점선(process->resource) : 프로세스가 그 자원을 원하는 상황


- 그래프에 cycle이 존재하면 deadlock이 있는 것이다.

- cycle이 존재하는 경우 deadlock이 발생한 상황임을 알 수 있음. 단, 위 상황에서는 자원을 관리하는 Semaphore가 Binary Semaphore인 경우에만 발생.


데드락(Dead lock)의 필요 조건

1. Mutual exclusion (limited access)

- Resources cannot be shared

- 한개의 자원이 점유가 되면 절대 공유가 안 됨.

2. No preemption

- Once given, a resource cannot be taken away

- 상대방이 자원을 원해도 절대 양보하지 않음

3. Hold and wait (multiple independent requests)

- Processes don’t ask for resources all at once

- 프로세스가 다른 자원을 원할 때도 기존에 가지고 있는 자원을 계속 hold 시킴.

4. Circular wait

- There is a circularity in the graph of who has what and who wants what

- Resource Allocation Graph의 cycle과 같은 상황



데드락 해결책

1. Dead Lock Prevention(=Avoidance)

- 데드락 상황이 애초에 발생하지 않게 미리미리 예방하는 방법

- 예방하는 데 CPU자원이 매우 많이 필요

- ex. Banker's algorithm

2. Dead Lock Detection and Recovery

- 데드락 상황이 발생하지 않게끔 예방하지는 않음

- 단, 데드락이 발생하면 데드락이 발생했다는 사실을 탐지(detection)하고 그에 따른 조치(Recovery)를 취함