死鎖,銀行家演算法

2021-07-31 18:05:52 字數 1564 閱讀 9010

我們知道作業系統中很多種資源,如cpu,記憶體,io裝置等,每種資源又有很多例項,對於這些資源,程序該如何訪問?

請求/獲取:申請空閒資源

使用/占用:程序占用資源

釋放:資源狀態由占用變為空閒

為了更好的了解死鎖,我們將資源分類:

1) 預防死鎖。

這是一種較簡單和直觀的事先預防的方法。方法是通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的乙個或者幾個,來預防發生死鎖。預防死鎖是一種較易實現的方法,已被廣泛使用。但是由於所施加的限制條件往往太嚴格,可能會導致系統資源利用率和系統吞吐量降低。

對於互斥條件,可以設為共享資源可同時訪問;

對於持有並等待,設為程序請求資源必須不能持有其他資源,也就是說,要麼不申請資源,要麼一次性申請完所有資源;

對於不搶占(不剝奪)條件,如果程序請求不能理解分配的資源就釋放掉已經占有的資源;

對於迴圈等待條件,對資源排序,要求程序按照順序申請資源

2) 避免死鎖。該方法同樣是屬於事先預防的策略,但它並不須事先採取各種限制措施去破壞產生死鎖的的四個必要條件,而是在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。

系統在安全狀態下一定不會死鎖,但是在不安全狀態可能死鎖也可能不死索,因此我們需要防止系統進入不安全狀態就一定可以避免死鎖。

如何防止系統進入不安全狀態?銀行家演算法為我們提供了乙個很好的辦法:

3)檢測死鎖。

這種方法並不須事先採取任何限制性措施,也不必檢查系統是否已經進入不安全區,此方法允許系統在執行過程中發生死鎖。但可通過系統所設定的檢測機構,及時地檢測出死鎖的發生,並精確地確定與死鎖有關的程序和資源,然後採取適當措施,從系統中將已發生的死鎖清除掉。

4)解除死鎖。

這是與檢測死鎖相配套的一種措施。當檢測到系統中已發生死鎖時,須將程序從死鎖狀態中解脫出來。常用的實施方法是撤銷或掛起一些程序,以便**一些資源,再將這些資源分配給已處於阻塞狀態的程序,使之轉為就緒狀態,以繼續執行。死鎖的檢測和解除措施,有可能使系統獲得較好的資源利用率和吞吐量,但在實現上難度也最大。

死鎖與銀行家演算法

死鎖定義 死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。死鎖條件 1 互斥條件 指程序對所分配到的資源進行排它性使用,即在一段時間內某資源...

避免死鎖 銀行家演算法

了解了什麼是死鎖,以及死鎖產生的原因,懂得如何去避免死鎖。在前面 作業系統之 死鎖問題 已經提到。在死鎖的避免上有現今有兩種比較著名的方案,一是有序資源分配法,二是銀行家演算法。這裡講述一下銀行家演算法。銀行家演算法 banker s algorithm 是乙個避免死鎖 deadlock 的著名演算...

銀行家演算法解決死鎖

you死鎖 產生死鎖的根本原因在於系統提供的資源個數少於併發程序所要求的該類資源數。產生死鎖有四個必要條件 1.互斥條件 2.不可搶占條件 3.保持和等待條件 部分分配條件 4.迴圈等待條件 1.互斥條件 即乙個資源每次只能被乙個程序使用 2.保持和等待條件 有乙個程序已獲得了一些資源,但因請求其他...