死鎖是指多個程序因競爭資源而造成的一種僵局(互相等待),若無外力作用,這些程序都將無法向前推進。例如,在某一個計算機系統中只有一臺印表機和一臺輸入 裝置,程序P1正佔用輸入裝置,同時又提出使用印表機的請求,但此時印表機正被程序P2 所佔用,而P2在未釋放印表機之前,又提出請求使用正被P1佔用著的輸入裝置。這樣兩個程序相互無休止地等待下去,均無法繼續執行,此時兩個程序陷入死鎖狀態。
死鎖產生的原因
1. 系統資源的競爭
系統資源的競爭導致系統資源不足,以及資源分配不當,導致死鎖。
2. 程序執行推進順序不合適
程序在執行過程中,請求和釋放資源的順序不當,會導致死鎖。
產生死鎖的四個必要條件:
互斥條件:一個資源每次只能被一個程序使用,即在一段時間內某 資源僅為一個程序所佔有。此時若有其他程序請求該資源,則請求程序只能等待。
請求與保持條件:程序已經保持了至少一個資源,但又提出了新的資源請求,而該資源 已被其他程序佔有,此時請求程序被阻塞,但對自己已獲得的資源保持不放。
不可剝奪條件:程序所獲得的資源在未使用完畢之前,不能被其他程序強行奪走,即只能 由獲得該資源的程序自己來釋放(只能是主動釋放)。
迴圈等待條件: 若干程序間形成首尾相接迴圈等待資源的關係
這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。
死鎖的避免與預防:
死鎖避免的基本思想:
系統對程序發出每一個系統能夠滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源,如果分配後系統可能發生死鎖,則不予分配,否則予以分配。這是一種保證系統不進入死鎖狀態的動態策略。
理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖。所以,在系統設計、程序排程等方面注意如何讓這四個必要條件不成立,如何確定資源的合理分配演算法,避免程序永久佔據系統資源。此外,也要防止程序在處於等待狀態的情況下佔用資源。因此,對資源的分配要給予合理的規劃。
死鎖避免和死鎖預防的區別:
死鎖預防是設法至少破壞產生死鎖的四個必要條件之一,嚴格的防止死鎖的出現,而死鎖避免則不那麼嚴格的限制產生死鎖的必要條件的存在,因為即使死鎖的必要條件存在,也不一定發生死鎖。死鎖避免是在系統執行過程中注意避免死鎖的最終發生。
死鎖是指多個程序因競爭資源而造成的一種僵局(互相等待),若無外力作用,這些程序都將無法向前推進。例如,在某一個計算機系統中只有一臺印表機和一臺輸入 裝置,程序P1正佔用輸入裝置,同時又提出使用印表機的請求,但此時印表機正被程序P2 所佔用,而P2在未釋放印表機之前,又提出請求使用正被P1佔用著的輸入裝置。這樣兩個程序相互無休止地等待下去,均無法繼續執行,此時兩個程序陷入死鎖狀態。
死鎖產生的原因
1. 系統資源的競爭
系統資源的競爭導致系統資源不足,以及資源分配不當,導致死鎖。
2. 程序執行推進順序不合適
程序在執行過程中,請求和釋放資源的順序不當,會導致死鎖。
產生死鎖的四個必要條件:
互斥條件:一個資源每次只能被一個程序使用,即在一段時間內某 資源僅為一個程序所佔有。此時若有其他程序請求該資源,則請求程序只能等待。
請求與保持條件:程序已經保持了至少一個資源,但又提出了新的資源請求,而該資源 已被其他程序佔有,此時請求程序被阻塞,但對自己已獲得的資源保持不放。
不可剝奪條件:程序所獲得的資源在未使用完畢之前,不能被其他程序強行奪走,即只能 由獲得該資源的程序自己來釋放(只能是主動釋放)。
迴圈等待條件: 若干程序間形成首尾相接迴圈等待資源的關係
這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。
死鎖的避免與預防:
死鎖避免的基本思想:
系統對程序發出每一個系統能夠滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源,如果分配後系統可能發生死鎖,則不予分配,否則予以分配。這是一種保證系統不進入死鎖狀態的動態策略。
理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖。所以,在系統設計、程序排程等方面注意如何讓這四個必要條件不成立,如何確定資源的合理分配演算法,避免程序永久佔據系統資源。此外,也要防止程序在處於等待狀態的情況下佔用資源。因此,對資源的分配要給予合理的規劃。
死鎖避免和死鎖預防的區別:
死鎖預防是設法至少破壞產生死鎖的四個必要條件之一,嚴格的防止死鎖的出現,而死鎖避免則不那麼嚴格的限制產生死鎖的必要條件的存在,因為即使死鎖的必要條件存在,也不一定發生死鎖。死鎖避免是在系統執行過程中注意避免死鎖的最終發生。