교착 상태 (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.