⑴ 系统此时是否处于安全状态?
①, 初始化,令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任意进程所需要的资源,所以进入死锁状态。 所以:不能分配!