作業系統(十二) 死鎖的避免

2021-07-27 22:33:34 字數 4741 閱讀 8241

死鎖避免

下面我們介紹解決死鎖問題的第二類方案:死鎖避免

我們先通過乙個例子來討論一下

死鎖避免解決方案的設計思想

在這個例子當中有兩個程序,

程序 p和程序

q,系統當中一共有m

個資源,假設

a為 p 程序 對資源的需求的

最大量,那麼我們用

系統中資源總數減去 a 就得到了乙個

y 點。 我們可以看一下

y 點 我們分析一下,對於程序

q一旦 q 程序占有的資源數量 超過了

y 這一點,那就意味著

p程序得不到它所需要的最大的需求量 a了

同樣的道理

如果b 是

q 程序對資源的最大需求量

那麼我們得到了乙個 x 點 也就是說如果

p 程序 對資源的占有量超過了

x 點

也就意味著 q 程序得不到它所需要的最大需求量

b 好,那麼我們接著來討論 通過剛才的分析,我們在 這張圖中得到了

4 個區域 我們假設

x1 是程序

p 當前占有的資源量

y1 是程序

q 當前占有的資源量 那麼

x1 和

y1 那麼我們在圖中得到了乙個交叉點 那麼從這個交叉點出發 無論是

p 程序還是

q 程序 系統中剩餘資源的總數 都能夠滿足

p 或者是

q 對 資源的需求量。 我們又假設

x2 是當前程序分配給

p 程序的 資源數量。 那麼

y1 呢是當前 系統分配給程序

q 的資源數量 那麼我們在這裡又得到了另外乙個交叉點 從這張圖當中我們來分析一下 如果在這個交叉點 那麼程序

q 它 還需要的資源量,也就是說它要得到最多的

b 這麼多個資源 它現在得到了

y1 這麼多個資源,但是系統中 剩餘的資源量已經不能夠滿足 程序

q 的剩餘的需求了。 但是呢 在這一點剩餘的資源可以滿足

p 的需求 因此,我們分析得出當

p 得到了它所需要資源,然後 執行結束,釋放資源,從而使得

q 程序 也能夠滿足它的資源需求 因此我們可以看到,如果 這個交叉點進入了這樣乙個區域 那麼系統當中對資源的分配就是有條件的了 那麼在這裡頭對

p 程序可以無條件地分配 但是對於

q 程序它最多不能超過

y 這麼多個資源 我們接著進行分析 假設

x2 是系統當前分配給

p 程序的資源數量

y2 呢是當前

q 程序占有的資源數量 那麼它們的交叉點就落入到這樣乙個區域,乙個三角區域 從這一點出發,我們看到 無論是

p 程序還是

q 程序 系統中剩餘的資源數量 既不能滿足

p 程序對資源的最大需求量 也不能夠滿足

q 程序對資源的最大需求量 因為我們可以看到如果

p 程序 想得到

a 這麼多個數量,那麼這個時候已經 這條線已經穿過了這個這條邊了 而這條邊實際上是系統中總共的資源數量 因此對於

p 程序它拿不到剩餘的資源數量

q 程序也是如此,因此從 這個三角區域當中的某一點出發

p 程序和

q 程序都無法獲得足夠的資源數量,而 能夠繼續執行。

小結一下

通過剛才的分析,得出結論

當程序執行過程中,提出資源申請時

作業系統應該根據當時系統所處的狀態

或者把資源分配給這個程序之後

進入的乙個新的狀態來調整

資源分配策略。

具體分析一下

我們看到左下角這個區域,也就是 qxo3y 這個矩形區域 如果在這個區域裡頭 當任何乙個程序,

p程序或者是

q程序 提出資源申請,作業系統都可以去滿足 下面我們討論另外兩個區域 乙個是左上角這樣乙個矩形區域 乙個是右下角這樣乙個矩形區域 我們以右下角這個矩形區域為例進行討論 假如說目前的 資源分配狀態是在右下角這個矩形區域裡頭 如果

p 程序提出資源申請,作業系統 可以無條件地滿足這個程序的對資源的 需求。 但是如果

q 程序提出了資源申請 那麼當它得到了資源的總數只要不超過

y 那麼作業系統就可以給它分配,如果它 提出了資源申請,作業系統分配給它以後,那麼

q 程序所占有的資源數量超過了

y 這麼多個資源數量 那麼作業系統就不應該把資源分配給

q 程序。 最重要的是作業系統 對資源的分配要控制,不能夠出現 讓程序

p 和

q 對資源的 申請數量的交叉點進入這樣乙個三角區域 因為剛才我們已經看到,一旦進入了三角區域 那麼系統剩餘的資源數量既不能滿足

p 程序 也不能滿足

q 程序對資源的最大的 需求量。 那麼就意味著會導致死鎖的結果 我們來看,如果這個交叉點落到了這條線上,也就是

o1o3

這條線,但是不包括

o1,o3

這兩個點 那麼這個時候系統中的所有資源都被分配完了 而每個程序

p 和

q 都沒有 達到它對資源的最大需求量。 這時候 兩個程序都在等資源,那麼這個時候就出現了死鎖現象 所以 作業系統要在程序申請資源的過程中 進行相應的控制,不能夠讓 結果落入到這樣乙個三角區域 那麼我們提出乙個思考 剛才我們討論的是這樣幾個區域 我們沒有**點和邊 那麼我們提出乙個思考,大家回去可以 自己想一下,那麼點o1,

o2,o3這個點它應該屬於哪個區域 那麼邊

o1o3 o3o2

這兩條邊都分別屬於哪個區域呢?

通過上面的這個例子

我們可以給出死鎖避免的

設計思想。

所謂死鎖避免

就是指在系統的執行過程中

程序給提出各種各樣的資源申請,對於

程序發出的每乙個系統能夠滿足的資源申請

要進行動態檢查

並且根據檢查的結果

來決定是否分配,這就是

死鎖避免的乙個基本的設計思路。

如果分配以後

系統發生了死鎖或者是可能發生死鎖

那麼就不予分配。

否則呢就

給予分配。

那麼我們這裡頭就

從剛才的分析過程中我們看到了有不同的區域

有些區域呢是隨意,可以不管哪個程序提出申請都是可以分配的

有些區域呢是有限制條件的,比如說

可能只能給其中某些程序,而其它程序就不能給

有一些區域呢,如果一旦進入這些區域,那麼

往前執行一定會導致死鎖的發生

因此我們要對系統處於什麼樣的狀態進行相應的

界定。我們給出了乙個安全狀態這樣乙個概念

所謂安全狀態指的是如果系統當中存在著乙個

由所有程序構成的乙個安全序列

如果存在任何乙個安全序列,我們就稱

這個系統目前是處於安全狀態

如果分配給

這個程序資源之後,系統處於安全狀態,那麼這個分配就

完成。如果分配給這個程序這個

資源之後,系統就不是安全狀態了,那麼就不予分配

所以我們要根據系統是否處於安全狀態,就是這種動態檢查

來決定這次分配是否成立

那麼什麼是安全序列呢?

我們給出安全序列的定義

在乙個系統當中,乙個程序序列

不是一般性的,我們把它表示成 p1 到

pn 如果這個程序序列是安全的,

指的是對於

序列當中的

每乙個程序 p

i這個程序它以後還需要的資源數量

不超過當前系統剩餘的資源數量

以及在這個程序,因為是序列,排在這個程序之前的

若干程序當前占有的資源數量之和

那麼我們就說系統是處於安全狀態的

我們簡單地來描述一下這樣乙個場景

這個序列當中的第乙個程序 p1 我們就可以把它描述成

p1 以後還需要的資源數量 不超過系統當前剩餘的資源數量 因為它是第乙個,所以不存在它之前的這些程序了,所以這句話 就到此結束,說

p1 所需要的資源數量 沒有超過系統當前剩餘的資源數量 那麼很顯然這個資源就可以分配給這個程序 那麼讓

p1 結束,執行結束,還回 之前的分配給它的程序,然後 剩下的集合裡頭,我們再看

p2 p2

呢就描述成

p2 以後還 需要的資源數量不超過系統當前剩餘的資源數量 以及它前面的程序

p1 所占有的資源數量之和 那麼

p2 也能夠完成。 然後我們依次來推 就發現這個序列當中的每個程序都能夠完成 這就是安全序列找到了,那麼就意味著系統 不會出現死鎖,是個安全狀態。 我們的 結論就是,

如果系統目前處於安全狀態,就是一定沒有死鎖發生

有了安全狀態,自然就要有不安全狀態。

什麼是不安全狀態呢?

也就是如果在系統當中,我找不到乙個安全序列

那麼這個時候系統就是不安全狀態

不安全狀態我們給出來它一定會導致死鎖發生

當然了,目前它還沒有進入死鎖,因為系統中還有一些資源

但是繼續往前走

不管系統採用什麼樣的資源分配策略

已經無力挽回走向死鎖狀態的這樣乙個目標了

因此我們來

刻畫一下系統的各種狀態

其中有一種是叫安全狀態,安全狀態呢是說我們找到了

乙個,至少找到了乙個安全序列。

當然也可能存在多個安全序列

還有一類狀態叫不安全狀態,而不安全狀態

當中的乙個特定的乙個子集呢,我們就稱之為死鎖了

所以這是對死鎖避免這個討論的過程中

我們界定的,對系統狀態的界定,並且根據不同的系統狀態來決定

分配資源是不是進行

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

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

作業系統死鎖

作業系統死鎖,在作業系統課程當中屬於比較關注的乙個知識點,在這裡做個簡單的梳理。死鎖的四個必要條件 作業系統中有若干程序併發執行,它們不斷申請 使用 釋放系統資源,雖然系統的進 程協調 通訊機構會對它們進行控制,但也可能出現若干程序都相互等待對方釋放資源才能 繼續執行,否則就阻塞的情況。此時,若不借...

作業系統 死鎖

多執行緒以及多程序改善了系統資源的利用率並提高了系統 的處理能力。然而,併發執行也帶來了新的問題 死鎖。死鎖是指多個程序在執行過程中因爭奪資源而造成的一種僵局,當前程序處於這種狀態時,若無外力作用,它們都將無法再向前推進。關於死鎖的一些結論 競爭資源 當系統中供多個程序共享的資源如印表機 公用佇列等...