操作系統之死鎖的避免-銀行家算法詳解

1.銀行家算法中的數據結構

  (1) 可利用資源向量Available。這是一個含有m個元素的數組,其中的每一個元素代表一類可利用的資源數目,其初始值是系統中所配置的該類全部可用資源的數目,其數值隨該類資源的分配和回收而動態地改變。如果Available[j]=K,則表示系統中現有Rj類資源K個。
  (2) 最大需求矩陣Max。這是一個n×m的矩陣,它定義了系統中n個進程中的每一個進程對m類資源的最大需求。如果Max[i,j]=K,則表示進程i需要Rj類資源的最大數目爲K。
  (3) 分配矩陣Allocation。這也是一個n×m的矩陣,它定義了系統中每一類資源當前已分配給每一進程的資源數。如果Allocation[i,j]=K,則表示進程i當前已分得R j類資源的數目爲K。
  (4) 需求矩陣Need。這也是一個n×m的矩陣,用以表示每一個進程尚需的各類資源數。如果Need[i,j]=K,則表示進程i還需要R j類資源K個,方能完成其任務。

  上述三個矩陣間存在下述關係:
                  Need[i, j]=Max[i, j]-Allocation[i, j]

2.銀行家算法

  設Requestᵢ是進程Pᵢ的請求向量,如果Requestᵢ[j]=K,表示進程Pᵢ需要K個Rⱼ類型的資源。當Pᵢ發出資源請求後,系統按下述步驟進行檢查:
  (1)如果Requestᵢ[j]<=Need[i, j],便轉向步驟(2);否則認爲出錯,因爲它所需要的資源數已超過它所宣佈的最大值。
  (2)如果Requestᵢ[j]<=Available[j],便轉向步驟(3);否則,表示尚無足夠資源,Pᵢ須等待。
  (3)系統試探着把資源分配給進程Pᵢ,並修改下面數據結構中的數值:
在這裏插入圖片描述
  (4)系統執行安全性算法,檢查此次資源分配後系統是否處於安全狀態。若安全,才正式將資源分配給進程Pᵢ,以完成本次分配;否則,將本次的試探分配作廢,恢復原來的資源分配狀態,讓進程Pᵢ等待。

3.安全性算法

  (1)設置兩個向量:①工作向量Work,它表示系統可提供給進程繼續運行所需的各類資源數目,它含有m個元素,在執行安全算法開始時,Work=Available;②Finish:它表示系統是否有足夠的資源分配給進程,使之運行完成。開始時先做Finish[i]:=false;當有足夠資源分配給進程時,再令Finish[i]:=true。
  (2)從進程集合中找到一個能滿足下述條件的進程:
   ①Finish[i]=false;
   ②Need[i, j]<=Work[j];
   若找到,執行步驟(3),否則,執行步驟(4)。
  (3)當進程Pᵢ獲得資源後,可順利執行,直至完成,並釋放出分配給它的資源,故應執行: .
   Work[j] = Work[j]+Allocation[i, j];
   Finish[i] =true;
   go to step 2;
  (4)如果所有進程的Finish[j]=true都滿足,則表示系統處於安全狀態;否則,系統處於不安全狀態。

4.銀行家算法之例

  假定系統中有五個進程{P₀,P₁, P₂,P₃, P₄}和三類資源{A, B, C},各種資源的數量分別爲10、5、7,在T₀時刻的資源分配情況如下圖所示所示。
在這裏插入圖片描述
  (1) T₀時刻的安全性:利用安全性算法對T₀時刻的資源分配情況進行分析(如下圖所示)可知,在T₀時刻存在着一個安全序列{P₁, P₃, P₄,P₂,P₀},故系統是安全的。
T₀時刻的安全序列
  (2) P₁請求資源: P₁發出請求向量Request₁(1, 0, 2),系統按銀行家算法進行檢查:
   ①Request₁(1, 0, 2)<=Need₁(1, 2, 2);
   ②Request₁(1, 0, 2)<=Available₁(3, 3, 2);
   ③系統先假定可爲P₁分配資源,並修改Available,Allocation₁和Need₁向量,由此形成的資源變化情況如本文圖1中的圓括號所示;④再利用安全性算法檢查此時系統是否安全,如下圖所示。
在這裏插入圖片描述
  (3) P₄請求資源: P₄發出請求向量Request₄(3,3, 0), 系統按銀行家算法進行檢查:
   ①Request₄(3,3,0)<=Need₄(4,3,1);
   ②Request₄(3,3,0)> Available(2,3,0), 讓P₄等待。
  (4) P₀請求資源: P₀發出請求向量Request₀(0, 2, 0),系統按銀行家算法進行檢查:
   ①Request₀(0,2,0)<=Need₀(7, 4, 3);
   ②Request₀(0,2, 0)<=Available(2,3,0);
   ③系統暫時先假定可爲P₀分配資源,並修改有關數據,如下圖所示。
在這裏插入圖片描述
  (5)進行安全性檢查:可用資源Available(2,1, 0)已不能滿足任何進程的需要,故系統進入不安全狀態,此時系統不分配資源。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章