以下為個人是一些理解和讀書筆記的結合..
1.什麼是死鎖:程序的併發控制不僅僅要控制若干程序的同步與互斥,確保程序之間正常通訊,還需要解決程序死鎖問題。一旦出現程序死鎖,相應的程序將無法向前推進。如果系統內的絕大多數程序或全部程序死鎖,那麼整個系統將處於癱瘓狀態,造成系統「宕機」。
2.引起死鎖的主要原因:由於程序競爭系統中的資源,而程序對資源的總需求超過系統能提供的最大資源;
3.資源的分類:
可重用性資源和可消耗性資源:
(1)可重用性資源:指某時刻僅允許乙個程序使用,不能被程序消耗的,釋放以後還可被其他程序使用的資源(可供使用者重複多次使用的資源);
特點:a.每個資源中的單元只可分配給乙個程序使用, 不允許多個程序共享;
b.使用順序固定: 請求資源->使用資源->釋放資源;
c.資源中單元數目固定, 程序執行期間不可建立刪除;
(2)可消耗性資源:指可以在程序執行期間動態創造(生產)和撤消(消耗)的資源(又稱臨界資源,) 其數量不限;
特點:資源中的單元數目在程序執行期間不斷變化;
可搶占性資源和不可搶占性資源
(1)可搶占性資源: 某程序獲得該類資源後, 可被其他程序或系統搶占; 如:優先順序高的程序搶占優先順序低的程序的資源;該類資源不會引起死鎖;
(2)不可搶占性資源:系統將該類資源分配給程序後, 不可被其他資源搶占或系統收回, 只有待該程序用完後自動釋放;
4.死鎖產生的原因:
(1)資源的競爭
(2)程序間推進順序非法
5.產生死鎖的必要條件:
(1)互斥條件:競爭的資源一次只能被乙個程序使用。
(2)請求和保持條件:當乙個程序占有一些資源,同時又申請新的資源,如果新資源申請失敗,程序將繼續占有原有資源且阻塞等待。
(3)不剝奪條件:程序已占有的資源不能被其他程序強行剝奪。
(4)環路等待條件:系統中存在乙個由若干程序形成的環形請求鏈,其中的每乙個程序均占有一些資源,同時又申請環形請求鏈中下乙個程序所占有的資源;
前三個條件是死鎖產生的必要條件,但不是充分條件;
"互斥條件"是臨界資源固有的屬性,保證程序互斥訪問臨界資源是必要的。不能因為互斥會導致死鎖而禁止互斥。
「占有且等待」條件很多時候都存在,也是合理的。不可能要求程序每次申請新資源時,必須釋放已占有資源。
「非剝奪」條件也是應該保留的。允許剝奪的資源是指那些,一旦剝奪中斷程序的執行後,可以從斷點恢復執行的資源。否則,屬於非剝奪資源。
第四個條件實際上是前三個條件可能導致的結果;
只要系統出現了迴圈等待,則一定產生死鎖;
這四個條件構成了死鎖產生的充分必要條件;
6.解決死鎖的方法:
按照解決死鎖的時機不同,可以分為三大類:
(1).預防死鎖:指程序申請資源部須遵循某些預先制定的限制條件,以破壞產生死鎖的四個必要條件中的乙個或幾個,防止死鎖發生。該方法嚴格限制了系統資源的分配和使用,會降低系統資源的利用率。
(2).避免死鎖:指當程序申請資源時,需要首先判斷(**),如果滿足這次資源的請求是否會導致死鎖,可能導致死鎖的資源請求將被拒絕,讓請求資源的程序阻塞等待,直到其所需的資源可分配為止。該方法並不嚴格限制產生死鎖的四個必要條件,以提高系統資源的利用率。
(3).檢測並解除死鎖:指當程序申請資源時,不進行任何限制,即允許死鎖發生。但,要求系統定期或不定期檢測是否有死鎖發生。當檢測到死鎖時,在力求解除死鎖。該方法進一步提高了資源利用率。
有關死鎖的討論
死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。產生死鎖的原因 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資源分配不當。產生死鎖的條件有四個 1 互斥條件 所謂互斥就是程序在某一時間內獨佔資源。2 請求與保持條件 乙...
有關死鎖那點事兒
有關死鎖那點事兒 死鎖的概念 死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。產生死鎖的原因 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資...
死鎖的有關問題
死鎖的定義 所謂死鎖是指各併發程序彼此互相等待對方所擁有的資源,且這些併發程序在得到對方的資源之前不會釋放自己所擁有的資源。從而造成大家都想得到資源而又都得不到資源,各併發程序不能繼續向前推進的狀態。死鎖的起因 死鎖的起因是併發程序的資源競爭。產生死鎖的根本原因在於系統提供的資源個數少於併發程序所要...