化簡資源分配圖
方法步驟
第一步:先看系統(tǒng)還剩下多少資源沒分配浅役,再看有哪些進程是不阻塞(“不阻塞”即:系統(tǒng)有足夠的空閑資源分配給它)的
第二步:把不阻塞的進程的所有邊都去掉较屿,形成一個孤立的點熙暴,再把系統(tǒng)分配給這個進程的資源回收回來
第三步:看剩下的進程有哪些是不阻塞的界拦,然后又把它們逐個變成孤立的點绢馍。
第四步:最后胖齐,所有的資源和進程都變成孤立的點。這樣的圖就叫做“可完全簡化”栗柒。
如果一個圖可完全簡化礁扮,則不會產(chǎn)生死鎖;如果一個圖不可完全簡化(即:圖中還有“邊”存在)瞬沦,則會產(chǎn)生死鎖太伊。這就是“死鎖定理”。?
實例
第一步:先看R1資源逛钻,它有三個箭頭是向外的僚焦,因此它一共給進程分配了3個資源,此時曙痘,R1沒有空閑的資源剩余芳悲。
第二步:再看R2資源,它有一個箭頭是向外的边坤,因此它
給進程分配了1個資源名扛,此時,R2還剩余一個空閑的資源沒分配茧痒。
第三步:看完資源肮韧,再來看進程,先看進程P2,它只申請一個R1資源惹苗,但此時R1資源已經(jīng)用光了殿较,所以,進程P2進入阻塞狀態(tài)桩蓉,因此淋纲,進程P2暫時不能化成孤立的點。
第四步:再看進程P1院究,它只申請一個R2資源洽瞬,此時,系統(tǒng)還剩余一個R2資源沒分配业汰,因此伙窃,可以滿足P1的申請。這樣样漆,進程P1便得到了它的全部所需資源为障,所以它不會進入阻塞狀態(tài),可以一直運行放祟,等它運行完后鳍怨,我們再把它的所有的資源釋放。相當于:可以把P1的所有的邊去掉跪妥,變成一個孤立的點鞋喇,如下圖所示:
第五步:進程P1運行完后,釋放其所占有的資源(2個R1資源和1個R2資源)眉撵,系統(tǒng)回收這些資源后侦香,空閑的資源便變成2個R1資源和1個R2資源,由于進程P2一直在申請一個R1資源纽疟,所以此時罐韩,系統(tǒng)能滿足它的申請。這樣仰挣,進程P2便得到了它的全部所需資源伴逸,所以它不會進入阻塞狀態(tài)缠沈,可以一直運行膘壶,等它運行完后,我們再把它的所有的資源釋放洲愤。相當于:可以把P2的所有的邊都去掉颓芭,化成一個孤立的點,變成下圖:?
由于這個資源分配圖可完全簡化柬赐,因此亡问,不會產(chǎn)生死鎖。?
而如果資源分配圖中的點,最終不能夠化成孤立的點州藕,則進程資源圖不能夠完全簡化束世,從而會發(fā)生死鎖。