死鎖和產生死鎖的四個必要條件以及如何避免和預防死鎖

2021-08-22 11:50:06 字數 2448 閱讀 4272

如果一組程序中的每乙個程序都在等待僅由該組程序中的其它程序才能引發的事件,那麼該組程序就是死鎖的。

(1)多個執行緒:彼此申請對方資源而導致的死鎖。a申請b的資源時,因為資源被占用,a會被掛起等待b釋放資源,同時b申請a的資源,因資源被占用b掛起等待a釋放資源,而ab都處於掛起狀態又無法釋放資源,便形成了死鎖。

(2)單個執行緒:a有自己的資源,但還要申請新的資源,而新的資源被占用,則a會掛起等待,同時會保護的資源而不釋放,形成死鎖。

1. 系統資源的競爭:系統資源的競爭導致系統資源不足,以及資源分配不當,導致死鎖。

2. 程序執行推進順序不合適:程序在執行過程中,請求和釋放資源的順序不當,會導致死鎖。

互斥條件:乙個資源每次只能被乙個程序使用,即在一段時間內某資源僅為乙個程序所占有。此時若有其他程序請求該資源,則請求程序只能等待。

請求與保持條件:程序已經保持了至少乙個資源,但又提出了新的資源請求時,該資源已被其他程序占有,此時請求程序被阻塞,但對自己已獲得的資源保持不放。

不可剝奪條件:程序所獲得的資源在未使用完畢之前,不能被其他程序強行奪走,即只能由獲得該資源的程序自己來釋放(只能是主動釋放)。

迴圈等待條件: 若干程序間形成首尾相接迴圈等待資源的關係。

這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。

1)死鎖避免的基本思想:

系統對程序發出每乙個系統能夠滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源,如果分配後系統可能發生死鎖,則不予分配,否則予以分配,這是一種保證系統不進入死鎖狀態的動態策略。

2)如何避免死鎖? 

在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。 一般來說互斥條件是無法破壞的,所以在預防死鎖時主要從其他三個方面入手 :

(1)破壞請求和保持條件:在系統中不允許程序在已獲得某種資源的情況下,申請其他資源,即要想出乙個辦法,阻止程序在持有資源的同時申請其它資源。

方法一:在所有程序開始執行之前,必須一次性的申請其在整個執行過程中所需的全部資源,這樣,該程序在整個執行期間便不會再提出資源請求,從而破壞了「請求」條件。系統在分配資源時,只要有一種資源不能滿足程序的需要,即使其它所需的各資源都空閒也不分配給該程序,而讓該程序等待,由於該程序在等待期間未占用任何資源,於是破壞了「保持」條件。

方法二:要求每個程序提出新的資源申請前,釋放它所占有的資源。這樣,乙個程序在需要資源s時,需要先把它先前占有的資源r釋放掉,然後才能提出對s的申請,即使它很快又要用到資源r。

兩種協議比較:第二種協議優於第一種協議,因為第一種協議會造成資源的嚴重浪費,使資源利用率大大的降低,也會由於佔據大量資源導致其它程序的飢餓問題。

(2)破壞不可搶占條件:允許對資源實行搶奪。

方式一:如果占有某些資源的乙個程序進行進一步資源請求被拒絕,則該程序必須釋放它最初占有的資源,如果有必要,可再次請求這些資源和另外的資源。

方式二:如果乙個程序請求當前被另乙個程序占有的資源,則作業系統可以搶占另乙個程序,要求它釋放資源,只有在任意兩個程序的優先順序都不相同的條件下,該方法才能預防死鎖。

(3)破壞迴圈等待條件

對系統所有資源進行線性排序並賦予不同的序號,這樣我們便可以規定程序在申請資源時必須按照序號遞增的順序進行資源的申請,當以後要申請時需檢查要申請的資源的編號大於當前編號時,才能進行申請。

3)死鎖避免和死鎖預防的區別:

死鎖預防是設法至少破壞產生死鎖的四個必要條件之一,嚴格的防止死鎖的出現,而死鎖避免則不那麼嚴格的限制產生死鎖的必要條件的存在,因為即使死鎖的必要條件存在,也不一定發生死鎖。死鎖避免是在系統執行過程中注意避免死鎖的最終發生。

所謂銀行家演算法,是指在分配資源之前先看清楚,資源分配後是否會導致系統死鎖。如果會死鎖,則不分配,否則就分配。

按照銀行家演算法的思想,當程序請求資源時,系統將按如下原則分配系統資源:

(1) 當乙個程序對資源的最大需求量不超過系統中的資源數時可以接納該程序。

(2) 程序可以分期請求資源,當請求的總數不能超過最大需求量。

(3) 當系統現有的資源不能滿足程序尚需資源數時,對程序的請求可以推遲分配,但總能使程序在有限的時間裡得到資源。

(4) 當系統現有的資源能滿足程序尚需資源數時,必須測試系統現存的資源能否滿足該程序尚需的最大資源數,若能滿足則按當前的申請量分配資源,否則也要推遲分配。

一旦檢測出死鎖,就應立即採取相應的措施,以解除死鎖。死鎖的解除主要有兩種方法:

(1)搶占資源。從乙個或多個程序中搶占足夠數量的資源,分配給死鎖程序,以解除死鎖狀態。

(2)終止或者撤銷程序。終止或者撤銷系統中的乙個或多個死鎖程序,直到打破迴圈環路,使系統從死鎖狀態解脫出來。

死鎖的四個產生必要條件

php愛好者 死鎖 死鎖是指兩個或兩個以上的程序進在執行過程中,由於資源競爭或由於相互通訊而造成的一種阻塞式現象,如果沒有外力影響。那麼它們將永遠的持續下去,此事稱系統產生死鎖現象,這種永遠互相在等待的程序成為死鎖。死鎖的四個產生必要條件 1 互斥條件 程序對所分配到的資源具有排他性使用,一段時間內...

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

某一種資源一次只允許乙個程序占有,也就是當資源被分配後,其他程序就無法訪問該資源,直到當前占有資源的程序訪問結束。乙個程序因請求某一資源而進入阻塞佇列而等待,沒有釋放本身程序就占有的資源。程序占有資源之後,在對該資源沒有使用完之前,不能強行剝奪。多個程序之間形成一種頭尾相接的迴圈等待資源關係。方法一...

死鎖概念?產生死鎖必要條件?如何防止死鎖?

死鎖概念 所謂死鎖,是指兩個或者兩個以上執行緒在執行過程中,因爭奪資源而產生互相等待的現象,若無外力作用,他們都將無法推進下去,此時,稱系統處於死鎖。死鎖產生的四個必要條件 1 互斥條件 程序對所分配的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時,還有其它的程序請求該資源,則請...