死鎖的概念:
在兩個或多個併發程序中,如果每個程序持有某種資源而又都等待別的程序釋放它或它們現在保持著的資源,在未改變這種狀態之前都不能向前推進,稱這一組程序產生了死鎖
通俗地講,就是兩個或多個程序被無限期地阻塞、相互等待的一種狀態
死鎖產生的原因主要是:
1.系統資源不足
2.程序推進順序非法
產生死鎖的必要條件:
(1)互斥(mutualexclusion),乙個資源每次只能被乙個程序使用
(2)不可搶占(nopreemption),程序已獲得的資源,在未使用完之前,不能強行剝奪
(3)占有並等待(hold andwait),乙個程序因請求資源而阻塞時,對已獲得的資源保持不放
(4)環形等待(circularwait),若干程序之間形成一種首尾相接的迴圈等待資源關係。
這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。
死鎖的解除與預防:
理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖。
在系統設計、程序排程等方面注意如何不讓這四個必要條件成立,如何確定資源的合理分配演算法,避免程序永久佔據系統資源。
此外,也要防止程序在處於等待狀態的情況下占用資源。因此,對資源的分配要給予合理的規劃。
死鎖的處理策略:鴕鳥策略、預防策略、避免策略、檢測與恢復策略
鴕鳥策略:傳說中鴕鳥看到危險就把頭埋在地底下。當你對某一件事情沒有乙個很好的解決方法時,那就忽略它,就像鴕鳥面對危險時會把它深埋在沙礫中,裝作看不到。這樣的演算法稱為「鴕鳥演算法「。這實在不算是乙個演算法,但卻是目前實際系統採用最多的一種策略。例如在
計算機作業系統
中,當死鎖
真正發生且影響系統正常執行時,手動干預—重新啟動。
為使系統不發生死鎖,必須設法破壞產生死鎖的四個必要條件之一,或者允許死鎖產生, 但當死鎖發生時能檢測出死鎖,並有能力實現恢復。
預防死鎖
設定某些限制條件,破壞產生死鎖的四個必要條件中的乙個或幾個,以防止發生死鎖。
避免死鎖
在資源的動態分配過程中,用某種方法防止系統進入不安全狀態,從而避免死鎖。
死鎖的檢測及解除
無需釆取任何限制性措施,允許程序在執行過程中發生死鎖。通過系統的檢測機構及時 地檢測出死鎖的發生,然後釆取某種措施解除死鎖。
預防死鎖和避免死鎖都屬於事先預防策略,但預防死鎖的限制條件比較嚴格,實現起來 較為簡單,但往往導致系統的效率低,資源利用率低;避免死鎖的限制條件相對寬鬆,資源 分配後需要通過演算法來判斷是否進入不安全狀態,實現起來較為複雜。
死鎖的幾種處理策略的比較見表2-14。
表2-14 死鎖處理策略的比較 --
資源分配策略
各種可能模式
主要優點
主要缺點
死鎖預防
保守,寧可資源閒置
一次請求所有資源,資 源剝奪,資源按序分配
適用於做突發式處理 的程序,不必進行剝奪
效率低,程序初始化時 間延長;剝奪次數過多; 不便靈活申請新資源
死鎖避免
是」預防「和」檢測「 的折中(在執行時判斷是 否可能死鎖)
尋找可能的安全允許 順序
不必進行剝奪
必須知道將來的資源 需求;程序不能被長時間 阻塞
死鎖檢測
寬鬆,只要允許就分配 資源
定期檢查死鎖是否已 經發生
不延長程序初始化時 間,允許對死鎖進行現場 處理
通過剝奪解除死鎖,造 成損失
什麼是死鎖?其條件是什麼?怎樣避免死鎖?
死鎖的概念 在兩個或多個併發程序中,如果每個程序持有某種資源而又都等待別的程序釋放它或它們現在保持著的資源,在未改變這種狀態之前都不能向前推進,稱這一組程序產生了死鎖 通俗地講,就是兩個或多個程序被無限期地阻塞 相互等待的一種狀態 死鎖產生的原因主要是 1.系統資源不足 2.程序推進順序非法 產生死...
什麼是死鎖?怎樣避免死鎖的產生?
死鎖是指兩個或兩個以上的程序在執行過程中,因爭奪資源或不正確的程序間推進順序,而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去,此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。雖然程序在執行過程中,可能發生死鎖,但死鎖的發生也必須具備一定的條件,死鎖的發生...
什麼是死鎖?如何避免死鎖?
所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。由於資源占用是互斥的,當某個程序提出申請資源後,使得有關程序在無外力協助下,永遠分配不到必需的資源而...