1、考慮某一系統,他有4類資源R1,R2,R3,R4,有5個併發進程P0,P1,P2,P3,P4。各進程的最大資源需求、已分配的資源矩陣和系統當前資源剩餘向量如下圖所示。請按銀行家算法回答下列問題:
⑴ 計算由各進程的剩餘請求向量組成的矩陣。
⑵ 系統當前是處於安全狀態嗎?
⑶ 當進程P4申請的資源分別爲(0,2,0,2)時,系統能立即滿足嗎?
分配矩陣(Allocation) | 最大需求量(Max) | 剩餘請求向量(Need) | ||||||||||
R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | |
P0 | 0 | 0 | 1 | 2 | 0 | 0 | 1 | 2 | 0 | 0 | 0 | 0 |
P1 | 1 | 0 | 0 | 0 | 1 | 7 | 5 | 0 | 0 | 7 | 5 | 0 |
P2 | 1 | 3 | 5 | 4 | 2 | 3 | 5 | 6 | 1 | 0 | 0 | 2 |
P3 | 0 | 6 | 3 | 2 | 0 | 6 | 5 | 2 | 0 | 0 | 2 | 0 |
P4 | 0 | 0 | 1 | 4 | 0 | 6 | 5 | 6 | 0 | 6 | 4 | 2 |
注:剩餘請求向量 = Max - All0cation
(2)判斷系統是否安全,只要檢查系統剩餘資源向量(可利用的資源)是否能在各進程的剩餘請求向量中能找到一個安全序列,分析如下:
當前剩餘資源向量(可利用資源):
R1 | R2 | R3 | R4 |
1 | 5 | 0 | 2 |
進程資源情況 | Work(剩餘資源都給某個進程用) | 剩餘請求向量(Need) | 分配矩陣(Allocation) | Work+Allocation | Finish | ||||||||||||
R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | ||
P0 | 1 | 5 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 2 | 1 | 5 | 1 | 4 | true |
P2 | 1 | 5 | 1 | 4 | 1 | 0 | 0 | 2 | 1 | 3 | 5 | 4 | 2 | 8 | 6 | 8 | true |
P1 | 2 | 8 | 6 | 8 | 0 | 7 | 5 | 0 | 1 | 0 | 0 | 0 | 3 | 8 | 6 | 8 | true |
P3 | 3 | 8 | 6 | 8 | 0 | 0 | 2 | 0 | 0 | 6 | 3 | 2 | 3 | 14 | 9 | 10 | true |
P4 | 3 | 14 | 9 | 10 | 0 | 6 | 4 | 2 | 0 | 0 | 1 | 4 | 3 | 14 | 10 | 14 | true |
在T0時刻存在着一個安全序列{P0,P2,P1,P3,P4},故系統是安全的。
(3)當P4申請資源Request4(0,2,0,2)時;
- Request4(0,2,0,2)<= Need(0,6,4,2)
- Request4(0,2,0,2)<= Available(1,5,0,2)
- 系統先假定可爲P4分配資源,並修改向量值,如圖所示
- 再利用安全性算法檢查此時系統是否安全
分配矩陣(Allocation) | 最大需求量(Max) | 剩餘請求向量(Need) | ||||||||||
R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | |
P0 | 0 | 0 | 1 | 2 | 0 | 0 | 1 | 2 | 0 | 0 | 0 | 0 |
P1 | 1 | 0 | 0 | 0 | 1 | 7 | 5 | 0 | 0 | 7 | 5 | 0 |
P2 | 1 | 3 | 5 | 4 | 2 | 3 | 5 | 6 | 1 | 0 | 0 | 2 |
P3 | 0 | 6 | 3 | 2 | 0 | 6 | 5 | 2 | 0 | 0 | 2 | 0 |
P4 | 0 | 2 | 1 | 6 | 0 | 6 | 5 | 6 | 0 | 4 | 4 | 0 |
當前剩餘資源向量(可利用資源):
R1 | R2 | R3 | R4 |
1 | 3 | 0 | 0 |
進程資源情況 | Work(剩餘資源都給某個進程用) | 剩餘請求向量(Need) | 分配矩陣(Allocation) | Work+Allocation | Finish | ||||||||||||
R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | ||
P0 | 1 | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 2 | 1 | 3 | 1 | 2 | true |
P2 | 1 | 3 | 1 | 2 | 1 | 0 | 0 | 2 | 1 | 3 | 5 | 4 | 2 | 6 | 6 | 6 | true |
P3 | 2 | 6 | 6 | 6 | 0 | 0 | 2 | 0 | 0 | 6 | 3 | 2 | 2 | 12 | 9 | 8 | true |
P1 | 2 | 12 | 9 | 8 | 0 | 7 | 5 | 0 | 1 | 0 | 0 | 0 | 3 | 12 | 9 | 8 | true |
P4 | 3 | 12 | 9 | 8 | 0 | 4 | 4 | 0 | 0 | 2 | 1 | 6 | 3 | 14 | 10 | 14 | true |
由所進行的安全性算法檢查得知,可以找到一個安全序列{P0,P2,P3,P1,P4},因此,系統是安全的,可以立即將P4所申請的資源分配給它。