死鎖定義:
死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。
死鎖條件:
1)互斥條件:指程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時還有其它程序請求資源,則請求者只能等待,直至占有資源的程序用畢釋放。
2)請求和保持條件:指程序已經保持至少乙個資源,但又提出了新的資源請求,而該資源已被其它程序占有,此時請求程序阻塞,但又對自己已獲得的其它資源保持不放。
3)不剝奪條件:指程序已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
4)環路等待條件:指在發生死鎖時,必然存在乙個程序——資源的環形鏈,即程序集合中的p0正在等待乙個p1占用的資源;p1正在等待p2占用的資源,……,pn正在等待已被p0占用的資源。
如何解決死鎖:
死鎖預防。
這是一種較簡單和直觀的事先預防的方法。方法是通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的乙個或者幾個,來預防發生死鎖。預防死鎖是一種較易實現的方法,已被廣泛使用。但是由於所施加的限制條件往往太嚴格,可能會導致系統資源利用率和系統吞吐量降低。
死鎖避免。
系統對程序發出的每乙個系統能夠滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源;如果分配後系統可能發生死鎖,則不予分配,否則予以分配。這是一種保證系統不進入死鎖狀態的動態策略。
死鎖檢測和解除。
先檢測:這種方法並不須事先採取任何限制性措施,也不必檢查系統是否已經進入不安全區,此方法允許系統在執行過程中發生死鎖。但可通過系統所設定的檢測機構,及時地檢測出死鎖的發生,並精確地確定與死鎖有關的程序和資源。檢測方法包括定時檢測、效率低時檢測、程序等待時檢測等。
然後解除死鎖:採取適當措施,從系統中將已發生的死鎖清除掉。
這是與檢測死鎖相配套的一種措施。當檢測到系統中已發生死鎖時,須將程序從死鎖狀態中解脫出來。常用的實施方法是撤銷或掛起一些程序,以便**一些資源,再將這些資源分配給已處於阻塞狀態的程序,使之轉為就緒狀態,以繼續執行。死鎖的檢測和解除措施,有可能使系統獲得較好的資源利用率和吞吐量,但在實現上難度也最大。
銀行家演算法:
當乙個程序申請使用資源的時候,銀行家演算法通過先 試探 分配給該程序資源,然後通過安全性演算法判斷分配後的系統是否處於安全狀態,若不安全則試探分配作廢,讓該程序繼續等待。
資源分為三部分:
已分配、還需要、剩餘。
就是看剩餘資源能否滿足還需要的資源,能滿足就分配,不能就不分配,待該程序結束之後再收回其所占有的資源,更新剩餘資源。
死鎖,銀行家演算法
我們知道作業系統中很多種資源,如cpu,記憶體,io裝置等,每種資源又有很多例項,對於這些資源,程序該如何訪問?請求 獲取 申請空閒資源 使用 占用 程序占用資源 釋放 資源狀態由占用變為空閒 為了更好的了解死鎖,我們將資源分類 1 預防死鎖。這是一種較簡單和直觀的事先預防的方法。方法是通過設定某些...
避免死鎖 銀行家演算法
了解了什麼是死鎖,以及死鎖產生的原因,懂得如何去避免死鎖。在前面 作業系統之 死鎖問題 已經提到。在死鎖的避免上有現今有兩種比較著名的方案,一是有序資源分配法,二是銀行家演算法。這裡講述一下銀行家演算法。銀行家演算法 banker s algorithm 是乙個避免死鎖 deadlock 的著名演算...
銀行家演算法解決死鎖
you死鎖 產生死鎖的根本原因在於系統提供的資源個數少於併發程序所要求的該類資源數。產生死鎖有四個必要條件 1.互斥條件 2.不可搶占條件 3.保持和等待條件 部分分配條件 4.迴圈等待條件 1.互斥條件 即乙個資源每次只能被乙個程序使用 2.保持和等待條件 有乙個程序已獲得了一些資源,但因請求其他...