操作系統------資源分配圖化簡

1.資源分配圖:

 

2.資源分配圖化簡:

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

 

舉例:

第一步:先看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的所有的邊都去掉,化成一個孤立的點,變成下圖: 

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章