시스템 자원에 대한 요구가 뒤엉킨 상태로 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴때 무한 대기에 빠지는 상황을 말한다.
상호배제
한번에 프로세스 하나만 해당 자원을 사용할 수 있다.
사용중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해제될 때까지 기다려야 한다.
점유대기
자원을 최소한 하나 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재한다.
비선점
이미 할당된 자원을 강제로 빼앗을 수 없다.
순환대기
대기 프로세스의 집합이 순환형태로 자원을 대기하고 있어야한다.
프로세스1과 프로세스2가 자원 1,2를 모두 얻어야한다고 가정한다.
t1 : 프로세스1이 자원1을 얻고, 프로세스2가 자원을 2를 얻는다.
t2 : 프로세스1은 자원2를 기다리고, 프로세스2는 자원1을 기다린다.
현재 서로 원하는 자원이 상대방에 할당되어 있어서 두 프로세스는 무한정 wait 상태에 빠진다 => 데드락
-예방(prevention)
교착 상태 발생 조건 중 하나를 제거하면서 해결한다.(자원 낭비 심함)
-회피(avoidance)
교착 상태 발생 시 피해나가는 방법
시스템 자원은 A : 10, B : 5, C : 7개의 자원이 있다.
Need(Max-Allocation) 값은
A B C
P0 7 4 3
P1 1 2 2
P2 6 0 0
P3 0 1 1
P4 4 3 1
이다.
Need 값이 Available 값보다 작거나 같아야지 자원할당이 가능하다.
1. P0 => 할당 안됨
2. P1 => (1,2,2) <= (3,3,2) 할당 됨 => 자원 반환 => Available (5,3,2)
3. P2 => 할당 안됨
4. P3 => (0,1,1) <= (5,3,2) 할당 됨 => 자원 반환 => Available (6,4,3)
5. P4 => (4,3,1) <= (6,4,3) 할당 됨 => 자원 반환 => Available (6,4,5)
6. P2 => (6,0,0) <= (6,4,5) 할당 됨 => 자원 반환 => Available (10,4,7)
7. P0 => (7,4,3) <= (10,4,7) 할당 됨 => 자원 반환 => Available (10,5,7)
P1 -> P3 -> P4 -> P2 -> P0 일때 안전하다.
교착 상태가 되도록 허용한 다음 회복시키는 방법이다.
-탐지(detection)
자원 할당 그래프를 통해 교착 상태를 탐지한다.
지원 요청시, 탐지 알고리즘을 실행시켜 그에 대한 오버헤드를 발생한다.
-회복(recovery)
교착 상태 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복시키는 방법이다.
프로세스 종료 방법
자원 선점 방법