: 교착상태
1) 상호 배제(Mutual exclusion)
: 자원은 한 번에 한 프로세스만이 사용할 수 있어야 한다
2) 점유 대기(Hold and wait)
: 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.
3) 선점 불가(No preemption)
: 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗아 올 수 없어야 한다.
4) 순환 대기(Circular wait)
: 프로세스의 집합 (P0,P1 ... Pn)에서 P0이 P1이 점유한 자원을 대기하고 P1은 P2가 점유한 자원을 대기하고 P2 ... Pn-1은 Pn이 점유한 자원을 대기해 Pn은 P0이 점유한 자원을 요구해야 한다.
1) 상호 배제 부정
: 여러 개의 프로세스가 공유 자원 사용할 수 있도록 한다
-> 하지만 프린터 등의 일부 입출력 장치나 연산 결과를 저장하는 변수와 같이 동시에 건드리면 위험한 자원들이 있어, 상호 배제 그 자체를 없애는 것은 불가능 하다.
2) 점유 대기 부정
: 프로세스가 실행되기 전 필요한 모든 자원 할당
-> 점유 상태로 대기하는 일이 없으면 기다리고 있는 프로세스는 다른 자원을 갖고 있지 않으므로 순환 대기가 발생할 수 없게 된다. 여러 자원을 땡겨받게 만들거나 기다려야 하는 자원을 할당받으려면 다른 자원을 반환하도록 만들어서 문제를 해결할 수 있다.
3) 선점 불가 부정
: 자원 점유하고 있는 프로세스가 다른 자원 요구할 때 점유하고 있는 자원을 반납하고 요구하는 자원을 사용하기 위해 기다리게 한다
-> 프린터처럼 중간에 뺏었다가 큰일이 나는 자원이 있기 때문에 무턱대고 없앨 수 있는 속성이 아니고 우선 순위 선점이 가능해지면 된다.
4) 순환 대기 부정
: 자원에 고유한 번호 할당하고, 번호 순서대로 자원 요구하도록 한다.
-> 자원에 우선순위를 매기는 등의 방식으로 해결이 가능하다.
E.J.Dijkstra가 제안한 방법으로 은행에서 모든 고객의 요구가 충족되도록 현금을 할당한 데서 유래
교착 상태 탐지
교착 상태로부터 회복
< 프로세스 종료하는 법 >
1. 교착 상태의 프로세스 모두 중지
2. 교착 상태가 제거될 때까지 한 프로세스씩 중지
< 자원 선점 방법 >
1. 교착 상태의 프로세스가 점유하고 있는 자원을 선점해서 다른 프로세스에게 할당하고 해당 프로세스를 정지시킴
2. 우선 순위가 낮은 프로세스, 수행된 횟수가 적은 프로세스 등을 위주로 프로세스의 자원 선점