⑴ 系統此時是否處於安全狀態?
①, 初始化,令Work = Available, Finish列全爲false
進程 | Max | Allocation | Need | Work | Finish |
R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | |
P0 | 0 0 4 4 | 0 0 3 2 | 0 0 1 2 | 1 6 2 2 | false |
P1 | 2 7 5 0 | 1 0 0 0 | 1 7 5 0 | false | |
P2 | 3 6 10 10 | 1 3 5 4 | 2 3 5 6 | false | |
P3 | 0 9 8 4 | 0 3 3 2 | 0 6 5 2 | false | |
P4 | 0 6 6 10 | 0 0 1 4 | 0 6 5 6 | false |
② Need1 ≤ Work, 所以將資源分配給P0,同時將Finish[0]改爲true, 如下圖:
進程 | Max | Allocation | Need | Work | Finish |
R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | |
P0 | 0 0 4 4 | 0 0 3 2 | 0 0 1 2 | 1 6 6 6 | true |
P1 | 2 7 5 0 | 1 0 0 0 | 1 7 5 0 | false | |
P2 | 3 6 10 10 | 1 3 5 4 | 2 3 5 6 | false | |
P3 | 0 9 8 4 | 0 3 3 2 | 0 6 5 2 | false | |
P4 | 0 6 6 10 | 0 0 1 4 | 0 6 5 6 | false |
③ Need3 ≤ Work,所以將資源分配給P3,同時將Finish[3]改爲true, 如下圖:
進程 | Max | Allocation | Need | Work | Finish |
R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | |
P0 | 0 0 4 4 | 0 0 3 2 | 0 0 1 2 | true | |
P1 | 2 7 5 0 | 1 0 0 0 | 1 7 5 0 | false | |
P2 | 3 6 10 10 | 1 3 5 4 | 2 3 5 6 | false | |
P3 | 0 9 8 4 | 0 3 3 2 | 0 6 5 2 | 1 15 14 10 | true |
P4 | 0 6 6 10 | 0 0 1 4 | 0 6 5 6 | false |
④ Need1 ≤ Work,所以將資源分配給P1,同時將Finish[1]改爲true, 如下圖:
進程 | Max | Allocation | Need | Work | Finish |
R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | |
P0 | 0 0 4 4 | 0 0 3 2 | 0 0 1 2 | true | |
P1 | 2 7 5 0 | 1 0 0 0 | 1 7 5 0 | 3 22 19 10 | true |
P2 | 3 6 10 10 | 1 3 5 4 | 2 3 5 6 | false | |
P3 | 0 9 8 4 | 0 3 3 2 | 0 6 5 2 | true | |
P4 | 0 6 6 10 | 0 0 1 4 | 0 6 5 6 | false |
⑤ Need2 ≤ Work,所以將資源分配給P2,同時將Finish[2]改爲true, 如下圖:
進程 | Max | Allocation | Need | Work | Finish |
R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | |
P0 | 0 0 4 4 | 0 0 3 2 | 0 0 1 2 | true | |
P1 | 2 7 5 0 | 1 0 0 0 | 1 7 5 0 | true | |
P2 | 3 6 10 10 | 1 3 5 4 | 2 3 5 6 | 6 28 29 20 | true |
P3 | 0 9 8 4 | 0 3 3 2 | 0 6 5 2 | true | |
P4 | 0 6 6 10 | 0 0 1 4 | 0 6 5 6 | false |
⑥ Need4 ≤ Work,所以將資源分配給P4,同時將Finish[4]改爲true, 如下圖:
進程 | Max | Allocation | Need | Work | Finish |
R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | |
P0 | 0 0 4 4 | 0 0 3 2 | 0 0 1 2 | true | |
P1 | 2 7 5 0 | 1 0 0 0 | 1 7 5 0 | true | |
P2 | 3 6 10 10 | 1 3 5 4 | 2 3 5 6 | true | |
P3 | 0 9 8 4 | 0 3 3 2 | 0 6 5 2 | true | |
P4 | 0 6 6 10 | 0 0 1 4 | 0 6 5 6 | 6 34 35 30 | true |
⑵ 若此時P2 進程發出Request2 [1,2,2,2],系統能否將資源分配給它?
假設可以分配, 分配後如下圖:
進程 | Max | Allocation | Need | Work | Finish |
R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | R1 R2 R3 R4 | |
P0 | 0 0 4 4 | 0 0 3 2 | 0 0 1 2 | false | |
P1 | 2 7 5 0 | 2 2 2 2 | 0 5 3 0 | 0 4 0 0 | false |
P2 | 3 6 10 10 | 1 3 5 4 | 2 3 5 6 | false | |
P3 | 0 9 8 4 | 0 3 3 2 | 0 6 5 2 | false | |
P4 | 0 6 6 10 | 0 0 1 4 | 0 6 5 6 | false |
這時候, 剩餘資源不能滿足P0~04任意進程所需要的資源,所以進入死鎖狀態。 所以:不能分配!