银行家算法解析
先說一下銀行家的算法:
設進程cusneed提出請求REQUEST [i],則銀行家算法按如下規則進行判斷。
(1)如果REQUEST [cusneed] [i]<= NEED[cusneed][i],則轉(2);否則,出錯。
(2)如果REQUEST [cusneed] [i]<= AVAILABLE[i],則轉(3);否則,等待。
(3)系統試探分配資源,修改相關數據:
AVAILABLE[i]-=REQUEST[cusneed][i];
ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];
NEED[cusneed][i]-=REQUEST[cusneed][i];
(4)系統執行安全性檢查,如安全,則分配成立;否則試探險性分配作廢,系統恢復原狀,進程等待。
題目中的計算過程:
先算出每個進程還需要多少進程才能滿足,即Request的值 = Need - Allocation
進程名 Allocation Need Request Available
ABC ABC ABC ABC
P1 4 0 5 4 0 11 0 0 6 2 3 3
P2 4 0 2 5 3 6 1 2 4
P3 2 1 4 4 2 5 2 1 1
P4 2 1 2 5 5 9 3 4 7
P5 3 1 3 4 2 4 1 1 1
第一題A項p3 p1 p4 p2 p5
先分配給P3,其Request(2,1,1) < available(2,2,3) 滿足,分配資源等待P3完成,P3進程完成之后,Available = (2,1,4) + (2,3,3) = (4,4,7)
然后分配給p1,其Request(0,0,6) < available(4,4,7),可以滿足資源,分配資源給P1,P1完成任務釋放資源Available = (4,0,5) +(4,4,7) = (8,4,12)
接著P4,request(3 4 7) < available(8,4,12),可以滿足資源,分配資源給P4,P4完成任務釋放資源Available = (2,1,2) +(8,4,12) = (10,5,14)
接著p2,request(1 2 4) < available(10,5,14)可以滿足資源,分配資源給P4,P4完成任務釋放資源Available = (4,0,2)+ (10,5,14) = (14,5,16)
最后P5,request(1 1 1) < available(14,5,16)可以滿足資源,分配資源給P4,P4完成任務,資源全部釋放,變為(3 1 3 )+ (14,5,16) = (17,6,19)
所以A是安全序列。
同理分析B p1 p3 p5 p2 p4,先分配給P1的話Request(0,0,6) > available(2,3,3),C資源不滿足,所以該序列不安全。
分析C項p4 p2 p3 p5 p1,先分配給p4, Request(3,4,7) > available(2,3,3),ABC資源都不滿足,該序列不安全。
分析D項p2 p3 p1 p4 p5,先分配給P2,Request(1,2,4) > available(2,3,3),C資源不滿足,所以該序列不安全。
第二題,分析方法跟上面的一樣,只是比較費時。如果單選的話,看一下答案,D項,先分配給P4,顯然完成P4還需( 3 4 7) ,其大于 available,所D項不安全
總結
- 上一篇: 修复VSCode关联文件的图标 - Py
- 下一篇: nim_duilib加libvlc制作简