解決死鎖——銀行家算法透析

死鎖是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過程中,由于競(jìng)爭(zhēng)資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象,若無外力作用,它們都將無法推進(jìn)下去。此時(shí)稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程。
避免死鎖算法中最有代表性的算法是Dijkstra E.W 于1968年提出的銀行家算法:

下面我們將從例題中一點(diǎn)一點(diǎn)的分析:
在這里插入圖片描述

解題:
第一步:求出初始剩余資源數(shù)

圖中有四種資源,分別是 A、B、C、D。題中只是給出了每個(gè)資源的總數(shù)量,沒有給出剩余資源數(shù)(一般題中會(huì)給出),那么我們將它求出,每個(gè)資源總數(shù)減去每個(gè)資源已被分配資源數(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)
第二步:求出各個(gè)進(jìn)程的需求資源數(shù)量
在這里插入圖片描述

第三步:比較

我們先檢查A選項(xiàng)

P1 P4 P5 P2 P3

第一個(gè)是 進(jìn)程P1
我們可以在第二步看出
進(jìn)程P1需求的資源數(shù)量為 (0,0,1,2)
那么初始初始剩余資源數(shù) (1,6,2,2) 每個(gè)值大于 (0,0,1,2),那么P1是安全序列。

第二個(gè)是 進(jìn)程P4
我們將上一個(gè)進(jìn)程的剩余資源數(shù) (1,6,2,2) 加上上一個(gè)進(jìn)程的已分配資源數(shù)量 (0,0,3,2) 得出剩余資源量 (1,6,5,4)
將剩余資源量 (1,6,5,4) 與P4需求資源量 (0,6,5,2) 相比較,每個(gè)值都大于。那么P4是安全序列

第三個(gè)是 進(jìn)程P5
我們將上一個(gè)進(jìn)程的 剩余資源量 **(1,6,5,4)**加上上一個(gè)進(jìn)程的已分配資源數(shù)量 **(0,3,3,2)**得出剩余資源數(shù)
(1,9,8,6)
將剩余資源數(shù) (1,9,8,6) 與P5需求資源量 (0,6,5,6) 相比較,每個(gè)值都大于。那么P5是安全序列

第四個(gè)是進(jìn)程P2
我們將上一個(gè)進(jìn)程的 剩余資源量 **(1,9,8,6)**加上上一個(gè)進(jìn)程的已分配資源數(shù)量 **(0,0,1,4)**得出剩余資源數(shù)
(1,9,9,10)
將剩余資源數(shù) **(1,9,9,10)**與P2需求資源量 (1,7,5,0) 相比較,每個(gè)值都大于。那么P2是安全序列

最后一個(gè)是進(jìn)程P3
我們將上一個(gè)進(jìn)程的 剩余資源量 **(1,9,9,10)**加上上一個(gè)進(jìn)程的已分配資源數(shù)量 **(1,0,0,0)**得出剩余資源數(shù)
(2,9,9,10)
將剩余資源數(shù) **(2,9,9,10)**與P3需求資源量 (2,3,5,6) 相比較,每個(gè)值都大于。那么P3是安全序列

那么A選項(xiàng)正確

按照這個(gè)思路,B選項(xiàng)也正確,B選項(xiàng)只是將進(jìn)程P5跟P2調(diào)換了位置。

其余不正確。

總結(jié):

剩余的資源數(shù)大于或者等于進(jìn)程需求的資源數(shù)才是安全序列。

剩余的資源數(shù): 剩余資源數(shù)量=資源的數(shù)量-已分配資源數(shù)量
需求資源數(shù): 最大資源需求量-已分配資源數(shù)量








作者:Vam的金豆之路

主要領(lǐng)域:前端開發(fā)

我的微信:maomin9761

微信公眾號(hào):前端歷劫之路