- 교착상태
: 자원은 주기억장치 공간, CPU 시간, 파일, 입출력 장치 등
: 프로세스는 여러 프로세스가 여러 자원에 대해 경쟁
: 어떤 집합 내에 있는 모든 프로세스가 대기 상태이며, 이 집합 내에 있는 각 프로세스가 이 집합내에 다른 프로세스가 가지고 있는 자원을 기다리고 있으면 교착상태에 있다고 한다.
- 데드락의 4가지 조건
: 4가지 모두 충족되어야 교착상태가 발생(1, 3는 자원 관련, 2, 4는 시스템 관련)
1. 상호배제(Mutual Exclusion)
: 최소한 하나는 비공유 방식으로 점유되어야 한다. 비공유 방식의 점유란 한번에 하나의 프로세스만 자원을 사용할 수 있음을 말한다.
2. 점유와 대기(Hold and Wait)
: 프로세스는 최소한 하나의 자원을 점유하고 있고, 다른 프로세스가 점유하고 있는 다른 프로세스를 기다리고 있어야 한다.
3. 비선점(No Preemption)
: 점유된 자원은 강제로 해제될 수 없고, 프로세스가 자원의 사용을 끝마치고 자발적으로 해제할 때까지는 그 자원을 얻을 수 없어야 한다.
4. 순환 대기(Circular Wait)
: 다음을 만족하며 대기하는 프로세스의 집합 {P0, P1, P2 ... Pn}이 존재해야 한다. P0는 P1, P1은 P2, Pn은 P0가 점유한 자원을 기다리고 있다. 자원 순환 그래프에서 사이클을 가지지 않으면 데드락이 아니지만 만약 사이클을 가지면 데드락일 수도 있고 아닐 수도 있다. (자원 갯수에 따라)
- 교착상태를 처리하는 방법
1. Prevention
: deadlock이 발생하는 4가지 조건 중 하나라도 없애는 것
2. Avoidance
: Deadlock이 일어날 수 있는 상황에 가지 않도록 자원 관리, Banker’s algorithm
3. Detection
: Deadlock이 일어난 것을 확인하고 후 처리