計算機作業系統-死鎖詳解

2020-10-10 12:00:21

如果你對其他作業系統的知識感興趣,請考慮閱讀我的專欄:

【作業系統】

須知

本文僅作學習筆記使用,僅在CSDN網站釋出,如果在其他網站發現,均為侵權行為,請舉報。作者:小王在努力。
參考資料:《計算機作業系統》 湯小鳳 樑紅兵 哲鳳屏 湯子贏 編著


死鎖概述

 死鎖定義

  死鎖是計算機中的一種狀態。會因為一些原因,導致程式阻塞,無法繼續執行。

產生死鎖的原因

  產生死鎖的兩個主要原因:競爭資源程式推進不當

產生死鎖的必要條件

  程式中產生死鎖,都會同時具有以下四個條件:
  1.互斥條件
  2.請求和保持條件
  3.不可搶佔條件
  4.迴圈等待條件

死鎖的處理方法

  通常處理死鎖的方式有三種:
  1.預防死鎖
  2.避免死鎖
  3.檢測和解除死鎖
  預防死鎖是再程式執行之前進行的處理方法。避免死鎖則是在程式執行中解決的。而檢測和解除死鎖則是在死鎖發生後的處理。

預防死鎖

  在程式執行之前,為了預防產生死鎖,我們只需要破壞死鎖產生的條件之一即可。
  常用的方法有:
  1.破壞「請求和保持」條件
  2.破壞「不可搶佔」條件
  3.破壞「迴圈等待」條件

避免死鎖

  在程式執行中,為了避免產生死鎖,我們會判斷系統的是否安全狀態,通過使用銀行家演演算法來求出安全序列來保證程式處理安全狀態,從而不會出現死鎖。
  銀行家演演算法舉例(注意此處表示有四類資源,每類資源的個數,而不是數位1622):

ProcessAllocationNeedAvaliable
P0003200121622
P110001750
P213542356
P303320652
P400140656

(1)該狀態是否安全?
(2)若程序P2提出請求Requset(1,2,2,2)後,系統能否將資源分配給它?

解:
(1)系統是安全的。
根據題意可以得出:

ProcessMax(總共需要的資源量)Allocation(目前已有的資源量)Need (所需的資源量)Avaliable (現有的資源量)
P00044003200121622
P1275010001750
P236 10 1013542356
P3098403320652
P4066 1000140656

據此表可以推出安全序列為{P0,P3,P1,P2,P4}
具體推理過程如下:
1.如果先對P0進行分配則:Av = 1622 - Need=1 6 2 2 - 0 0 1 2 = 1610
遍歷剩下的,1610不足以為下面的資源進行二次分配
程式P0執行完成,釋放資源Av = 1610 + Max = 1654
2.從頭開始遍歷未執行完的程式,通過比較當前Av和Need(if(Av>Need)進行分配;else 跳過),不足以為P1進行分配,不足以為P2進行分配,足以為P3進行分配。
3.對P3進行分配:Av = 1654 - Need = 1002
遍歷剩下的,1002不足以為下面的資源進行二次分配
程式P3執行完成,釋放資源Av = 1002+Max = 1 9 8 6
4.從頭開始遍歷未執行完的程式,通過比較當前Av和Need(if(Av>Need)進行分配;
足以對P1進行分配。
5.對P1進行分配:Av = 19 8 6 - Need = 0236
遍歷剩下的,0236不足以未下面的資源進行二次分配
程式P1執行完成,釋放資源Av = 0236 + Max = 2986
6.從頭開始遍歷未執行完的程式,通過比較當前Av和Need(if(Av>Need)進行分配;
足以對P2進行分配。
7.對P2進行分配:Av = 2 9 8 6 - Need = 0630
遍歷剩下的,0630不足以未下面的資源進行二次分配
程式P2執行完成,釋放資源Av = 0630 + Max = 3 12 13 10
8.從頭開始遍歷未執行完的程式,通過比較當前Av和Need(if(Av>Need)進行分配;
足以對P4進行分配。
9.對P4進行分配:Av = 3 12 13 10 - Need = 3 6 8 4
遍歷剩下的,無可分配資源
程式P4執行完成,釋放資源Av = 3684 + Max = 3 12 14 14
10.執行完畢,序列為{P0,P3,P1,P2,P4}

(2)先為P2分配1,2,2,2資源之後,剩餘的資源量不足以為其他資源進行分配,同時P2資程式也未能執行完畢,不能釋放資源,造成死鎖,所以不能分配給它。

死鎖的檢測與解除

死鎖檢測的方法

  我們可以定時或者當資源利用率低的時候進行死鎖檢測。可以採用的方法有:
  資源分配圖(圖片來自網路,侵權刪除)
在這裡插入圖片描述

  其中圓圈代表程式;舉行代表資源;矩形中的○代表資源的個數。

  觀察P1,已有兩個資源,需要r2的一個資源,並且r2有且分配給P1了,所以P1釋放資源。

在這裡插入圖片描述
  P2有足夠的資源,執行完畢,釋放資源。
  此處的為:多資源、有環、無死鎖。具體的在死鎖定理裡面有提及。

死鎖定理

  1. 如果每類資源只有一個,那麼形成環路之後,必定死鎖
  2. 如果每類資源不只有一個,那麼形成環路之後,不一定死鎖
  3. 死鎖的充分條件是:資源分配圖不可完全簡化。

死鎖解除的方法

  1.回退程序
  2.復原所有程序

後話

  1. 首先給大家說一下,博主經常線上,如果有什麼問題或者想法,可以在下方評論,我會積極反饋的。
  2. 其次還是要請大家能夠多多指出問題,我也會在評論區等候大家!
    在這裡插入圖片描述 .