1. 程式人生 > >[轉]資源分配圖化簡法

[轉]資源分配圖化簡法

瞭解程序資源圖

二 化簡資源分配圖

方法步驟

  • 第一步:先看系統還剩下多少資源沒分配,再看有哪些程序是不阻塞(“不阻塞”即:系統有足夠的空閒資源分配給它)的
  • 第二步:把不阻塞的程序的所有邊都去掉,形成一個孤立的點,再把系統分配給這個程序的資源回收回來
  • 第三步:看剩下的程序有哪些是不阻塞的,然後又把它們逐個變成孤立的點。
  • 第四步:最後,所有的資源和程序都變成孤立的點。這樣的圖就叫做“可完全簡化”。
  • 如果一個圖可完全簡化,則不會產生死鎖;如果一個圖不可完全簡化(即:圖中還有“邊”存在),則會產生死鎖。這就是“死鎖定理”。 

例項

  • 第一步:先看R1資源,它有三個箭頭是向外的,因此它一共給程序分配了3個資源,此時,R1沒有空閒的資源剩餘。
  • 第二步:再看R2資源,它有一個箭頭是向外的,因此它一共給程序分配了1個資源,此時,R2還剩餘一個空閒的資源沒分配。
  • 第三步:看完資源,再來看程序,先看程序P2,它只申請一個R1資源,但此時R1資源已經用光了,所以,程序P2進入阻塞狀態,因此,程序P2暫時不能化成孤立的點。
  • 第四步:再看程序P1,它只申請一個R2資源,此時,系統還剩餘一個R2資源沒分配,因此,可以滿足P1的申請。這樣,程序P1便得到了它的全部所需資源,所以它不會進入阻塞狀態,可以一直執行,等它執行完後,我們再把它的所有的資源釋放。相當於:可以把P1的所有的邊去掉,變成一個孤立的點,如下圖所示:

  • 第五步:程序P1執行完後,釋放其所佔有的資源(2個R1資源和1個R2資源),系統回收這些資源後,空閒的資源便變成2個R1資源和1個R2資源,由於程序P2一直在申請一個R1資源,所以此時,系統能滿足它的申請。這樣,程序P2便得到了它的全部所需資源,所以它不會進入阻塞狀態,可以一直執行,等它執行完後,我們再把它的所有的資源釋放。相當於:可以把P2的所有的邊都去掉,化成一個孤立的點,變成下圖: 

由於這個資源分配圖可完全簡化,因此,不會產生死鎖。 
而如果資源分配圖中的點,最終不能夠化成孤立的點,則程序資源圖不能夠完全簡化,從而會發生死鎖。

 

 轉:https://blog.csdn.net/coding1994/article/details/52474731