死鎖的必要條件及避免

2022-06-22 17:48:11 字數 1595 閱讀 4691

死鎖:是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。

此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。

死鎖的原因:

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

程序在執行過程中,請求和釋放資源的順序不當,會導致死鎖

死鎖產生的必要條件

(1)互斥條件:某個資源在一段時間內只能由乙個程序占有,不能同時被兩個以上或兩個的程序占有。

(2)不可搶占條件:程序所獲得的 資源在未使用完畢之前,資源申請者不能強行從資源擁有者手中奪取資源,而只能由該資源的佔有者程序自行釋放。

(3)占有且申請條件:程序至少已經占有乙個資源,但又申請新的資源;由於該資源已被另外程序占有,此時該程序阻塞;但是,它在等待新資源之時,扔繼續占用已占有的資源。

(4)迴圈等待條件:存在一組程序等待序列,其中p1等待p2所占有的某一資源,p2等待p3所占有的某一資源......而pn等待p1所占有的資源,形成乙個程序迴圈等待。

死鎖的預防

避免死鎖的基本思想

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

理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖。所以,在系統設計、程序排程等方面注意如何讓這四個必要條件不成立,如何確定資源的合理分配演算法,避免程序永久佔據系統資源。

此外,也要防止程序在處於等待狀態的情況下占用資源。因此,對資源的分配要給予合理的規劃。

死鎖的避免

(1)安全序列

所謂系統是安全的,是指系統中的所有程序能夠按照某一次序分配資源,並且依次地執行完畢,這種程序序列就是安全的。如果存在這樣乙個安全序列,則系統是安全的;如果系統不存在這樣乙個安全序列,則系統是不安全的。

不安全狀態並不一定會發生死鎖的危險,但它隱含這樣的危險。只要系統能保持安全狀態就可以避免死鎖的發生。

(2)銀行家演算法

銀行家演算法是乙個著名的避免死鎖的演算法。在安全狀態下系統接到乙個程序資源請求後,就先判斷這個資源是否超過了自己所要申請的總的資源數目,判斷完畢後再繼續進行下乙個判斷,即判斷是否小於系統現有的可以分配的資源數目。

如果這兩個判斷都通過,則系統把資源分配給該程序,系統檢查現在的系統是否處於安全狀態,如果安全則正式把資源分配給程序,以完成此次分配,否則剛才的試分配作廢。

死鎖的檢測:當程序進行資源請求時檢查併發程序組是否構成資源的請求和占用環路,如果不存在環路,則系統不存在死鎖;如果存在環路,則系統中可能存在死鎖,也可能不存在死鎖。

死鎖的恢復(死鎖自後的處理):重啟系統;撤銷程序或剝奪資源。

參考:

死鎖的必要條件

假設死鎖是由於程序競爭資源而引起的,我們下面給出死鎖發生的四個必要條件,這四個條件是 coffman首先提出的,所以也稱為coffman條件 1 資源獨佔 mutual exclusion 乙個資源在同一時刻只能分配給乙個程序.如果某一程序申請某一資源,而該資源正被另外某一程序所占有,則申請者需等待...

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

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

死鎖的四個必要條件及死鎖的預防與避免

死鎖 是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。死鎖產生的必要條件 1 互斥條件 某個資源在一段時間內智慧型由乙個程序戰友,不能同時被兩個...