死鎖產生的必要條件及其處理辦法

2021-08-17 20:27:38 字數 2780 閱讀 6792

雖然程序在執行過程中,可能發生死鎖,但死鎖的發生也必須具備一定的條件,死鎖的發生必須具備以下四個必要條件。

1)互斥條件:指程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時還有其它程序請求資源,則請求者只能等待,直至占有資源的程序用畢釋放。

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

3)不剝奪條件:指程序已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。

4)環路(迴圈)等待條件:指在發生死鎖時,必然存在乙個程序——資源的環形鏈,即程序集合中的p0正在等待乙個p1占用的資源;p1正在等待p2占用的資源,……,pn正在等待已被p0占用的資源,也就是若干程序之間形成一種頭尾相接的迴圈等待資源關係。這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。

1.競爭不可搶占行資源引起死鎖:

通常系統中所擁有的不可搶占性資源其數量不足以滿足多個程序執行的需要,使得程序在執行過程中,會因爭奪資源而陷入僵局。

2.競爭可消耗資源引起消耗

3.程序推進順序不當引起死鎖

死鎖的解除與預防

理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖。所以,在系統設計、程序排程等方面注意如何不讓這四個必要條件成立,如何確定資源的合理分配演算法,避免程序永久佔據系統資源。此外,也要防止程序在處於等待狀態的情況下占用資源,在系統執行過程中,對程序發出的每乙個系統能夠滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源,若分配後系統可能發生死鎖,則不予分配,否則予以分配 。因此,對資源的分配要給予合理的規劃。

(1)有序資源分配法

這種演算法資源按某種規則系統中的所有資源統一編號(例如印表機為1、磁帶機為2、磁碟為3、等等),申請時必須以上公升的次序。系統要求申請程序:

1、對它所必須使用的而且屬於同一類的所有資源,必須一次申請完;

2、在申請不同類資源時,必須按各類裝置的編號依次申請。例如:程序pa,使用資源的順序是r1,r2; 程序pb,使用資源的順序是r2,r1;若採用動態分配有可能形成環路條件,造成死鎖。

採用有序資源分配法:r1的編號為1,r2的編號為2;

pa:申請次序應是:r1,r2

pb:申請次序應是:r1,r2

這樣就破壞了環路條件,避免了死鎖的發生

(2)銀行演算法

避免死鎖演算法中最有代表性的演算法是dijkstra e.w 於2023年提出的銀行家演算法:

該演算法需要檢查申請者對資源的最大需求量,如果系統現存的各類資源可以滿足申請者的請求,就滿足申請者的請求。

這樣申請者就可很快完成其計算,然後釋放它占用的資源,從而保證了系統中的所有程序都能完成,所以可避免死鎖的發生。

死鎖排除的方法

1、撤消陷於死鎖的全部程序;

2、逐個撤消陷於死鎖的程序,直到死鎖不存在;

3、從陷於死鎖的程序中逐個強迫放棄所占用的資源,直至死鎖消失。

4、從另外一些程序那裡強行剝奪足夠數量的資源分配給死鎖程序,以解除死鎖狀態

處理死鎖的方法:

1.預防死鎖  2.避免死鎖 3.檢測死鎖 4.解除死鎖

預防死鎖的方法:

1.破壞「互斥」條件:

就是在系統裡取消互斥。若資源不被乙個程序獨佔使用,那麼死鎖是肯定不會發生的。但一般來說在所列的四個條件中,「互斥」條件是無法破壞的。因此,在死鎖預防裡主要是破壞其他幾個必要條件,而不去涉及破壞「互斥」條件。

2.破壞「占有並等待」條件:

破壞「占有並等待」條件,就是在系統中不允許程序在已獲得某種資源的情況下,申請其他資源。即要想出乙個辦法,阻止程序在持有資源的同時申請其他資源。

方法一:建立程序時,要求它申請所需的全部資源,系統或滿足其所有要求,或什麼也不給它。這是所謂的 「 一次性分配」方案。

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

3.破壞「不可搶占」條件:

破壞「不可搶占」條件就是允許對資源實行搶奪。

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

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

4.破壞「迴圈等待」條件:

破壞「迴圈等待」條件的一種方法,是將系統中的所有資源統一編號,程序可在任何時刻提出資源申請,但所有申請必須按照資源的編號順序(公升序)提出。這樣做就能保證系統不出現死鎖。

死鎖的解除:

一旦檢測出死鎖,就應立即釆取相應的措施,以解除死鎖。

死鎖解除的主要方法有:

1) 資源剝奪法。掛起某些死鎖程序,並搶占它的資源,將這些資源分配給其他的死鎖程序。但應防止被掛起的程序長時間得不到資源,而處於資源匱乏的狀態。

2) 撤銷程序法。強制撤銷部分、甚至全部死鎖程序並剝奪這些程序的資源。撤銷的原則可以按程序優先順序和撤銷程序代價的高低進行。

3) 程序回退法。讓一(多)個程序回退到足以迴避死鎖的地步,程序回退時自願釋放資源而不是被剝奪。要求系統保持程序的歷史資訊,設定還原點。

原文:

死鎖產生的必要條件和解決辦法

三.產生死鎖的四個必要條件?1 互斥條件 程序對所分配到的資源不允許其他程序進行訪問,若其他程序訪問該資源,只能等待,直至占有該資源的程序使用完成後釋放該資源 2 請求和保持條件 程序獲得一定的資源之後,又對其他資源發出請求,但是該資源可能被其他程序占有,此事請求阻塞,但又對自己獲得的資源保持不放 ...

死鎖產生的原因和必要條件

死鎖產生的原因和必要條件1 產生死鎖的原因主要是 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資源分配不當等。2.產生死鎖的四個必要條件 1 互斥條件 乙個資源每次只能被乙個程序使用。2 請求與保持條件 乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。3 不剝奪條件 程序已獲得的資源...

死鎖產生的原因及必要條件

產生死鎖的原因主要是 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資源分配不當等。如果系統資源充足,程序的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則 就會因爭奪有限的資源而陷入死鎖。其次,程序執行推進順序與速度不同,也可能產生死鎖。產生死鎖的四個必要條件 1 互斥條件 乙個資源...