1. 程式人生 > >【作業系統】銀行家演算法

【作業系統】銀行家演算法

    首先來介紹一下什麼是銀行家演算法,銀行家演算法是最具代表性的避免死鎖的方法。
    這個演算法因為本來是為銀行設計的而得名,這種演算法的提出能保證銀行在傳送貸款的時候,不會發生不滿足所有使用者需要的情況。
    聯絡到作業系統上就是:每一個新程序進入系統時,必須宣告需要每種資源的最大數目,其數目不能超過系統所擁有的的資源總量。當程序請求一組資源時,系統必須首先確定是否有足夠的資源分配給該程序,若有,再進一步計算在將這些資源分配給程序後,是否會使系統處於不安全狀態如果不會才將資源分配給它,否則讓程序等待。
    銀行家演算法中的資料結構,
(1)Available向量:系統中可利用的資源數目
(2)Max矩陣:每個程序對每種資源的最大需求
(3)Allocation矩陣:每個程序已分配的各類資源的數目
(4)Need矩陣:每個程序尚需的各類資源數
書本上面的演算法介紹太過書面化,這裡就不再介紹,直接用一個例子來說明吧
假定系統中有五個程序{p0,p1,p2,p3,p4}和三類資源{A,B,C}各類資源的數目分別是10,5,7,已知T0時刻資源分配情況如下:
這裡寫圖片描述


如上圖所示是我們的已知條件也就是我們開始時候的資源分配狀態,接下來我們要求這個狀態下的安全序列,也就是將可利用的資源分配給某個需要資源小於可利用資源的程序,讓這個程序執行完成,程序執行完成之後已分配的資源就會被釋放,然後繼續執行上述操作,只要能找到滿足Need小於Available,就分配資源,讓該程序執行完成,最後將資源釋放,也就是將已分配的資源加到可利用的資源,如果最後每一個程序都能執行完成就得到了我們的安全序列,所以系統就是安全的,如果存在一個程序,可利用資源不能滿足需求就不再分配

我們來簡單介紹一下過程,
(1)將Available和Need對比,P0的Need>Available,不滿足,往後找,
(2)P1的Available小於Need,分配給P1,P1就能執行完成,最後釋放資源{2,0,0}
所以現在的資源就是{3,3,2}+{2,0,0}={5,3,2}
(3)然後繼續向下找,p2不滿足條件,P3滿足條件,將資源分配給P3,讓其執行完成,並釋放空間{2,1,1},所以現在的資源就是{5,3,2}+{2,1,1}={7,4,3}
(4)依次類推得到安全序列為{P1,P3,P4,P2,P0}
過程如下圖,其中finish表示程序執行完成
這裡寫圖片描述

所以我們知道該系統是安全的

下來再來一個問題假設P1請求資源Request{1,0,2},要怎樣處理呢
首先要檢測看請求資源是不是比可利用資源和需要資源小,如果其中一個或兩個條件都不滿足,程序等待,如果滿足進行下面操作,
這裡{1,0,2}是滿足這兩個條件的
我們進行的操作就是將請求資源加到Allocation上面,也就是已分配的資源得到擴充,同樣的請求的資源一定是來自可利用資源的,所以可利用資源要減上一個請求資源數目,因為Need和Allocation的和是一個固定值max所以相應的Allocation加上一個數值,Need就要減上一個數值,變化之後如下圖所示:
這裡寫圖片描述
然後再像前面一樣,把這個表當成T0時刻的資源分配狀態,再來找安全序列,判斷系統是不是安全的。