2023年計(jì)算機(jī)操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告_第1頁
2023年計(jì)算機(jī)操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告_第2頁
2023年計(jì)算機(jī)操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告_第3頁
2023年計(jì)算機(jī)操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告_第4頁
2023年計(jì)算機(jī)操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告

一、實(shí)驗(yàn)名稱:銀行家算法

二、實(shí)驗(yàn)?zāi)康?銀行家算法是避免死鎖的一種重要方法,通過編寫一

個(gè)簡樸的銀行家算法程序,加深了解有關(guān)資源申請、避免死鎖

等概念,并體會和了解死鎖和避免死鎖的具體實(shí)行方法。

三、問題分析與設(shè)計(jì):

1、算法思緒:先對用戶提出的請求進(jìn)行合法性檢查,即檢查請

求是否大于需要的,是否大于可運(yùn)用的。若請求合法,則進(jìn)行

預(yù)分派,對分派后的狀態(tài)調(diào)用安全性算法進(jìn)行檢查。若安全,則

分派;若不安全,則拒絕申請,恢復(fù)到本來的狀態(tài),拒絕申請。

2、銀行家算法環(huán)節(jié):(1)假如Requesti<or=Need,則轉(zhuǎn)向環(huán)

節(jié)(2);否貝1J,認(rèn)為犯錯(cuò),由于它所需要的資源數(shù)已超過它所宣布

的最大值。

(2)假如Request<or=Avai1ab1e,則轉(zhuǎn)向環(huán)節(jié)(3);否貝!1,

表達(dá)系統(tǒng)中尚無足夠的資源,進(jìn)程必須等待。

(3)系統(tǒng)試探把規(guī)定的資源分派給進(jìn)程Pi,并修改下面數(shù)據(jù)結(jié)

構(gòu)中的數(shù)值:

Avai1able=Avai1ab1e-Request[i];

Allocation=A1location+Request;

Need=Need-Request;

(4)系統(tǒng)執(zhí)行安全性算法,檢查本次資源分派后,系統(tǒng)是否處在安

全狀態(tài)。

3、安全性算法環(huán)節(jié):

(1)設(shè)立兩個(gè)向量

①工作向量Worko它表達(dá)系統(tǒng)可提供進(jìn)程繼續(xù)運(yùn)營所需要的各類資

源數(shù)目,執(zhí)行安全算法開始時(shí),Work=Allocation;

②布爾向量Finish。它表達(dá)系統(tǒng)是否有足夠的資源分派給進(jìn)程,使之

運(yùn)營完畢,開始時(shí)先做Finish[i]=false,當(dāng)有足夠資源分派給進(jìn)程

時(shí),令Finish[i]=true0

(2)從進(jìn)程集合中找到一個(gè)能滿足下述條件的進(jìn)程:

①Finish[i]=false

(2)Need<or=Work

如找到,執(zhí)行環(huán)節(jié)(3);否則,執(zhí)行環(huán)節(jié)(4)。

(3)當(dāng)進(jìn)程P獲得資源后,可順利執(zhí)行,直至完畢,并釋放出分派給

它的資源,故應(yīng)執(zhí)行:

Work=Work+Allocation;

Finish[i]=true;

轉(zhuǎn)向環(huán)節(jié)(2)。

(4)假如所有進(jìn)程的Finish[i]=true,則表達(dá)系統(tǒng)處在安全狀態(tài);否

則,系統(tǒng)處在不安全狀態(tài)。

四.程序源代碼:

#inc1ude<stdio.h>

#defineW5〃最大進(jìn)程數(shù)W=5

#defineR3〃最大資源總數(shù)=3

intAvailable[3];//可運(yùn)用資源向量

intMax[5][3];//最大需求矩陣

intAllocation[5][3];//分派矩陣

intNeed[5][3];〃需求矩陣

intRequest[3];//進(jìn)程請求向量

voiddispose()

printf("請輸入可運(yùn)用資源向量Avai1able(格式:a,b,

c)\n");

scanf("%d,%d,%d”,&Availab1e[0],&Available[1],&.A

vai1ab1e[2]);

printf("請輸入最大需求數(shù)Max(格式:a,b,c)\n");

for(intj=0;j<5;j++)

(

printf("進(jìn)程%d:\n”,j);

scanf("%d,%d,%d”,&Max[j][0],&Max[j][1],&Max

[j][2]):

)

printf("請輸入分派數(shù)Allocation(格式:a,b,c)\n〃);

for(j=0;j<5;j++)

printf("進(jìn)程%d\n",j);

scanf("%d,%d,%d”,&A11ocation[j][0],&A11

ocation[j][l],&Allocation[j][2]);

}〃輸入Max[5][3],Available[5][3],Allocation[5][3]

for(j=0;j<5;j++)

for(inti=0;i<3;i++)

Need[j][i]=Max[j][i]-A11ocation[j][i];〃求出Need[5]

[3]

)

main()

(

printf("銀行家算法\n");

dispose();

printf("安全性檢查'n");

intWork[3];〃系統(tǒng)可提供進(jìn)程繼續(xù)運(yùn)營所需的各類資源數(shù)

charFinish[5];〃表達(dá)系統(tǒng)是否有足夠的資源分派

for(inti=0;i<5;i++)

Finish[i]=,f';

for(intk=0;k<3;k++)

Work[k]=Avai1able[k];

intq[5];

for(intx=0;x<50;x++)

{

printf("請輸入一個(gè)序列:\n");

scanf(,z%d,%d,%d,%d,%d”,&q[0],&q[1],&q[2],&q

for(i=0;i<5;i++)

{

if((Need[q[i]][0]<=Work[0])&&(Need[q[i]][1]<=W

ork[1])&&(Need[q[i]][2]<=Work[2]))//比較Need[i][j]

與WorkEj]

?(

。for(k=0;k<3;k++)

sWork[k]=Work[k]+Allocation[q[i]][k];

Finish[i]='t;

if((Finish[0]=='t')&&(Finish[1]=='t')&&(Fini

sh[2]=='t')&&(Finish[3]=='t')&&(Finish[4]=='

t'))//通過Finish[i]判斷系統(tǒng)是否安全

<>break;

e1se

%rintf("此序列不是安全序列,請重新輸入一個(gè)序列!\n〃);

if(x==49)

return0;

}

printf("這個(gè)系統(tǒng)安全!\n");

inta;

printf("請輸入Request進(jìn)程:\n");

scanf("%d",&a);

printf("該進(jìn)程Request(a,b,c)\n");

scanf("%d,%d,%d”,&Request[0],&Request[l],&Reques

t[2]);//輸入請求量Request[3]

if((Request[0]<=Need[a][0])&&(Request[1]<=Need

[a][l])&&(Request[2]<=Need[a][2]))〃判斷Reque

st[i]〈=Need[a][i]

{

if((Request[0]<=Need[a][0])&&(Request[0]<=:N

eed[a][1])&&(Request[0]<=Need[a][2]))〃判斷Re

quest[i]—Available[a][i]

6{

ofor(intk=0;k<3;k++)

!

o<>Available[k]=Availab1e[k]-Request[k];

。Allocation[a][k]=A11ocation[a][k]+Re

quest[k];

?Need[a][k]=Need[a][k]-Request[k];

。//假如上述判斷成功,則修改相應(yīng)的Available[k],A11

ocation[a][k],Need[a][k]

}

“printf(〃資源分派成功!\n〃);

<1se

8{

。叩rintf("資源分派失??!'n");

8return0;

a}

else

]

printf(〃資源分派失敗!\n");

return0;

程序截圖:

銀行家算法

源向量Available〈格式:a'b'c)

3,

S

7,

3,

3

2,

4,

;主

3,

2,

1,2,0

統(tǒng)安全,

Request進(jìn)程:

五.實(shí)驗(yàn)總結(jié)

多個(gè)進(jìn)程同時(shí)運(yùn)營時(shí),系統(tǒng)根據(jù)各類系統(tǒng)資源的最大需求和各

類系統(tǒng)的剩余資源為進(jìn)程安排安全序列,使得系統(tǒng)能快速且安

全地運(yùn)營進(jìn)程,不至發(fā)生死鎖。銀行家算法是避免死鎖的重要

方法,其思緒在很多方面都非常值得我們來學(xué)習(xí)借鑒。

銀行家算法

請輸入可利用資源向量Available(格式:a.b,c〉

3,3,2

球輸入最大需求數(shù)Max(格式:a,b,c>

遴薦0:

7,5,3

進(jìn)程1:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論