DeadLock 이란

DeadLock(교착상태)

홍찬기
4 min readSep 23, 2021

데드락(DeadLock) 이란?

데드락(교착상태)란 두개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태를 가리킨다. 한정된 자원을 여러 곳에서 사용하려고 할 때 발생할 수 있다.

데드락이 발생하는 경우

두개의 프로세스가 두개의 리소스를 사용해야 한다고 할때

1. Process1 -> Resource1 사용
2. Process2 -> Resource2 사용
3. Process1 -> Resource2 사용하려는데 Process2가 사용중이라 대기상태
4. Process2 -> Resource1 사용하려는데 Process1이 사용중이라 대기상태

위의 3,4에서 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 교착상태(DeadLock)가 발생한다.

데드락이 발생하는 상황은 다음과 같다.

  • 멀티 프로그래밍 환경에서 한정된 자원을 얻기 위해 서로 경쟁하는 상황 발생
  • 한 프로세스가 자원을 요청했고 동시에 그 자원을 사용할 수 없는 상황이 발생할때 해당 프로세스는 대기 상태로 들어간다.
  • 대기 상태로 들어간 프로세스들이 실행 상태로 변경될 수 없을 때의 상황을 교착상태(DeadLock)라고 한다.

데드락 발생 조건

데드락이 발생하려면 4가지 조건이 성립할때 발생한다.

  1. 상호배제(Mutual exclusion)
    자원은 한번에 한 프로세스만 사용 가능하다.
  2. 점유대기(Hold and wait)
    최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 한다.
  3. 비선점(No preemption)
    다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없다
  4. 순환대기(Circular wait)
    프로세스의 집합에서 순환 형태로 자원을 대기하고 있어야 한다.

데드락 해결방법

데드락을 해결하는 방법으로는 4가지 방법이 있다.

  1. 예방
    교착상태 발생 조건 중 하나를 제거하면서 해결한다. 자원낭비가 심하다는 단점이 있다.
  2. 회피
    교착상태의 발생조건을 없애는것 보다는 애초에 발생하지 않도록 알고리즘을 적용하는 방법으로 은행원 알고리즘이 있다.
  3. 탐지
    탐지 알고리즘을 사용하여 교착상태가 발생했는지 탐지하고 교착 상태가 탐지 되었다면 복구 기법을 통해 교착상태를 복구한다. 이 방식은 지속적으로 확인하는 작업이 필요하기 때문에 성능 저하가 발생한다.
  4. 무시
    그냥 무시하는 방법이다. 해결할 때 드는 오버헤드로 인한 성능저하가 방치할 때의 성능저하보다 큰 경우 그냥 무시한다.

References

--

--