作業系統 死鎖產生,預防,避免,檢測

2021-08-19 02:35:41 字數 2703 閱讀 4600

死鎖產生的條件

死鎖的預防策略

死鎖避免的方法

死鎖檢測

說死鎖條件之前先要談乙個問題:可重用資源和可消耗資源

可重用資源

資源通常分為兩類:可重用資源和可消耗資源。可重用資源是指一次僅供乙個程序安全使用且不因使用而耗盡的資源。程序得到資源單元並使用後,會釋放這些單元供其他程序繼續使用。可重用資源的例子包括:處理器,i/o通道,記憶體和外存,裝置,以及諸如檔案,資料庫和訊號量之類的資料結構。

可重用死鎖的例子:兩個相互競爭的程序都占用乙個資源並請求另乙個資源時,就會發生死鎖。有點像是兩個小朋友,每個人都有乙個棒棒糖,但是他們都想要對方手裡的棒棒糖,而且誰也不放手,這樣就會卡在這裡,這樣就造成了死鎖。

可消耗資源

可消耗資源是指可被建立和消耗的資源。某種型別可消耗資源的數量通常沒有限制,無阻塞生產程序可以建立任意數量的這類資源。消費程序得到乙個資源時,該資源呢就不再存在。

可消耗資源的例子是:中斷,訊號,訊息和i/o緩衝區的資訊。

可消耗資源的死鎖有可能出現在以下場景:

兩個程序都在等待對方給自己傳送資訊,然後再給那個程序傳送一條資訊。

下面來說死鎖產生的必要條件:

互斥:一次只有乙個程序可以使用乙個資源。其他程序不能訪問已分配給其他程序的資源。

占用且等待:當乙個程序等待其他程序時,繼續占有已分配的資源。

不可搶占:不能強行搶占已占用的資源。

迴圈等待:存在乙個閉合的程序鏈,每個程序至少占用此鏈中下乙個程序所需要的乙個資源。

死鎖預防分為兩類:

間接死鎖預防方法:防止前面列出的前三個必要條件中的任何乙個。

直接死鎖預防方法:防止迴圈等待的發生。

互斥一般來說,第乙個條件不可禁止。需要對資源進行互斥訪問,那麼作業系統就必須支援互斥。

占用且等待

預防占用且等待的條件,可以要求程序一次性地請求所有需要地資源,並阻塞這個程序直到所有資源都被滿足。

但是這種方法,效率比較底下。主要體現在兩個方面:

乙個原因是,乙個程序事先並不知道自己所需要的所有程序。

另乙個原因可能是,乙個程序可能需要一部分資源就可以繼續執行,但是卻要它阻塞很長一段時間直到滿足所有資源。或者是乙個資源已經分配給了它,但是它在很長一段時間內都不會使用到它,然而這個資源也不能被其他程序使用。

不可搶占

預防不可搶占地方法有幾種:

一:占有某些資源的某個程序進一步申請資源時被拒絕,則該程序必須釋放其最初占有的資源,必要時可再次申請這些資源和其他資源。

二:乙個程序請求當前被另乙個程序占有的資源時,作業系統可以搶占另乙個程序,要求它釋放資源,這種方式只能在任意兩個程序的優先順序都不同的情況下,才能預防死鎖。

迴圈等待

迴圈等待條件可以通過定義資源型別的線性順序來預防死鎖。

若乙個程序已經分配了r型別的資源,則其接下來請求的資源只能是那些排在r型別的之後的資源。

假設,給每種資源型別指定乙個下標,當i

首先,死鎖避免與死鎖預防的區別:死鎖避免與死鎖預防相比,可允許更多併發。在死鎖避免中,是否允許當前的資源分配請求是通過判斷該請求是否可能導致死鎖來決定的。因此,死鎖避免是需要知道未來程序資源請求的情況。

兩種死鎖避免情況:

1,若乙個程序的請求會導致死鎖,則不啟動該程序。

2,若乙個程序增加的資源請求會導致死鎖,則不允許這一資源分配。

資源分配拒絕

被稱為銀行家演算法。

首先需要定義安全狀態與不安全狀態。

安全狀態是指:至少有乙個資源分配序列不會導致死鎖。

不安全狀態是指:非安全狀態的乙個狀態。

該策略能確保系統中的程序和資源總處於安全狀態。程序請求一組資源時,假設同意該請求,因而改變了系統的狀態,然後確定結果是否仍處於安全狀態。如果是,同意這個請求;如果不是,阻塞該程序直到同意該請求後系統狀態仍然是安全的。

具體演算法實現可以參考:

c/c++銀行家演算法

銀行家演算法

死鎖避免的優點是,無需死鎖預防中的搶占和回滾程序,且與死鎖預防相比限制更小,但是,它在使用中也有許多限制。

作業系統允許死鎖的發生,但是作業系統會不斷監視系統的進展情況,判斷死鎖是否真的發生,一旦死鎖真的發生則採取專門的措施,解除死鎖並以最小的代價恢復作業系統的執行。

檢測死鎖的時機:

- 當程序由於資源請求不滿足而等待時檢測死鎖—-系統開銷太大

定時檢測

- 系統資源利用率下降時檢測死鎖

乙個簡單的死鎖檢測演算法

舉例說明:

資源分配圖:

資源程序

r1p2

r2p5

r3p4

r4p1……

程序等待表:

程序資源

p1r2

p2r3

p4r4……

分析:此時:p1->r2->p2->r3->p4->r4->p1環路此時已經死鎖。

恢復死鎖

下面按複雜度遞增的順序列出可能的方法

1. 取消所有的死鎖程序

2. 程序回滾到前面定義的某些檢查點。要求必須有回滾和重啟機制。風險是原來的死鎖可能再次發生。

3. 連續取消死鎖程序直到不再產生死鎖。

4. 連續搶占資源直到不再產生死鎖。

死鎖的預防 避免 檢測 恢復

一組程序中每個程序都等待此組程序中其他程序所占有的,因而永遠無法得到的資源,這種現象稱為程序死鎖。產生的條件 上述條件同時滿足時,死鎖才會發生。根本原因是系統提供的資源個數小於併發程序所需的該類資源。可分為競爭資源產生的死鎖 程序通訊產生的死鎖 其他原因等。死鎖預防 靜態策略 死鎖避免 動態策略,不...

死鎖的產生,預防,避免,解除

3 死鎖的必要條件,以及預防 4 死鎖的避免 銀行家演算法 5 死鎖的解除 死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去 死鎖通常源於多個進車鞥對於資源的搶奪,不僅對不可搶占資源進行爭奪時會產生死鎖,而且對可消耗性資...

作業系統 死鎖的預防 避免和解除

預防死鎖 破壞環路等待條件是屬於死鎖的預防 該方法是通過設定某些限制條件,去破壞產生死鎖的四個必要條件的乙個或多個條件,來預防發生死鎖。易實現,被廣泛使用,但由於所施加的限制條件往往太嚴格,因而可能導致系統資源利用率和吞吐量降低。避免死鎖 典型的銀行家演算法是屬於死鎖的避免 避免死鎖是在資源的動態分...