- 대기중인 프로세스들이 다시는 그 상태를 변경 할 수 없으면 이런 상황을 Deadlicks(교착 상태)라고 한다.
1. System Model
- 시스템은 경쟁하는 프로세스들 사이에 분배되어야 할 유한한 수의 자원들로 구성된다. ( CPU, 파일, I/O 장치들..)
- 프로세스는 자원을 사용하기 위해 다음과 같은 순서를 따른다.
- 요청: 자원을 요청한다. 만약 자원이 지금 다른 프로세스가 사용중이라면 대기한다.
- 사용: 프로세스가 자원을 사용해 요청을 수행한다.
- 방출: 프로세스가 자원을 방출한다.
- 이러한 시스템 모델에서 모든 프로세스가 다른 프로세스에 의해서만 발생될 수 있는 사건(예를 들어, 스스로 그 상태를 변경할 수 없는 경우)을 기다린다면 Deadlock(교착 상태)에 빠지게 된다.
2. Deadlock의 특징
다음과 같은 네가지 상황이 동시에 일어날 때 Deadlock이 발생할 가능성이 있다.
- Mutual exclusion;
- Hold - and - wait: 프로세스가 최소 하나의 자원을 점유한 채, 현재 다른 프로세스에 의해 점유된 자원을 얻기 위해 대기해야 한다.
- No preemption: 프로세스가 어떤 자원을 사용하고 있는 것을 선점할 수 없다. 자원은 그 프로세스에 의해 자발적으로 방출되어야 한다.
- Circular wait: p0,p1,…,pn의 대기하는 프로세스가 서로 점유한 자원을 대기할 때.
3. Resource Allocation Graph
-
정점V와 간선E로 구성된 그래프로 V에는 활성 프로세스의 집합인 P와 자원의 집합인 R로 구성된다.
-
P→R: 프로세스가 자원 R을 사용하기 위해 대기중이다.
-
R→P: 프로세스 P에 자원 R이 할당된 것을 의미한다.
-
아래의 자원 할당 그래프를 보면
- 프로세스 P1은 R2를 점유하며 R1 한개를 기다리며 대기중인 상태이다.
- 프로세스 P2는 R1과 R2를 점유하며 R3를 기다리며 대기중인 상태이다.
- 프로세스 P3은 자원 R3를 점유한 상태이다.
- 위의 상태는 P3의 자원할당이 끝나면 자원들이 프로세스에 순차적으로 할당된다.
- 만약 P3가 R2를 기다리며 대기중인 상태가 된다면 교착상태(Deadlock)이 된다.
-
자원할당 그래프가 Cycle로 닫힌 형태를 보이면 교착상태인 것을 알 수 있다.
- 사이클 형태이지만 P2 혹은 P4의 프로세스가 종료되면 다른 프로세스들에게 자원을 할당할 수 있으므로 교착상태가 아니다. 반면 오른쪽은 완전히 닫힌 형태이므로 교착상태이다.
4. Deadlocks 처리방법
A. Prevention
- 교착상태 예방은 교착상태가 되지 않도록 교착상태 발생 조건 네 가지 중 하나라도 발생하지 않게 방지하는 방법이다.
- 상호 배제(Mutual Exclusion) 조건 방지
- 공유가 불가능한 자원에서 상호 배제가 일어난다.
- 여러 프로세스가 자원에 대한 동시 접근을 보장받으면 상호 배제가 깨어지게 되어 교착상태를 예방할 수 있음.
- 어떤 자원들은 근본적으로 공유가 불가능하기 때문에 교착상태를 예방하기 어렵다고 할 수 있음.(ex. 프린터)
- 점유 대기(Hold-and-wait) 조건 방지
- 점유 대기 조건을 부정하기 위해서는 프로세스가 작업을 수행하기 전에 필요한 자원들을 모두 요청하고 획득해야한다.
- 프로세스 하나를 실행하는데 필요한 모든 자원을 먼저 다 할당하고 끝나면 다른 프로세스에 자원을 할당한다.
- 프로세스가 자원을 전혀 갖고 있지 않을 때만 자원 요청을 허용해주는 방법도 있다.
- 자원의 이용률이 낮아지고 기아 상태가 발생할 수 있다.
- 비선점(No preemption) 조건 방지
- 서로 모든 자원에 대한 선점을 허용한다.
- 프로세스가 할당받을 수 없는 자원을 요청하는 경우, 기존에 가지고 있던 자원을 모두 반납하고 새 자원과 이전 자원을 얻기 위해 대기하도록 한다.
- 순환 대기(Circular wait) 조건 방지
- 자원에 고유한 번호를 할당하고 번호 순서대로 자원을 요구하도록 한다.
B. Avoidance
C. Detection & Recovery
- 이 방식은 시스템에서 교착 상태를 허용하는 대신, 교착상태에 빠진 것을 탐지하고 회복하는 방식이다.
- 교착 상태 탐지
D. Ignore
- 유닉스와 윈도우를 포함한 대부분의 운영체제가 사용하는 방법이다.
- 교착 상태 무시란 교착이 일어나는데 교착이 일어나지 않는 ‘척’을 한다.