1) Mutual exclusion
2) Hold and wait
3) Non-preemption
4) Circular wait
1) p1에게 먼저 2개를 할당하고 작업을 끝낸다.
2) 반환된 5개의 자원을 p0에게 할당한 뒤 작업을 끝낸다.
3) 마지막으로 반환된 자원들을 p2에게 할당하여 작업을 끝낸다.
4) p2가 끝난 뒤 12개의 자원이 모두 반납된다. 이후 해당 자원들을 순서를 정하여 작업을 진행한다.
Available[m] : system에서 가지고 있는 자원 m개 (할당하고 남아서 가용한 resource 수)
Max[n, m] = k : n행 process가 m의 위치의 resource를 최대 k개 필요로 한다.
Allocation[n, m] : n행 process가 현재 할당받은 m의 위치에 있는 resource 개수
Need[n, m] : Max[n, m] - Allocation[n, m]
p1에 먼저 할당을 한 뒤 작업을 끝내면 Available = 5, 3, 2
p3를 만족하기 때문에 할당한 뒤 작업을 끝내면 Available = 7, 4, 3
p0를 만족하기 때문에 할당한 뒤 작업을 끝내면 Available = 7, 5, 3
p2를 만족하기 때문에 할당한 뒤 작업을 끝내면 Available = 10, 5, 5
p4를 마지막으로 작업을 끝내면 최종적으로 Available = 10, 5, 7
최종적으로 반납된 상태의 Available = Allocation + 초기 Available
<p1, p3, p4, p2, p0>의 sequence도 존재한다.
if p1 = 1, 0, 2 : accept / if p0 = 0, 2, 0 : reject