銀行家算法是一種最有代表性的避免死鎖的算法。在避免死鎖方法中允許進程動態地申請資源,但系統在進行資源分配之前,應先計算此次分配資源的安全性,若分配不會導致系統進入不安全狀態,則分配,否則等待。為實現銀行家算法,系統必須設置若干數據結構。
銀行家算法實驗報告:
一、實驗名稱:銀行家算法
二、實驗目的:銀行家算法是避免死鎖的一種重要方法,通過編寫一個簡單的銀行家算法程序,加深了解有關資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。
三、問題分析與設計:
1、算法思路:先對用戶提出的請求進行合法性檢查,即檢查請求是否大于需要的,是否大于可利用的。若請求合法,則進行預分配,對分配后的狀態調用安全性算法進行檢查。若安全,則分配;若不安全,則拒絕申請,恢復到原來的狀態,拒絕申請。
2、銀行家算法步驟:
(1)如果Requesti<or=Need,則轉向步驟
(2);否則,認為出錯,因為它所需要的資源數已超過它所宣布的最大值。
(2)如果Request<or=Available,則轉向步驟
(3);否則,表示系統中尚無足夠的資源,進程必須等待。
(3)系統試探把要求的資源分配給進程Pi,并修改下面數據結構中的數值:
Available=Available-Request[i];
Allocation=Allocation+Request;Need=Need-Request;
(4)系統執行安全性算法,檢查此次資源分配后,系統是否處于安全狀態。
3、安全性算法步驟:
(1)設置兩個向量
①工作向量Work。它表示系統可提供進程繼續運行所需要的各類資源數目,執行安全算法開始時,Work=Allocation;
②布爾向量Finish。它表示系統是否有足夠的資源分配給進程,使之運行完成,開始時先做Finish[i]=false,當有足夠資源分配給進程時,令Finish[i]=true。
(2)從進程***中找到一個能滿足下述條件的進程:
①Finish[i]=false
②Need<or=Work如找到,執行步驟(3);否則,執行步驟(4)。(3)當進程P獲得資源后,可順利執行,直至完成,并釋放出分配給它的資源,故應執行:Work=Work+Allocation;Finish[i]=true;轉向步驟(2)。(4)如果所有進程的Finish[i]=true,則表示系統處于安全狀態;否則,系統處于不安全狀態。