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