解決死鎖——銀行家算法透析
死鎖是指兩個或兩個以上的進程在執(zhí)行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象,若無外力作用,它們都將無法推進下去。此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。
避免死鎖算法中最有代表性的算法是Dijkstra E.W 于1968年提出的銀行家算法:
下面我們將從例題中一點一點的分析:
解題:
第一步:求出初始剩余資源數(shù)
圖中有四種資源,分別是 A、B、C、D。題中只是給出了每個資源的總數(shù)量,沒有給出剩余資源數(shù)(一般題中會給出),那么我們將它求出,每個資源總數(shù)減去每個資源已被分配資源數(shù)就得到各自資源的剩余資源數(shù)。
這里得出的是:
A 資源已被分配2,
B資源已被分配6,
C資源已被分配12,
D資源已被分配12。
那么總數(shù)量減去已被分配的得出:
A資源 3-2=1
B資源 12-6=6
C資源 14-12=2
D資源 14-12=2
最后得到初始剩余資源數(shù) (1,6,2,2)
第二步:求出各個進程的需求資源數(shù)量
第三步:比較
我們先檢查A選項
P1 P4 P5 P2 P3
第一個是 進程P1
我們可以在第二步看出
進程P1需求的資源數(shù)量為 (0,0,1,2)
那么初始初始剩余資源數(shù) (1,6,2,2) 每個值大于 (0,0,1,2),那么P1是安全序列。
第二個是 進程P4
我們將上一個進程的剩余資源數(shù) (1,6,2,2) 加上上一個進程的已分配資源數(shù)量 (0,0,3,2) 得出剩余資源量 (1,6,5,4)
將剩余資源量 (1,6,5,4) 與P4需求資源量 (0,6,5,2) 相比較,每個值都大于。那么P4是安全序列
第三個是 進程P5
我們將上一個進程的 剩余資源量 **(1,6,5,4)**加上上一個進程的已分配資源數(shù)量 **(0,3,3,2)**得出剩余資源數(shù)
(1,9,8,6)
將剩余資源數(shù) (1,9,8,6) 與P5需求資源量 (0,6,5,6) 相比較,每個值都大于。那么P5是安全序列
第四個是進程P2
我們將上一個進程的 剩余資源量 **(1,9,8,6)**加上上一個進程的已分配資源數(shù)量 **(0,0,1,4)**得出剩余資源數(shù)
(1,9,9,10)
將剩余資源數(shù) **(1,9,9,10)**與P2需求資源量 (1,7,5,0) 相比較,每個值都大于。那么P2是安全序列
最后一個是進程P3
我們將上一個進程的 剩余資源量 **(1,9,9,10)**加上上一個進程的已分配資源數(shù)量 **(1,0,0,0)**得出剩余資源數(shù)
(2,9,9,10)
將剩余資源數(shù) **(2,9,9,10)**與P3需求資源量 (2,3,5,6) 相比較,每個值都大于。那么P3是安全序列
那么A選項正確
按照這個思路,B選項也正確,B選項只是將進程P5跟P2調(diào)換了位置。
其余不正確。
總結(jié):
剩余的資源數(shù)大于或者等于進程需求的資源數(shù)才是安全序列。
剩余的資源數(shù): 剩余資源數(shù)量=資源的數(shù)量-已分配資源數(shù)量
需求資源數(shù): 最大資源需求量-已分配資源數(shù)量
作者:Vam的金豆之路
主要領(lǐng)域:前端開發(fā)
我的微信:maomin9761
微信公眾號:前端歷劫之路