作業系統之銀行家演算法解析
作業系統之銀行家演算法解析(帶例題)
利用銀行家演算法避免死鎖,首先我們先來明晰一下銀行家演算法的資料結構,其中必須設定四個資料結構,Available,Max,Allocation,Need.
Available,又名可利用資源向量,顧名思義即資源中可利用的數目。
Max,最大需求矩陣,Allocation 分配矩陣,Need需求矩陣。
後三者關係即為:Need=Max-Allocation。
首先我們來看一道例題
第一題該狀態是否安全?
要求是列出安全性演算法檢查表
首先本題的最終目的是得到一個表,來看一下
簡單講一下安全性演算法的簡單理解,就是Available中有沒有現在可以滿足p0-p4其中一個的需求,也就是可用是否大於某一些需求?可以看出Available滿足P0 Need,接下來分配給P0,1C和2D(資源預設ABCD),此時P0可以執行,然後並且會返回給Available3C和2D,此時的Available的資源就變成了1554。
用相同的方法可以找出序列P0、P3、P1、P2、P4可以依此執行,並不會出現available<need的情況,故安全序列{P0、P3、P1、P2、P4},故系統是安全的。
附上最後的安全性演算法檢查表
下面來看第二題
系統發出了request請求,request請求只出現在了銀行家演算法裡,所以用銀行家演算法裡的四步來分別求解
第一步如果request<=Need才可進行第二步,否則出錯
第二步如果request<=Available才可進行第三步,否則出錯
第三步分配資源給request
available=available-request;
allocation=allocation+request;
need=need-request;
看題目故
①Request2(1,2,2,2)<=Need2(2,3,5,6)
②Request2(1,2,2,2)<=Available(1,5,2,2)
③系統先假定可為P2分配資源,並修改Available,Allocation2和Need2向量:
Available=(0,3,0,0) Allocation2=(2,5,7,6) Need2=(1,1,3,4)
④進行安全性檢查,即第一題的檢查,此時對所有的程序,條件Need<=Available(0,3,0,0)都不成立,即Available不能滿足任何程序的請求,故系統進入不安全狀態。此時當程序P2提出請求Request(1,2,2,2)後,系統不能將資源分配給它。
接下來第三題:
系統立即滿足程序P2的請求(1,2,2,2)後,並沒有馬上進入死鎖狀態。因為,此時上述程序並沒有申請新的資源,並進入阻塞狀態。只有當上述程序提出新的請求,並導致所有沒有執行完的多個程序因得不到資源而阻塞時,系統才進入死鎖狀態。