교착상태는 다중 프로그래밍 환경에서 효율적인 자원 관리를 위해 자원을 공유하면서 병행적으로 실행하기 때문에 발생한다. 일반적으로 프로세스는 다음과 같은 순서로 자원으로 사용한다.
- 요청(request)
- 프로세스는 시스템 호출을 통하여 사용하고자 하는 자원 할당을 운영체제에게 요청한다. 운영체제는 가능한 자원을 요청한 프로세스에게 할당해 준다.
- 만약 요청한 자원이 다른 프로세스에 의해 사용중일 경우 프로세스는 대기 상태에서 기다리게 된다.
- 사용(usage)
- 프로세스는 할당받은 자원을 사용한다.
- 해제(release)
- 프로세스는 자원을 사용한 후 시스템 호출을 통하여 운영체제에게 자원 해제를 요청한다.
프로세스의 교착상태가 발생하는 근본적인 원인은 다중 프로그래밍을 지원하는 운영체제에서 네 가지 조건을 동시에 만족시키면서 자원을 관리하기 때문이다. 따라서 운영체제에서 이 중에 한 가지 조건이라도 만족되지 않게 자원을 관리할 경우에는 교착상태는 절대로 발생하지 않을 것임을 의미한다.
(조건-1) : 상호 배제(mutual exclusion)
- 프로세스는 그들이 필요로 하는 자원을 상호 배제적으로 사용한다.
(조건-2) : 점유 및 대기(hold and wait)
- 프로세스는 그들에게 이미 할당된 자원을 점유하면서 필요로 하는 자원을 요청한다.
(조건-3) : 비선점(no preemption)
- 프로세스는 다른 프로세스에게 이미 할당된 자원을 선점하지 못한다.
(조건-4) : 환형 대기(circular wait)
- 조건 2의 특수한 경우로서, N개의 프로세스{P0, P1, ... ,Pn-1}가 대기상태에 있을 때, P0는 P1이 점유하고 있는 자원을, P1은 P2가 점유하고 있는 자원을 , Pn-1은 P0가 점유하고 있는 자원을 각각 요청한다.
Reference
개념이해를 위한 운영체제