2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태를 교착 상태(deadlock) 라고 한다.
교착 상태는 아사 현상과 비슷해 보이지만 차이점이 있다. 아사 현상은 운영체제가 잘못된 정책을 사용하여 특정 프로세스의 작업이 지연되는 문제이고, 교착 상태는 여러 프로세스가 작업을 진행하다 보니 자연적으로 일어나는 문제이다. 따라서 운영체제는 감시를 하다가 교착 상태가 발생하면 강압적으로 해결해야 한다. (직접적인 개입이 필요하다.)
교착 상태는 아래 네 가지 조건을 모두 충족해야 발생하고, 이 중 단 하나라도 충족하지 않으면 교착상태가 발생하지 않는다.
상호 배제
: 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이어야 한다.비선점
: 한 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는 비선점 자원이어야 한다.점유와 대기
: 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태여야 한다.원형 대기
: 점유와 대기를 하는 프로세스 간의 관계가 원을 이루어야 한다.상호 배제와 비선점 조건은 임계구역과 관련이 있다. 임계구역을 보호하기 위해 잠금 장치를 사용하면 상호 배제와 비선점 조건이 보장되기 때문에 교착 상태가 발생할 수 있다.
해결 방법 | 특징 | 비고 |
---|---|---|
교착 상태 예방 | 교착 상태를 유발하는 네 가지 조건을 무력화한다. | 실효성이 적어 잘 사용되지 않는다. |
교착 상태 회피 | 교착 상태가 발생하지 않는 수준으로 자원을 할당한다. | 자원을 얼만큼 할당해야 교착 상태가 발생하지 않는지 지표가 없다. |
교착 상태 검출 | 자원 할당 그래프를 모니터링하여 교착 상태를 발견한다. | 교착 상태가 검출되면 회복 단계로 이어진다. |
교착 상태 회복 | 교착 상태를 검출한 후 해결한다. | 가장 현실적인 방법이다. |
교착 상태를 유발하는 네 가지 조건 중 하나라도 발생하지 않도록 막아 교착 상태를 처리하는 방법이다.
상호 배제 예방
시스템 내에 있는 상호 배타적인 모든 자원, 즉 독점적으로 사용할 수 있는 자원을 없애버리는 방법이다. 하지만 시스템적으로 공유할 수 없는 자원이 있기 때문에 상호 배제를 무력화하는 것은 사실상 어렵다.