7. 교착상태, 모니터
1. 교착상태
교착상태(DeadLock, 데드락): 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태를 가리킨다.
교착상태는 빈번하게 일어나진 않는다.
현재 대부분의 OS에서 교착 상태를 막는 것은 불가능
2. 필요 조건
교착 상태가 일어날 수도 있는 필요조건은 상호배제, 점유대기, 비선점, 순환대기(환형대기) 로 총 4가지 이다. 이 4가지 조건 중 하나라도 만족하지 않으면 교착 상태가 발생하지 않는다.
상호 배제(Mutual exclusion): 프로세스가 필요로 하는 자원에 대한 배타적인 통제권 요구
점유 대기(Hold and wait): 프로세스가 필요로하는 일부 자원을 점유한 상태에서 필요로하는 다른 자원에 대해서는 대기하는 것
비선점(No preemption): 강제로 사용 중인 자원을 선점할 수 없으며, 다른 프로세스가 해당 자원의 사용을 끝날 때 까지 대기해야 함
순환대기(Circular wait): 각 프로세스들이 다음 프로세스가 요구하는 자원을 가지고 있어 순환적인 형태를 이루는 것(자원 할당도에서 원이 만들어짐)
3. 처리 방법
교착 상태를 관리하는 방법으로는 예방, 회피, 무시, 탐지 및 회복으로 총 4가지 접근 방식이 있다.
(1) 교착 상태 예방
**상호 배타 **
자원 공유를 가능하게 함
보유 및 대기
한 프로세스에 수행되기 전에 모든 자원을 할당시키고 나서 점유하지 않을 때에는 다른 프로세스가 자원을 요구하도록 하는 방법
(예) 일부 자원만 사용 가능할 때 보유한 자원을 모두 포기하고 모든 자원이 사용 가능할 때까지 대기한다.
자원 활용률 저하, 기아 상태, 무한 대기 등의 문제를 야기할 수 있음
비선점
비선점 프로세스에 대해 선점 가능한 프로토콜을 만들어줌
환형대기(순환 대기)
자원 유형에 따라 순서를 매긴다.
자원 활용률 저하
(2) 교착 상태 회피
지원이 요청에 대한 추가 정보를 제공하도록 요구하는 것으로 순환 대기가 발생하지 않도록 자원 할당 상태를 검사하는 것
안전 할당과 불안정 할당
안전 할당(Safe allocation): 가용 자원, 각 작업의 점유 자원 정보, 작업 필요 자원 최대량과 현재 요청한 자원 정보가 주어졌을 때 요청을 모두 이뤄줄 수 있는 상태
불안전한 할당(Unsafe allocation): 안전 할당의 반대 개념으로, 정보가 주어졌을 때 요청을 모두 이뤄줄 수 없는 상태
회피 알고리즘
자원 할당 그래프 알고리즘 (Resource Allocation Graph Algorithm)
은행원 알고리즘 (Banker's algorithm)
(3) 교착 상태 무시
예방 또는 회피 기법을 사용하면 성능에 영향이 있을 수 있음으로 교착 상태의 발생 확률이 적은 경우 조치를 취하지 않음
(4) 교착 상태 탐지 및 회복
교착 상태가 일어나는 것을 허용함
교착 상태가 발생하는지 주기적으로 검사
교착 상태 발생 시 복구 진행
검사에 따른 계산 및 메모리 사용으로 추가 부담이 있으며, 복구 시에도 이전 상태를 보존해야하기 때문에 메모리를 사용하여 비용이 많이 드는 문제
4. 참고 자료
Last updated