Post

교착 상태 (DeadLock)

스터디 Stacked-Book에서 실습과 그림으로 배우는 리눅스 구조 책을 참고하여 학습 후 정리한 글입니다.

교착 상태 (DeadLock)

  • 둘 이상의 프로세스나 스레드가 서로의 작업을 기다리면서 더 이상 진행하지 못하는 상태를 뜻한다.

DeadLock의 발생 조건

  • DeadLock이 발생하려면 다음 네 가지 조건이 동시에 충족되어야 한다.

1. 상호 배제 (Mutual Exclusion)

  • 자원은 오직 하나의 프로세스만 사용할 수 있어야 한다. 즉 다른 프로세스가 그 자원을 사용할 수 없어야 한다.

2. 점유 대기 (Hold and Wait)

  • 프로세스가 최소한 하나의 자원을 소유한 상태에서 추가적인 자원을 얻기 위해 대기한다.

3. 비선점 (No Preemption)

  • 다른 프로세스의 자원을 강제로 빼앗을 수 없다. 작업을 마무리 후 자발적으로 반납해야 한다.

4. 순환 대기 (Circular Wait)

  • 프로세스 집합에서 서로가 서로를 대기하는 순환 형태로 자원을 요청하는 상황이 발생해야 한다. 즉, A 프로세스가 B 프로세스를, B 프로세스가 C 프로세스를, C 프로세스가 다시 A 프로세스를 대기하는 상태가 되어야 한다.

교착 상태 해결 방법

1. Deadlock Prevention (데드락 예방)

  • 자원 할당 시 데드락의 4가지 필요 조건 중 어느 하나가 만족되지 않도록 하는 것

2. Deadlock Avoidance (데드락 회피)

  • 자원 요청에 대한 부가적인 정보를 이용해서 데드락의 가능성이 없는 경우에만 자원을 할당
  • 시스템 상태가 원래 상태로 돌아올 수 있는 경우에만 자원 할당

3. Deadlock Detection and recovery (데드락 탐지 및 회복)

  • 데드락 발생은 허용하되, 그에 대한 탐지 루틴을 두어 데드락 발견시 회복

4. Deadlock Ignore (데드락 무시)

  • 데드락을 시스템이 책임지지 않음
  • UNIX를 포함한 대부분의 OS가 채택
This post is licensed under CC BY 4.0 by the author.