銀行家算法是一種最有代表性的避免死鎖的算法。在避免死鎖方法中允許進程動態(tài)地申請資源,但系統(tǒng)在進行資源分配之前,應先計算此次分配資源的安全性,若分配不會導致系統(tǒng)進入不安全狀態(tài),則分配,否則等待。為實現(xiàn)銀行家算法,系統(tǒng)必須設置若干數(shù)據(jù)結構。

銀行家算法實驗報告:

一、實驗名稱:銀行家算法

二、實驗目的:銀行家算法是避免死鎖的一種重要方法,通過編寫一個簡單的銀行家算法程序,加深了解有關資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。

三、問題分析與設計:

1、算法思路:先對用戶提出的請求進行合法性檢查,即檢查請求是否大于需要的,是否大于可利用的。若請求合法,則進行預分配,對分配后的狀態(tài)調(diào)用安全性算法進行檢查。若安全,則分配;若不安全,則拒絕申請,恢復到原來的狀態(tài),拒絕申請。

2、銀行家算法步驟:

(1)如果Requesti<or=Need,則轉(zhuǎn)向步驟

(2);否則,認為出錯,因為它所需要的資源數(shù)已超過它所宣布的最大值。

(2)如果Request<or=Available,則轉(zhuǎn)向步驟

(3);否則,表示系統(tǒng)中尚無足夠的資源,進程必須等待。

(3)系統(tǒng)試探把要求的資源分配給進程Pi,并修改下面數(shù)據(jù)結構中的數(shù)值:

Available=Available-Request[i];

Allocation=Allocation+Request;Need=Need-Request;

(4)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。

3、安全性算法步驟:

(1)設置兩個向量

①工作向量Work。它表示系統(tǒng)可提供進程繼續(xù)運行所需要的各類資源數(shù)目,執(zhí)行安全算法開始時,Work=Allocation;

②布爾向量Finish。它表示系統(tǒng)是否有足夠的資源分配給進程,使之運行完成,開始時先做Finish[i]=false,當有足夠資源分配給進程時,令Finish[i]=true。

(2)從進程***中找到一個能滿足下述條件的進程:

①Finish[i]=false

②Need<or=Work如找到,執(zhí)行步驟(3);否則,執(zhí)行步驟(4)。(3)當進程P獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應執(zhí)行:Work=Work+Allocation;Finish[i]=true;轉(zhuǎn)向步驟(2)。(4)如果所有進程的Finish[i]=true,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。

免責聲明:本文來源于互聯(lián)網(wǎng)公開數(shù)據(jù)整理或轉(zhuǎn)載,版權歸原作者所有,如內(nèi)容侵權與違規(guī),請聯(lián)系我們進行刪除,我們將在三個工作日內(nèi)處理。聯(lián)系郵箱:303555158#@QQ.COM(把#換成@)