死鎖相關

死鎖定義:如果一個集合內多個進程在運行過程中都在等待只能由集合內其他進程釋放的資源,則在無外力作用下,這些進程將永遠相互等待,即死鎖。

產生死鎖的四個必要條件:

互斥條件:進程互斥的使用資源(資源獨佔性);佔有和等待條件(部分分配條件):申請新資源時不釋放已佔有資源;不剝奪條件:一個進程不能搶佔其他進程佔有的資源;循環等待條件:存在一組進程循環等待資源的現象;

死鎖的解決辦法有:死鎖預防、死鎖避免、以及死鎖檢測與接觸;

一般是破壞第二個和第四個條件爲多數,第二個佔有和等待條件,即是一種靜態分配策略,指一個進程在執行前必須申請到它所需求的全部資源,並且知道它所需求的資源均滿足後纔開始執行。

層次分配策略:資源被分成多個層次;當進程得到某一層的某個資源,再申請資源只能向較高層次申請;當進程釋放資源時,必須先釋放佔有的較高層次資源。當進程申請到某一層的某個資源後,若還想申請該層的其他資源,必須先釋放該層中的已佔有資源。層次分配策略屬於死鎖預防。破壞第四個條件、循環等待資源。

也可以一次性分配,破壞佔有和等待條件。破壞不剝奪條件會有不安全性。

死鎖避免:銀行家算法

1、在收到進程的資源申請後,先把資源試探性分配給它;

2、系統用剩下的可用資源和進程集合中其他進程還要的資源數作比較,在進程集合中找到剩餘資源能滿足最大需求量的進程,從而保證這個進程運行完畢並歸還全部資源;

3、將2中進程從進程集合中去掉,系統的剩餘資源變多,反覆執行上述步驟;

4、檢查進程集合,若爲空則表明本次申請可行,系統處於安全狀態;否則本次申請不實施,阻塞進程。

例:總共資源12,p1申請10,p2申請4,p3申請9,分別已分配5、2、2;剩餘資源3,先比較3和三個進程還需要的資源數,p2還需要2,小於3,那麼分配,p2結束後剩餘資源變爲5;在循環,則p1還需要5符合條件,分配,剩餘資源爲10,p3明顯可以滿足,所以存在安全狀態p2->p1->p3;

安全狀態、不安全狀態與死鎖狀態的關係:並非所有不安全狀態都是死鎖狀態,只是可能爲死鎖狀態;只要系統處於安全狀態,則可避免進入死鎖狀態。

死鎖檢測與接觸:資源分配圖

存在環路不一定出現死鎖,如果涉及的資源數量只有1,那麼便是死鎖。

如果資源分配圖不可完全簡化,則必定發生了死鎖。

資源分配圖中入邊表示該進程獲得資源;出邊表示進程申請資源;對於資源節點,入邊表示申請,出邊表示給出的資源;

資源分配圖應該先看每種資源還有多少剩餘,然後再逐個看進程申請的資源,將滿足條件的進程的邊全部刪去,循環往復。

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