1. 程式人生 > >軟考(三)

軟考(三)

技術 完全 我們 簡化 步驟 net Coding 能夠 details

http://blog.csdn.net/coding1994/article/details/52474731

一 了解進程資源圖


Markdown編輯器用的還不是太熟,表格中插入圖片這事還沒學會,糾結著在Word中總結了下,然後截個圖放在下面供大家參考:

技術分享


二 化簡資源分配圖


方法步驟

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

如果一個圖可完全簡化,則不會產生死鎖;如果一個圖不可完全簡化(即:圖中還有“邊”存在),則會產生死鎖。這就是“死鎖定理”。

實例

技術分享

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

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

軟考(三)