什麼是死鎖,簡述死鎖發生的四個必要條件,如何避免與預防死鎖

什麼是死鎖

死鎖是指多個進程因競爭資源而形成的一種僵局(互相等待),若無外力做用,這些進程都將沒法向前推動。例如,在某一個計算機系統中只有一臺打印機和一臺輸入 設備,進程P1正佔用輸入設備,同時又提出使用打印機的請求,但此時打印機正被進程P2 所佔用,而P2在未釋放打印機以前,又提出請求使用正被P1佔用着的輸入設備。這樣兩個進程相互無休止地等待下去,均沒法繼續執行,此時兩個進程陷入死鎖狀態。

死鎖產生的緣由

1. 系統資源的競爭

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

2. 進程運行推動順序不合適

進程在運行過程當中,請求和釋放資源的順序不當,會致使死鎖。

產生死鎖的四個必要條件:

互斥條件:一個資源每次只能被一個進程使用,即在一段時間內某 資源僅爲一個進程所佔有。此時如有其餘進程請求該資源,則請求進程只能等待。

請求與保持條件:進程已經保持了至少一個資源,但又提出了新的資源請求,而該資源 已被其餘進程佔有,此時請求進程被阻塞,但對本身已得到的資源保持不放。

不可剝奪條件:進程所得到的資源在未使用完畢以前,不能被其餘進程強行奪走,即只能 由得到該資源的進程本身來釋放(只能是主動釋放)。

循環等待條件: 若干進程間造成首尾相接循環等待資源的關係

這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不知足,就不會發生死鎖。

死鎖的避免與預防:

死鎖避免的基本思想:

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

理解了死鎖的緣由,尤爲是產生死鎖的四個必要條件,就能夠最大可能地避免、預防和解除死鎖。因此,在系統設計、進程調度等方面注意如何讓這四個必要條件不成立,如何肯定資源的合理分配算法,避免進程永久佔據系統資源。此外,也要防止進程在處於等待狀態的狀況下佔用資源。所以,對資源的分配要給予合理的規劃。

死鎖避免和死鎖預防的區別:

死鎖預防是設法至少破壞產生死鎖的四個必要條件之一,嚴格的防止死鎖的出現,而死鎖避免則不那麼嚴格的限制產生死鎖的必要條件的存在,由於即便死鎖的必要條件存在,也不必定發生死鎖。死鎖避免是在系統運行過程當中注意避免死鎖的最終發生。

相關文章
相關標籤/搜索