久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

操作系統(tǒng)課程設(shè)計(jì)----模擬銀行家算法避免死鎖(優(yōu)秀范文五篇)

時(shí)間:2019-05-14 03:46:38下載本文作者:會(huì)員上傳
簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《操作系統(tǒng)課程設(shè)計(jì)----模擬銀行家算法避免死鎖》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《操作系統(tǒng)課程設(shè)計(jì)----模擬銀行家算法避免死鎖》。

第一篇:操作系統(tǒng)課程設(shè)計(jì)----模擬銀行家算法避免死鎖

模擬通過(guò)銀行家算法避免死鎖

一、銀行家算法產(chǎn)生的背景及目的 1:在多道程序系統(tǒng)中,雖然借助于多個(gè)進(jìn)程的并發(fā)執(zhí)行來(lái)改善系統(tǒng)的利用率,提高系統(tǒng)的吞吐量,但可能發(fā)生一種危險(xiǎn)—死鎖。死鎖就是多個(gè)進(jìn)程在運(yùn)行過(guò)程中因爭(zhēng)奪資源而造成的一種僵局,當(dāng)進(jìn)程處于這種僵局狀態(tài)時(shí),如無(wú)外力作用,他們將無(wú)法再向前進(jìn)行,如再把信號(hào)量作為同步工具時(shí),多個(gè)Wait和Signal操作順序不當(dāng),會(huì)產(chǎn)生進(jìn)程死鎖。

然而產(chǎn)生死鎖的必要條件有互斥條件,請(qǐng)求和保持條件,不剝奪條件和環(huán)路等待條件。在預(yù)防死鎖的幾種方法中,都施加了較強(qiáng)的限制條件,在避免死鎖的方法中,所施加的條件較弱,有可能獲得令人滿意的系統(tǒng)性能。在該方法中把系統(tǒng)的狀態(tài)分為安全狀態(tài)和不安全狀態(tài),只要能使系統(tǒng)都處于安全狀態(tài),便可避免死鎖。2:實(shí)驗(yàn)?zāi)康模鹤寣W(xué)生獨(dú)立的使用編程語(yǔ)言編寫和調(diào)試一個(gè)系統(tǒng)分配資源的簡(jiǎn)單模擬程序,了解死鎖產(chǎn)生的原因及條件。采用銀行家算法及時(shí)避免死鎖的產(chǎn)生,進(jìn)一步理解課堂上老師講的相關(guān)知識(shí)點(diǎn)。銀行家算法是從當(dāng)前狀態(tài)出發(fā),逐個(gè)按安全序列檢查各客戶中誰(shuí)能完成其工作,然后假定其完成工作且歸還全部貸款,再進(jìn)而檢查下一個(gè)能完成工作的客戶。如果所有客戶都能完成工作,則找到一個(gè)安全序列,銀行家才是安全的。

二:銀行家算法中的數(shù)據(jù)結(jié)構(gòu)

1:可利用資源向量Available。這是一個(gè)含有m個(gè)元素的數(shù)組,其中的每個(gè)元素代表一類可利用的資源數(shù)目,其初始值是系統(tǒng)中所配置的該類全部可用資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動(dòng)態(tài)的改變。如果Available[j]=k,z 則表示系統(tǒng)中現(xiàn)有Rj類資源K 個(gè)。

2:最大需求矩陣Max。這是一個(gè)n*m的矩陣,它定義了系統(tǒng)中n個(gè)進(jìn)程中的每一個(gè)進(jìn)程對(duì)m類資源的最大需求。如果Max[i,j]=k,表示第i個(gè)進(jìn)程需要第Rj類資源的最大數(shù)目k個(gè).3: 分配矩陣Allocation,也是n*m的矩陣,若Allocation[i,j]=k,表示第i 個(gè)進(jìn)程已分配Rj類資源的數(shù)目為k個(gè)。

4:需求矩陣Need。也是一個(gè)n*m的矩陣,Need[i,j]=k,表示第i個(gè)進(jìn)程還需Rj類資源k個(gè)。

三、銀行家算法及安全性算法

1:銀行家算法

設(shè)Request[i]是進(jìn)程Pi的請(qǐng)求向量,若Request[i][j]=k;表示進(jìn)程需要j類資源k個(gè)。當(dāng)Pi發(fā)出資源請(qǐng)求時(shí),系統(tǒng)按下屬步驟進(jìn)行檢查;(1)如果Request[i][j]<=Need[i][j];便轉(zhuǎn)向步驟(2),否則認(rèn)為出錯(cuò),因?yàn)樗枰馁Y源數(shù)已超過(guò)他所宣布的最大值。

(2)如果Request[i][j]<=Available[i][j],便轉(zhuǎn)向步驟(3),否則認(rèn)為尚無(wú)足夠資源,進(jìn)程需等待。(3)系統(tǒng)試探著把資源分配給進(jìn)程,并修改下面數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù) Available[i][j]=Available[i][j]-Request[i][j];Allocation[i][j]=Allocation[i][j]+Request[i][j];Need[i][j]=Need[i][j]-Request[i][j];(4)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進(jìn)程Pi,已完成此次分配。否則,將本次的試探分配作廢,回復(fù)原來(lái)的資源分配狀態(tài),將進(jìn)程Pi等待。2:安全性算法

(1)設(shè)置兩個(gè)向量;

1:工作向量Work,表示系統(tǒng)可提供給進(jìn)程運(yùn)行所需的各類資源數(shù)目,它含有m個(gè)元素,初始時(shí)Work=Available 2:Finish ,表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成。開(kāi)始時(shí)先做Finish[i]=true(2)從進(jìn)程中找到一個(gè)能滿需下屬條件的進(jìn)程

1;Finish[i]=false;

2:Need[i][j]<=Work[j];若找到執(zhí)行步驟(3),否則執(zhí)行步驟(4)

(3)當(dāng)進(jìn)程Pi順利獲得資源后,直至完成,并釋放分配給它的資源,執(zhí)行: Work[j]=Work[j]+Allocation[i][j];Finish[i]=true;Go to step(2);(5)如果所有的進(jìn)程Finish[i]都滿足,則表示系統(tǒng)處于安全狀態(tài),否則,處于不安全狀態(tài)。

四、模塊設(shè)計(jì)與分析及整體功能概述

模塊設(shè)計(jì)與分析:

整個(gè)銀行家算法分為初始化函數(shù)Init(),安全性算法函數(shù) safe(),銀行家算法函數(shù)bank()三部分。初始化函數(shù)生成開(kāi)始時(shí)刻系統(tǒng)中的進(jìn)程和資源情況,安全性算法判斷當(dāng)某進(jìn)程申請(qǐng)資源時(shí),系統(tǒng)能否處于安全狀態(tài)。在本實(shí)驗(yàn)中,若系統(tǒng)處于安全狀態(tài),便生成一個(gè)安全進(jìn)程序列(安全序列可能有多個(gè))。銀行家算法函數(shù)bank()負(fù)責(zé)整體的檢查與異常判斷。整體功能概述:

死鎖會(huì)引起系統(tǒng)陷入僵局,操作系統(tǒng)必須防止此現(xiàn)象的發(fā)生。本實(shí)驗(yàn)通過(guò)一個(gè)動(dòng)態(tài)分配資源的模擬程序,更清楚的理解死鎖產(chǎn)生的原因和條件。Dijkstra的銀行家算法是最有代表性的避免死鎖的方法。運(yùn)行程序時(shí)用戶設(shè)定系統(tǒng)中進(jìn)程和可利用資源的種類數(shù)目。輸入各進(jìn)程的可利用資源Available,最大需求MAX,已分配資源Allocation,需求資源Need,之后各系統(tǒng)發(fā)出資源請(qǐng)求Request,利用實(shí)驗(yàn)中的安全性算法判斷能否產(chǎn)生一個(gè)安全性隊(duì)列,若能,則給該進(jìn)程分配成功,否則,不予分配。

五、流程圖設(shè)計(jì)

六、源代碼及調(diào)試分析

#include #define MAXm 50

// 定義最大進(jìn)程數(shù) #define MAXn 100

//定義最大資源數(shù)

int MAX[MAXm][MAXn];

//最大需求矩陣 int Allocation[MAXm][MAXn];

//已分配矩陣 int Available[MAXn];

//可用資源數(shù)組 int Need[MAXm][MAXn];

//需求矩陣 int Request[MAXm][MAXn];

//請(qǐng)求矩陣

int Finish[MAXm];

//存儲(chǔ)完成資源分配的進(jìn)程 int Sequence[MAXm];

//模擬的資源分配序列

int Work[MAXn];

//系統(tǒng)是否有足夠的資源分配給進(jìn)程 int m,n;

//m個(gè)進(jìn)程,n個(gè)資源

#define False 0 #define True 1 void input();//數(shù)據(jù)輸入函數(shù) int safealg();//安全性算法函數(shù) void banker();//銀行家算法函數(shù) void main(){input();safealg();banker();}

//*************初始化算法*************** void input(){ int i,j;

//************自定義進(jìn)程數(shù)目與資源種類******************* cout<<“***********************************n”;cout<<“*利用銀行家算法避免死鎖*n”;

cout<<“*

*n”;cout<<“************************************n”;cout<<“請(qǐng)輸入進(jìn)程的數(shù)目:”;cin>>m;cout<<“請(qǐng)輸入資源的種類:”;cin>>n;//*****輸入每個(gè)進(jìn)程對(duì)每種資源的最大需求、已經(jīng)獲得的數(shù)量、每種類型資源的數(shù)目

cout<<“各進(jìn)程資源最大需求(Max),按照”<

cout<<“P”<

for(j=0;j

{

cin>>MAX[i][j];

if(j==n)

cout<<“資源種類數(shù)匹配出現(xiàn)錯(cuò)誤!”;//當(dāng)資源配置的種類數(shù)大于預(yù)先輸入的數(shù)值時(shí),出錯(cuò)

} } cout<<“各進(jìn)程當(dāng)前獲得資源(Allocation),按照”<

cout<<“P”<

for(j=0;j

{

cin>>Allocation[i][j];

if(j==n)

cout<<“資源種類數(shù)匹配出現(xiàn)錯(cuò)誤!”;//當(dāng)資源配置的種類數(shù)大于預(yù)先輸入的數(shù)值時(shí),出錯(cuò)

Need[i][j]=MAX[i][j]-Allocation[i][j];//需求數(shù)等于最大需求減去已經(jīng)分配數(shù)

} } cout<<“系統(tǒng)可用資源(Available):”<

cin>>Available[j];//輸入各種資源的可利用數(shù)

} cout<<“當(dāng)前時(shí)刻的進(jìn)程分配情況如圖:n”;cout<<“進(jìn)程號(hào)-”<<“MAX----”<<“Allocation---”<<“Need--”<<“Available---n”;//顯示各進(jìn)程的資源情況

for(i=0;i

cout<<“P”<

for(j=0;j

cout<<“ ”<

for(j=0;j

cout<<“ ”<

cout<<“ ”;

for(j=0;j

cout<<“ ”<

for(j=0;j

cout<<“ ”<

cout<

} } //*****************銀行家算法,為進(jìn)程分配資源***********// void banker(){ int i,j;

int choice;

while(1)

{

cout<

cout<<“輸入要進(jìn)行的操作(1:分配資源

2:離開(kāi)):”;

//用戶選擇

cin>>choice;

if(choice==1)

//分配資源

{

cout<<“從P0到P”<

cin>>i;

if(i>=m)

{

cout<<“無(wú)此進(jìn)程號(hào)!請(qǐng)重新輸入:n”;

cin>>i;//重新輸入進(jìn)程號(hào)

}

cout<<“請(qǐng)輸入進(jìn)程申請(qǐng)的資源(Request):”<

for(j=0;j

cin>>Request[i][j];

//**********銀行家算法進(jìn)行檢查*************//

for(j=0;j

{

if(Request[i][j]>Need[i][j])

{

cout<<“申請(qǐng)的資源大于它需要的資源數(shù),請(qǐng)重新輸入!n”;//資源申請(qǐng)不合理

continue;

}

if(Request[i][j]>Available[j])

{

//資源申請(qǐng)數(shù)目大于可利用數(shù),無(wú)法分配,得等待

cout<<“當(dāng)前系統(tǒng)可用資源不夠,請(qǐng)等待!”<

continue;

}

}

for(j=0;j

{

Available[j]=Available[j]-Request[i][j];

//可用資源減少

Allocation[i][j]=Allocation[i][j]+Request[i][j];//所得資源增加

Need[i][j]=Need[i][j]-Request[i][j];

//仍需資源減少

}

if(safealg()<0)//安全性算法的返回值

{

cout<<“分配不成功,請(qǐng)等待!”;

for(j=0;j

//把資源恢復(fù)成分配之前的狀態(tài)

{

Available[j]=Available[j]+Request[i][j];

Allocation[i][j]=Allocation[i][j]-Request[i][j];

Need[i][j]=Need[i][j]+Request[i][j];

}

for(i=0;i

{

Finish[i]=False;//沒(méi)有足夠的資源分配給該進(jìn)程

}

}//if(safealg()<0)

else

{

cout<<“同意分配請(qǐng)求!”<

for(j=0;j

Work[j]=Available[j];

cout<<“進(jìn)程號(hào)-”<<“--Work----”<<“Need---”<<“Allocation---”<<“Work+Allocation--”

<<“Finish--”<

for(i=0;i

{

cout<<“進(jìn)程P”<

for(j=0;j

cout<

cout<<“ ”;

for(j=0;j

cout<

cout<<“ ”;

for(j=0;j

cout<

cout<<“

”;

for(j=0;j

cout<

cout<<“

”;

cout<

for(j=0;j

Work[j]=Allocation[Sequence[i]][j]+Work[j];//回收該進(jìn)程所分配的資源

cout<

}

}//if(safealg()>=0)

}//if(choice=1)

else if(choice==2)

//離開(kāi)————

break;

else cout<<“請(qǐng)輸入1或2!”;//只認(rèn)可1或2 }//while(1)} //*********安全性算法 ************// int safealg(){

int i,j,k,l=0;

//int Work[MAXn];

//工作組

//記錄序列

for(i=0;i

Work[i]=Available[i];

//工作分配初始化為系統(tǒng)可用資源

for(i=0;i

//掃描所有進(jìn)程,預(yù)設(shè)所有進(jìn)程不能運(yùn)行

{

Finish[i]=False;

}

for(i=0;i

{ //

if(Finish[i]==True)

{

continue;

}

else //對(duì)于未運(yùn)行的進(jìn)程,進(jìn)行如下處理

{///

for(j=0;j

{

if(Need[i][j]>Work[j])//由于部分資源得不到滿足,進(jìn)程i無(wú)法運(yùn)行

{ 的資源

用資源

}

break;

} }

if(j==n)//進(jìn)程各類資源全部得到滿足

{

Finish[i]=True;

for(k=0;k

{ Work[k]+=Allocation[i][k];//工作分配加上可

}

Sequence[l++]=i;

//模擬資源分配序列生成 i=-1;

//重新掃描所有進(jìn)程從i=0開(kāi)始

}

else

{ //某一資源得不到滿足

continue;//試探下一個(gè)進(jìn)程

} }// if(l==m)//都試探完畢

{

cout<<“系統(tǒng)安全!”<

cout<<“安全序列:”;

for(i=0;i

//輸出安全序列

cout<<“進(jìn)程P”< ”;

cout<

return 0;} }// cout<<“系統(tǒng)進(jìn)入不安全狀態(tài)!”<

分析:輸入各進(jìn)程的可利用資源Available,最大需求MAX,已分配資源Allocation,需求資源Need,之后各系統(tǒng)發(fā)出資源請(qǐng)求Request,利用實(shí)驗(yàn)中的安全性算法判斷能否產(chǎn)生一個(gè)安全性隊(duì)列,若能,則給該進(jìn)程分配成功,否則,不予分配。在確定安全序列的過(guò)程中,要檢測(cè)所有進(jìn)程的Finish[i]的值,每次循環(huán)檢測(cè)完后要重復(fù)從第一個(gè)進(jìn)程開(kāi)始。

七、運(yùn)行結(jié)果 假設(shè)輸入進(jìn)程個(gè)數(shù)為5,資源種類數(shù)為3,并以此輸入各進(jìn)程初始時(shí)刻的各種資源數(shù)量,如下

若再繼續(xù)申請(qǐng)資源,假設(shè)為P4,申請(qǐng)資源(1 2 2)

假設(shè)P1 申請(qǐng)資源(2 2 4)有

八、心得體會(huì)

經(jīng)過(guò)這次操作系統(tǒng)課程設(shè)計(jì),讓我受益匪淺,收獲頗多。主要體會(huì)如下: 1.利用Vc++編譯程序編寫銀行家算法,進(jìn)一步理解到通過(guò)銀行家算法避免死鎖的思想,同時(shí)也理解了系統(tǒng)死鎖產(chǎn)生的原因及條件。

2.在實(shí)驗(yàn)過(guò)程中所有的設(shè)計(jì)步驟遵循老師教授的程序功能化的思想,分別定義了三個(gè)函數(shù),init()初始化函數(shù),safealg()安全性算法函數(shù),bank()銀行家算法函數(shù),體現(xiàn)了函數(shù)的模塊化思想。這樣的話,不僅提高了程序的可讀性和可操作性,而且還提高了CPU的利用率和內(nèi)存的利用率,因?yàn)槌绦虻倪\(yùn)行是局部性的,這種思想對(duì)于段頁(yè)式存儲(chǔ)管理系統(tǒng)尤為重要。

3.實(shí)驗(yàn)過(guò)程中遇到的種種疑難問(wèn)題通過(guò)自己上網(wǎng)查找答案,鍛煉了自己糾錯(cuò)能力和搜索有價(jià)值信息的能力及自學(xué)的能力,并且進(jìn)一步鞏固了自己以前學(xué)過(guò)的專業(yè)知識(shí)。

第二篇:操作系統(tǒng)銀行家算法(避免死鎖)實(shí)驗(yàn)報(bào)告

操作系統(tǒng)實(shí)驗(yàn):銀行家算法

姓名:李天瑋

班級(jí):軟工1101 實(shí)驗(yàn)內(nèi)容:

在windows系統(tǒng)中實(shí)現(xiàn)銀行家算法程序。

學(xué)號(hào):201126630117 實(shí)現(xiàn)銀行家算法所用的數(shù)據(jù)結(jié)構(gòu):

假設(shè)有5個(gè)進(jìn)程3類資源,則有如下數(shù)據(jù)結(jié)構(gòu): 1.MAX[5,3] 5個(gè)進(jìn)程對(duì)3類資源的最大需求量。2.AVAILABLE[3]系統(tǒng)可用資源數(shù)。

3.ALLOCATION[5,3]5個(gè)進(jìn)程已經(jīng)得到3類資源的資源量。4.NEED[5,3]5個(gè)進(jìn)程還需要3類資源的資源量。

銀行家算法:

設(shè)進(jìn)程1提出請(qǐng)求Request[N],則銀行家算法按如下規(guī)則進(jìn)行判斷。(1)如果Request[N]<=NEED[1,N],則轉(zhuǎn)(2);否則,出錯(cuò)。(2)如果Request[N]<=AVALIABLE,則轉(zhuǎn)(3);否則,出錯(cuò)。(3)系統(tǒng)試探非配資源,修改相關(guān)數(shù)據(jù)。

AVALIABLE=AVALIABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST(4)系統(tǒng)執(zhí)行安全性檢查,如安全,則分配成立;否則試探險(xiǎn)性分配作廢,系統(tǒng)恢復(fù)原狀,進(jìn)程等待。

安全性檢查:

(1)設(shè)置兩個(gè)工作向量WORK=AVAILABLE;FINISH[M]=FALSE.(2)從晉城集合中找到一個(gè)滿足下述條件的進(jìn)程,F(xiàn)INISH[i]=FALSE NEED<=WORK 如找到,執(zhí)行(3);否則,執(zhí)行(4)。

(3)設(shè)進(jìn)程獲得資源,可順利執(zhí)行,直至完成,從而釋放資源。

WORK=WORK+ALLOCATION FINISH[i]=TRUE GOTO(2)

(4)如所有進(jìn)程FINISH[M]=TRUE,則表示安全;否則系統(tǒng)不安全。

1.用init()函數(shù)對(duì)于數(shù)據(jù)的初始化

關(guān)鍵代碼:

#define M 5 #define N 3

void init(){

cout<<“請(qǐng)輸入5個(gè)進(jìn)程對(duì)3類資源最大資源需求量:”<

} cout<<“請(qǐng)輸入系統(tǒng)可用的資哩源數(shù):”<

{ } cin>>AVAILABLE[j];for(int j=0;j>MAX[i][j];} //cout<

cout<<“請(qǐng)輸入5個(gè)進(jìn)程已經(jīng)-的到的3類資源的資源量:”<

for(int i=0;i

} cout<<“請(qǐng)?輸?入?5個(gè)?進(jìn)?程ì還1需è要癮3類え?資哩?源′的?資哩?源′量?:”<

} for(int j=0;j>NEED[i][j];} //cout<>ALLOCATION[i][j];} //cout<

}// Stack around the variable 'AVAILABLE' was corrupted.顯示數(shù)據(jù)詳細(xì)信息

進(jìn)行測(cè)試 輸入一號(hào)進(jìn)程號(hào),并給需要申請(qǐng)資源設(shè)定為{1,0,2}

檢驗(yàn)錯(cuò)誤輸入時(shí)候的報(bào)錯(cuò)信息

檢驗(yàn)當(dāng)再次申請(qǐng)0號(hào)資源并申請(qǐng)資源數(shù)目為{0,2,0}時(shí),系統(tǒng)提示系統(tǒng)不安全申請(qǐng)不成功。

每當(dāng)驗(yàn)證申請(qǐng)成功后會(huì)進(jìn)行的修改操作:

if(flag=='Y'||flag=='y')//進(jìn)?行D數(shù)簓據(jù)Y修T改?

{ changdata(i);

}

} if(chkerr(0)){

} else showdata();rstordata(i);showdata();else showdata();cout<>flag;退?出?演Y示?”;

第三篇:操作系統(tǒng)實(shí)驗(yàn)報(bào)告-利用銀行家算法避免死鎖

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

題 目 利用銀行家算法避免死鎖

一、實(shí)驗(yàn)?zāi)康模?/p>

1、加深了解有關(guān)資源申請(qǐng)、避免死鎖等概念,并體會(huì)和了解死鎖和避免死鎖的具體實(shí)施方法。

2、要求編寫和調(diào)試一個(gè)系統(tǒng)動(dòng)態(tài)分配資源的簡(jiǎn)單模擬程序,觀察死鎖產(chǎn)生的條件,并采用銀行家算法,有效的防止和避免死鎖的發(fā)生。

二、實(shí)驗(yàn)內(nèi)容:

用銀行家算法實(shí)現(xiàn)資源分配:

設(shè)計(jì)五個(gè)進(jìn)程{p0,p1,p2,p3,p4}共享三類資源{A,B,C}的系統(tǒng),例如,{A,B,C}的資源數(shù)量分別為10,5,7。進(jìn)程可動(dòng)態(tài)地申請(qǐng)資源和釋放資源,系統(tǒng)按進(jìn)程的申請(qǐng)動(dòng)態(tài)地分配資源,要求程序具有顯示和打印各進(jìn)程的某一個(gè)時(shí)刻的資源分配表和安全序列;顯示和打印各進(jìn)程依次要求申請(qǐng)的資源號(hào)以及為某進(jìn)程分配資源后的有關(guān)資源數(shù)據(jù)。

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

1、算法思路:

先對(duì)用戶提出的請(qǐng)求進(jìn)行合法性檢查,即檢查請(qǐng)求是否大于需要的,是否大于可利用的。若請(qǐng)求合法,則進(jìn)行預(yù)分配,對(duì)分配后的狀態(tài)調(diào)用安全性算法進(jìn)行檢查。若安全,則分配;若不安全,則拒絕申請(qǐng),恢復(fù)到原來(lái)的狀態(tài),拒絕申請(qǐng)。

2、銀行家算法步驟:

(1)如果Requesti<o(jì)r =Need,則轉(zhuǎn)向步驟(2);否則,認(rèn)為出錯(cuò),因?yàn)樗枰馁Y源數(shù)已超過(guò)它所宣布的最大值。

(2)如果Request<o(jì)r=Available,則轉(zhuǎn)向步驟(3);否則,表示系統(tǒng)中尚無(wú)足夠的資源,進(jìn)程必須等待。

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

Available=Available-Request[i];

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

3、安全性算法步驟:(1)設(shè)置兩個(gè)向量

①工作向量Work。它表示系統(tǒng)可提供進(jìn)程繼續(xù)運(yùn)行所需要的各類資源數(shù)目,執(zhí)行安全算法開(kāi)始時(shí),Work=Allocation;②布爾向量Finish。它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成,開(kāi)始時(shí)先做Finish[i]=false,當(dāng)有足夠資源分配給進(jìn)程時(shí),令Finish[i]=true。

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

①Finish[i]=false ②Need

(3)當(dāng)進(jìn)程P獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行: Work=Work+Allocation;Finish[i]=true;轉(zhuǎn)向步驟(2)。

(4)如果所有進(jìn)程的Finish[i]=true,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。

4、流程圖: 系統(tǒng)主要過(guò)程流程圖

銀行家算法流程圖

安全性算法流程圖

5、主要數(shù)據(jù)結(jié)構(gòu)

假設(shè)有M個(gè)進(jìn)程N(yùn)類資源,則有如下數(shù)據(jù)結(jié)構(gòu):

int max[M*N] M個(gè)進(jìn)程對(duì)N類資源的最大需求量 int available[N] 系統(tǒng)可用資源數(shù)

int allocated[M*N] M個(gè)進(jìn)程已經(jīng)得到N類資源的資源量 int need[M*N] M個(gè)進(jìn)程還需要N類資源的資源量

int worked[] 系統(tǒng)提供給進(jìn)程繼續(xù)運(yùn)行所需的各類資源數(shù)目

四、源代碼

import java.awt.*;import javax.swing.*;import java.util.*;import java.awt.event.*;import javax.swing.border.*;

public class OsBanker extends JFrame { // 界面設(shè)計(jì)

JLabel labelInfo;JLabel labelInfo1;int resourceNum, processNum;int count = 0;JButton buttonRequest, buttonSetInit, button, button1, buttonsearch,button2;JTextField tf1, tf2;JTextField[] textAvailable;JTextField[][] textAllocation;JTextField[][] textNeed;JTextField textProcessName;JTextField[] textRequest;int available[];int max[][];int need[][];int allocated[][];int SafeSequence[];int request[];boolean Finish[];int worked[];boolean flag = false;JFrame f1;JFrame f2;JFrame f3;JTextArea jt;

void display(){

Border border = BorderFactory.createLoweredBevelBorder();

Border borderTitled = BorderFactory.createTitledBorder(border, “按鈕區(qū)”);

textAvailable = new JTextField[5];

textAllocation = new JTextField[6][5];

textNeed = new JTextField[6][5];

textProcessName = new JTextField(“");

textProcessName.setEnabled(false);

textRequest = new JTextField[5];

tf1 = new JTextField(20);

tf2 = new JTextField(20);labelInfo = new JLabel(”請(qǐng)先輸入資源個(gè)數(shù)和進(jìn)程個(gè)數(shù)(1~6),后單擊確定“);JPanel contentPane;contentPane =(JPanel)this.getContentPane();contentPane.setLayout(null);contentPane.setBackground(Color.pink);labelInfo.setBounds(50, 10, 300, 40);labelInfo.setOpaque(true);labelInfo.setForeground(Color.red);labelInfo.setBackground(Color.pink);contentPane.add(labelInfo, null);JLabel b1 = new JLabel(”資源個(gè)數(shù):“);b1.setForeground(Color.blue);JLabel b2 = new JLabel(”進(jìn)程個(gè)數(shù):“);b2.setForeground(Color.blue);b1.setBounds(50, 80, 80, 30);contentPane.add(b1, null);tf1.setBounds(180, 80, 170, 30);contentPane.add(tf1, null);b2.setBounds(50, 150, 80, 30);contentPane.add(b2, null);tf2.setBounds(180, 150, 170, 30);contentPane.add(tf2, null);button1 = new JButton(”確定“);button = new JButton(”重置“);button1.setBounds(80, 200, 80, 30);contentPane.add(button1, null);button.setBounds(220, 200, 80, 30);contentPane.add(button, null);this.setSize(400, 300);this.setResizable(false);this.setTitle(”銀行家算法(SXJ)“);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);f1 = new JFrame();labelInfo1 = new JLabel(”請(qǐng)先輸入最大需求和分配矩陣,然后單擊初始化“);JPanel contentPane1;contentPane1 =(JPanel)f1.getContentPane();contentPane1.setLayout(null);contentPane1.setBackground(Color.pink);labelInfo1.setOpaque(true);labelInfo1.setBounds(75, 10, 400, 40);

labelInfo1.setBackground(Color.pink);

labelInfo1.setForeground(Color.blue);

contentPane1.add(labelInfo1, null);

JLabel labelAvailableLabel = new JLabel(”AllResource:“);

JLabel labelNeedLabel = new JLabel(”MaxNeed:“);

JLabel labelAllocationLabel = new JLabel(”allocated:“);

JLabel labelRequestLabel = new JLabel(”request process:“);

labelNeedLabel.setBounds(75, 90, 100, 20);

// x,y,width,height

contentPane1.add(labelNeedLabel, null);

labelAllocationLabel.setBounds(75, 240, 100, 20);

contentPane1.add(labelAllocationLabel, null);

labelAvailableLabel.setBounds(75, 70, 100, 20);

contentPane1.add(labelAvailableLabel, null);

labelRequestLabel.setBounds(75, 400, 100, 20);

contentPane1.add(labelRequestLabel, null);

JLabel[] labelProcessLabel1 = { new JLabel(”進(jìn)程1“), new JLabel(”進(jìn)程2“),new JLabel(”進(jìn)程3“), new JLabel(”進(jìn)程4“), new JLabel(”進(jìn)程5“),new JLabel(”進(jìn)程6“)};

JLabel[] labelProcessLabel2 = { new JLabel(”進(jìn)程1“), new JLabel(”進(jìn)程2“),new JLabel(”進(jìn)程3“), new JLabel(”進(jìn)程4“), new JLabel(”進(jìn)程5“),new JLabel(”進(jìn)程6“)};

JPanel pPanel1 = new JPanel(), pPanel2 = new JPanel(), pPanel3 = new JPanel(), pPanel4 = new JPanel();

pPanel1.setLayout(null);

pPanel2.setLayout(null);

/*

* pPanel4.setLayout(null);pPanel4.setBounds(440,120,90,270);

* pPanel4.setBorder(borderTitled);

*/

buttonSetInit = new JButton(”初始化“);

buttonsearch = new JButton(”檢測(cè)安全性“);

button2 = new JButton(”重置“);

buttonRequest = new JButton(”請(qǐng)求資源“);

buttonSetInit.setBounds(420, 140, 100, 30);

contentPane1.add(buttonSetInit, null);

buttonsearch.setBounds(420, 240, 100, 30);

contentPane1.add(buttonsearch, null);

button2.setBounds(420, 340, 100, 30);

contentPane1.add(button2, null);

buttonRequest.setBounds(420, 425, 100, 30);

contentPane1.add(buttonRequest, null);

for(int pi = 0;pi < 6;pi++){

labelProcessLabel1[pi].setBounds(0, 0 + pi * 20, 60, 20);labelProcessLabel2[pi].setBounds(0, 0 + pi * 20, 60, 20);} pPanel1.setBounds(75, 120, 60, 120);pPanel2.setBounds(75, 270, 60, 120);for(int pi = 0;pi < 6;pi++){ pPanel1.add(labelProcessLabel1[pi], null);pPanel2.add(labelProcessLabel2[pi], null);} contentPane1.add(pPanel1);contentPane1.add(pPanel2);contentPane1.add(pPanel4);for(int si = 0;si < 5;si++)for(int pi = 0;pi < 6;pi++){

textNeed[pi][si] = new JTextField();

textNeed[pi][si]

.setBounds(150 + si * 50, 120 + pi * 20, 50, 20);

textNeed[pi][si].setEditable(false);

textAllocation[pi][si] = new JTextField();

textAllocation[pi][si].setBounds(150 + si * 50, 270 + pi * 20,50, 20);

textAllocation[pi][si].setEditable(false);} for(int si = 0;si < 5;si++){ textAvailable[si] = new JTextField();textAvailable[si].setEditable(false);textAvailable[si].setBounds(150 + si * 50, 70, 50, 20);textRequest[si] = new JTextField();textRequest[si].setEditable(false);textRequest[si].setBounds(150 + si * 50, 430, 50, 20);contentPane1.add(textAvailable[si], null);contentPane1.add(textRequest[si], null);} for(int pi = 0;pi < 6;pi++)for(int si = 0;si < 5;si++){

contentPane1.add(textNeed[pi][si], null);

contentPane1.add(textAllocation[pi][si], null);} textProcessName.setBounds(80, 430, 50, 20);contentPane1.add(textProcessName, null);f1.setSize(550, 500);

f1.setResizable(false);

f1.setTitle(”銀行家算法(SXJ)“);

f1.setLocationRelativeTo(null);

f1.setDefaultCloseOperation(EXIT_ON_CLOSE);

// f1.setVisible(true);

f1.setVisible(false);

f2 = new JFrame(”安全序列顯示框“);

jt = new JTextArea(75, 40);

jt.setBackground(Color.pink);

jt.setForeground(Color.blue);

JScrollPane scrollPane = new JScrollPane(jt);// 加滾動(dòng)條

scrollPane.setBorder(BorderFactory.createLoweredBevelBorder());// 邊界

(f2.getContentPane()).add(scrollPane);

f2.setSize(450, 400);

f2.setResizable(false);

f2.setDefaultCloseOperation(EXIT_ON_CLOSE);

f2.setVisible(false);

buttonSetInit.setEnabled(false);

buttonRequest.setEnabled(false);

buttonsearch.setEnabled(false);

button1.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

// labelInfo.setText(”請(qǐng)先初始化allocated和Maxneed,后單擊初始化按鈕“);

f1.setVisible(true);

buttonSetInit.setEnabled(true);

resourceNum = Integer.parseInt(tf1.getText());

processNum = Integer.parseInt(tf2.getText());

for(int i = 0;i < processNum;i++){

for(int j = 0;j < resourceNum;j++){

textNeed[i][j].setEditable(true);

textAllocation[i][j].setEditable(true);

textAvailable[j].setEditable(true);

}

}

}

});

buttonSetInit.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

Init();

buttonsearch.setEnabled(true);

}

});

buttonsearch.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){ count = 0;SafeSequence = new int[processNum];worked = new int[resourceNum];Finish = new boolean[processNum];copyVector(worked, available);Safety(0);jt.append(”安全序列數(shù)量:“ + count);if(flag){

labelInfo1.setText(”當(dāng)前系統(tǒng)狀態(tài):安全“);

f2.setVisible(true);

buttonRequest.setEnabled(true);

textProcessName.setEnabled(true);

for(int i = 0;i < resourceNum;i++){

textRequest[i].setEditable(true);

} } else {

labelInfo1.setText(”當(dāng)前系統(tǒng)狀態(tài):不安全“);} buttonSetInit.setEnabled(false);} });buttonRequest.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){

count = 0;

for(int i = 0;i < processNum;i++){

Finish[i] = false;

}

jt.setText(”“);

flag = false;RequestResource();} });button2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){

/*

* tf1.setText(”“);tf2.setText(”“);

*/

f2.setVisible(false);

jt.setText(”“);

for(int i = 0;i < processNum;i++){

}

for(int j = 0;j < resourceNum;j++){

textNeed[i][j].setText(”“);

textAllocation[i][j].setText(”“);

textAvailable[j].setText(”“);

textRequest[j].setText(”“);

// textNeed[i][j].setEditable(false);

// textAllocation[i][j].setEditable(false);

// textAvailable[j].setEditable(false);

textRequest[j].setEditable(false);

textProcessName.setText(”“);

Finish[i] = false;

}

}

flag = false;

buttonsearch.setEnabled(false);

// labelInfo.setText(”請(qǐng)先輸入資源個(gè)數(shù)和進(jìn)程個(gè)數(shù),后單擊確定“);} });button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){

tf1.setText(”“);

tf2.setText(”“);

f2.setVisible(false);

jt.setText(”“);flag = false;} });void copyVector(int[] v1, int[] v2){ for(int i = 0;i < v1.length;i++)

v1[i] = v2[i];} void Add(int[] v1, int[] v2){ for(int i = 0;i < v1.length;i++)

v1[i] += v2[i];} void Sub(int[] v1, int[] v2){ for(int i = 0;i < v1.length;i++)

} v1[i]-= v2[i];boolean Smaller(int[] v1, int[] v2){ boolean value = true;for(int i = 0;i < v1.length;i++)

if(v1[i] > v2[i]){

value = false;

break;

} return value;} public static void main(String[] args){ OsBanker ob = new OsBanker();ob.display();// System.out.println(” “+count);} void Init()// 初始化操作矩陣 { available = new int[resourceNum];for(int i = 0;i < resourceNum;i++){

available[i] = Integer.parseInt(textAvailable[i].getText());} max = new int[processNum][resourceNum];allocated = new int[processNum][resourceNum];need = new int[processNum][resourceNum];for(int i = 0;i < processNum;i++){

for(int j = 0;j < resourceNum;j++){

max[i][j] = Integer.parseInt(textNeed[i][j].getText());

allocated[i][j] = Integer.parseInt(textAllocation[i][j]

.getText());

} } for(int i = 0;i < resourceNum;i++)

for(int j = 0;j < processNum;j++)

need[j][i] = max[j][i]1);

request = new int[resourceNum];

for(int i = 0;i < resourceNum;i++){

request[i] = Integer.parseInt(textRequest[i].getText());

}

if(!Smaller(request, need[processname])){

labelInfo.setText(”資源請(qǐng)求不符該進(jìn)程的需求量.“);

} else if(!Smaller(request, available)){

labelInfo1.setText(”可用資源不足以滿足請(qǐng)求,進(jìn)程需要等待.“);

} else {

Sub(available, request);

Add(allocated[processname], request);

Sub(need[processname], request);

copyVector(worked, available);

Safety(0);

if(flag){

labelInfo1.setText(”可立即分配給該進(jìn)程!“);

} else {

labelInfo1.setText(”分配后導(dǎo)致系統(tǒng)處于不安全狀態(tài)!,不可立即分配");

Add(available, request);

Sub(allocated[processname], request);

Add(need[processname], request);

}

}

// } } }

五、實(shí)驗(yàn)結(jié)果:

初始界面:

初始化:

檢測(cè)安全性:

請(qǐng)求資源:

(1)進(jìn)程2(1,0,2)

(2)進(jìn)程5(3,3,0)

(3)進(jìn)程1(0,2,0)

六、遇到的問(wèn)題及不足之處:

1、程序編寫的時(shí)候規(guī)定最大資源數(shù)和最大進(jìn)程數(shù)均<=6。

2、程序直接初始化了6個(gè)進(jìn)程框,既浪費(fèi)了內(nèi)存空間,又對(duì)可視化界面的美觀造成影響。

3、未對(duì)輸入異常進(jìn)行處理:比如在請(qǐng)求資源的第一個(gè)方框中只能填入進(jìn)程的數(shù)字編號(hào),當(dāng)填入的為非整數(shù)時(shí),程序會(huì)拋出異常。

4、未解決進(jìn)程名中對(duì)字符串的處理,直接固定進(jìn)程名為數(shù)字,用戶不能直接輸入原有的進(jìn)程名,造成不好的用戶體驗(yàn)。

第四篇:操作系統(tǒng)課程設(shè)計(jì)(銀行家算法的模擬實(shí)現(xiàn))

操作系統(tǒng)課程設(shè)計(jì)

(銀行家算法的模擬實(shí)現(xiàn))

一、設(shè)計(jì)目的

1、進(jìn)一步了解進(jìn)程的并發(fā)執(zhí)行。

2、加強(qiáng)對(duì)進(jìn)程死鎖的理解。

3、用銀行家算法完成死鎖檢測(cè)。

二、設(shè)計(jì)內(nèi)容

給出進(jìn)程需求矩陣C、資源向量R以及一個(gè)進(jìn)程的申請(qǐng)序列。使用進(jìn)程啟動(dòng)拒絕和資源分配拒絕(銀行家算法)模擬該進(jìn)程組的執(zhí)行情況。

三、設(shè)計(jì)要求

1、初始狀態(tài)沒(méi)有進(jìn)程啟動(dòng)。

2、計(jì)算每次進(jìn)程申請(qǐng)是否分配,如:計(jì)算出預(yù)分配后的狀態(tài)情況(安全狀態(tài)、不安全狀態(tài)),如果是安全狀態(tài),輸出安全序列。

3、每次進(jìn)程申請(qǐng)被允許后,輸出資源分配矩陣A和可用資源向量V。

4、每次申請(qǐng)情況應(yīng)可單步查看,如:輸入一個(gè)空格,繼續(xù)下個(gè)申請(qǐng)。

四、算法原理

1、銀行家算法中的數(shù)據(jù)結(jié)構(gòu)(1)、可利用資源向量Available,這是一個(gè)含有m個(gè)元素的數(shù)組,其中的每個(gè)元素代表一類可利用資源的數(shù)目,其初始值是系統(tǒng)中所配置的該類全部資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動(dòng)態(tài)改變。如果Available[j]=K,則表示系統(tǒng)中現(xiàn)有Rj類資源K個(gè)。

(2)、最大需求矩陣Max,這是一個(gè)n*m的矩陣,它定義了系統(tǒng)中n個(gè)進(jìn)程中的每一個(gè)進(jìn)程對(duì)m類資源的最大需求。如果Max[i,j]=K,則表示進(jìn)程i需要Rj類資源的最大數(shù)目為K。

(3)、分配矩陣Allocation。這也是一個(gè)n*m的矩陣,它定義了系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)。如果Allocation[i,j]=K,則表示進(jìn)程i當(dāng)前已經(jīng)分得Rj類資源的數(shù)目為K。

(4)、需求矩陣Need。這也是一個(gè)n*m的矩陣,用以表示每個(gè)進(jìn)程尚需要的各類資源數(shù)。如果Need[i,j]=K,則表示進(jìn)程i還需要Rj類資源K個(gè),方能完成其任務(wù)。上述三個(gè)矩陣間存在以下關(guān)系:

Need[i,j]=Max[i,j]-Allocation[i,j]

2、銀行家算法應(yīng)用

模擬實(shí)現(xiàn)Dijkstra的銀行家算法以避免死鎖的出現(xiàn),分兩部分組成:一是銀行家算法(掃描);二是安全性算法。

(1)銀行家算法(掃描)

設(shè)Requesti是進(jìn)程Pi的請(qǐng)求向量,如果Requesti[j]=K,表示進(jìn)程Pi需要K個(gè)Ri類型的資源。當(dāng)Pi發(fā)出資源請(qǐng)求后,系統(tǒng)按下述步驟進(jìn)行檢查:

①如果Requesti[j]<=Need[i,j],便轉(zhuǎn)向步驟②;否則認(rèn)為出錯(cuò),因?yàn)樗璧馁Y源數(shù)已經(jīng)超過(guò)了它所宣布的最大值。

②如果Requesti[j]<=Allocation[i,j],便轉(zhuǎn)向步驟③;否則表示尚無(wú)足夠資源,Pi需等待。

③系統(tǒng)試探著把資源分配給進(jìn)程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值。

Available[j]=Available-Requesti[j];

Allocation[i,j]=Allocation[i,j]+Requesti[j];

Need[i,j]=Need[i,j]-Requesti[j];

④系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進(jìn)程Pi,已完成本次分配;否則,將本次的試探分配作廢,恢復(fù)原來(lái)資源的分配狀態(tài),讓進(jìn)程Pi等待。

(2)安全性算法

系統(tǒng)所執(zhí)行的安全性算法可描述如下:

①設(shè)置兩個(gè)向量:一個(gè)是工作向量Work;它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需要的各類資源的數(shù)目,它含有m個(gè)元素,在執(zhí)行安全性算法開(kāi)始時(shí),work=Available;另一個(gè)是Finish;它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成。開(kāi)始時(shí)先做Finish[i]=false;當(dāng)有足夠資源分配給進(jìn)程時(shí),再令Finish[i]=true;

②從進(jìn)程集合中找到能滿足下述條件的進(jìn)程:

一是Finish[i]==false;二是Need[i,j]<=Work[j];若找到,執(zhí)行步驟③,否則,執(zhí)行步驟④;

③當(dāng)進(jìn)程Pi獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:

Work[j]=Work[j]+Allocation[i,j];

Finish[i]=true;

go to step②;

④如果所有進(jìn)程的 Finish[i]==true都滿足,則表示系統(tǒng)處于安全狀態(tài),否則系統(tǒng)處于不安全狀態(tài)。

五、設(shè)計(jì)思路

1、進(jìn)程一開(kāi)始向系統(tǒng)提出最大需求量;

2、進(jìn)程每次提出新的需求(分期貸款)都統(tǒng)計(jì)是否超出它事先提出的最大需求量;

3、若正常,則判斷該進(jìn)程所需剩余量(包括本次申請(qǐng))是否超出系統(tǒng)所掌握的剩余資源量,若不超出,則分配,否則等待。

六、程序運(yùn)行調(diào)試結(jié)果

1、程序初始化

2、檢測(cè)系統(tǒng)資源分配是否安全結(jié)果

七、小結(jié)

“銀行家算法的模擬實(shí)現(xiàn)”是本學(xué)期操作系統(tǒng)課程的課程設(shè)計(jì)。在設(shè)計(jì)此程序的過(guò)程中我們遇到過(guò)許多問(wèn)題也學(xué)到了很多東西。通過(guò)這周的課程設(shè)計(jì),我加深了對(duì)銀行家算法的理解,掌握了銀行家算法避免死鎖的過(guò)程和方法,理解了死鎖產(chǎn)生的原因和條件以及避免死鎖的方法。所編寫程序基本實(shí)現(xiàn)了銀行家算法的功能,并在其基礎(chǔ)上考慮了輸出顯示格式的美觀性,使界面盡可能友好。并且在編程時(shí)將主要的操作都封裝在函數(shù)中,這樣使程序可讀性增強(qiáng),使程序更加清晰明了。在算法的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)上考慮了很長(zhǎng)時(shí)間。在程序設(shè)計(jì)中先后參考了很多網(wǎng)絡(luò)資料也參考了一些別人寫的的程序綜合這些算法思想和自己的思路對(duì)程序做了很好的設(shè)計(jì)方式對(duì)一些算法的優(yōu)越性等也作了一些考慮。當(dāng)然,在編寫和調(diào)試過(guò)程中我遇到了許多的問(wèn)題,通過(guò)網(wǎng)上查詢資料、翻閱課本、向同學(xué)請(qǐng)教、多次調(diào)試等方法逐漸解決了大部分問(wèn)題。讓我收獲很多,相信在今后的生活中也有一定幫助。

附:程序源代碼:

#include #include #include # define m 50

int no1;//進(jìn)程數(shù) int no2;//資源數(shù) int r;int allocation[m][m],need[m][m],available[m],max[m][m];char name1[m],name2[m];//定義全局變量 void main(){ void check();void print();int i,j,p=0,q=0;char c;int request[m],allocation1[m][m],need1[m][m],available1[m];printf(“**********************************************n”);printf(“* 銀行家算法的設(shè)計(jì)與實(shí)現(xiàn) *n”);printf(“**********************************************n”);printf(“請(qǐng)輸入進(jìn)程總數(shù):n”);scanf(“%d”,&no1);printf(“請(qǐng)輸入資源種類數(shù):n”);scanf(“%d”,&no2);printf(“請(qǐng)輸入Max矩陣:n”);for(i=0;i

for(j=0;j

scanf(“%d”,&max[i][j]);//輸入已知進(jìn)程最大資源需求量

printf(“請(qǐng)輸入Allocation矩陣:n”);for(i=0;i

for(j=0;j

scanf(“%d”,&allocation[i][j]);//輸入已知的進(jìn)程已分配的資源數(shù)

for(i=0;i

for(j=0;j

need[i][j]=max[i][j]-allocation[i][j];//根據(jù)輸入的兩個(gè)數(shù)組計(jì)算出need矩陣的值

printf(“請(qǐng)輸入Available矩陣n”);for(i=0;i

scanf(“%d”,&available[i]);//輸入已知的可用資源數(shù)

print();//輸出已知條件

check();//檢測(cè)T0時(shí)刻已知條件的安全狀態(tài)

if(r==1)//如果安全則執(zhí)行以下代碼

{

do{ q=0;p=0;printf(“n請(qǐng)輸入請(qǐng)求資源的進(jìn)程號(hào)(0~4):n”);

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

{

scanf(“%d”,&i);

if(i>=no1)

{

printf(“輸入錯(cuò)誤,請(qǐng)重新輸入:n”);

continue;

}

else break;

}

printf(“n請(qǐng)輸入該進(jìn)程所請(qǐng)求的資源數(shù)request[j]:n”);

for(j=0;j

scanf(“%d”,&request[j]);

else //請(qǐng)求滿足條件

{

for(j=0;j

{

available1[j]=available[j];

allocation1[i][j]=allocation[i][j];

need1[i][j]=need[i][j];

//保存原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù)

available[j]=available[j]-request[j];

allocation[i][j]+=request[j];

need[i][j]=need[i][j]-request[j];//系統(tǒng)嘗試把資源分配給請(qǐng)求的進(jìn)程

}

print();

check();//檢測(cè)分配后的安全性

if(r==0)//如果分配后系統(tǒng)不安全

{

for(j=0;j

{

available[j]=available1[j];

allocation[i][j]=allocation1[i][j];

need[i][j]=need1[i][j];//還原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù)

}

printf(“返回分配前資源數(shù)n”);

print();

}

}

}printf(“n你還要繼續(xù)分配嗎?Y or N ?n”);

//判斷是否繼續(xù)進(jìn)行資源分配 for(j=0;jneed[i][j])p=1;//判斷請(qǐng)求是否超過(guò)該進(jìn)程所需要的資源數(shù)

if(p)

printf(“請(qǐng)求資源超過(guò)該進(jìn)程資源需求量,請(qǐng)求失敗!n”);else {

for(j=0;j

if(request[j]>available[j])q=1;//判斷請(qǐng)求是否超過(guò)可用資源數(shù)

if(q)

printf(“沒(méi)有做夠的資源分配,請(qǐng)求失敗!n”);

c=getche();

}while(c=='y'||c=='Y');} }

void check()//安全算法函數(shù) { int k,f,v=0,i,j;int work[m],a[m];bool finish[m];r=1;for(i=0;i

finish[i]=false;// 初始化進(jìn)程均沒(méi)得到足夠資源數(shù)并完成for(i=0;i

k=no1;do{

for(i=0;i

{

if(finish[i]==false)

{

f=1;

for(j=0;j

if(need[i][j]>work[j])

f=0;

if(f==1)//找到還沒(méi)有完成且需求數(shù)小于可提供進(jìn)程繼續(xù)運(yùn)行的資源數(shù)的進(jìn)程

{

finish[i]=true;

a[v++]=i;//記錄安全序列號(hào)

for(j=0;j

work[j]+=allocation[i][j];//釋放該進(jìn)程已分配的資源

}

}

}

k--;//每完成一個(gè)進(jìn)程分配,未完成的進(jìn)程數(shù)就減1 }while(k>0);f=1;for(i=0;i

if(finish[i]==false)

{

f=0;

break;

} } if(f==0)//若有進(jìn)程沒(méi)完成,則為不安全狀態(tài)

{

printf(“系統(tǒng)處在不安全狀態(tài)!”);

r=0;} else {

printf(“n系統(tǒng)當(dāng)前為安全狀態(tài),安全序列為:n”);

for(i=0;i

printf(“p%d ”,a[i]);//輸出安全序列

} }

void print()//輸出函數(shù) { int i,j;printf(“n”);printf(“*************此時(shí)刻資源分配情況*********************n”);printf(“進(jìn)程名/號(hào) | Max | Allocation | Need |n”);for(i = 0;i < no1;i++)

{

printf(“ p%d/%d ”,i,i);

for(j = 0;j < no2;j++){printf(“%d ”,max[i][j]);}

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

{printf(“ %d ”,allocation[i][j]);}

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

{printf(“ %d ”,need[i][j]);}

printf(“n”);

} printf(“n”);

printf(“各類資源可利用的資源數(shù)為:”);

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

{printf(“ %d”,available[j]);}

} printf(“n”);

(程序結(jié)束)

第五篇:操作系統(tǒng)課程設(shè)計(jì)編程序模擬銀行家算法

課程設(shè)計(jì)報(bào)告書(shū)

課程名稱:

操作系統(tǒng)原理

目:

編程序模擬銀行家算法

名:

信息工程系

專業(yè)班級(jí):

軟件

名:

學(xué)

號(hào):

指導(dǎo)教師:

2013年

X

X

學(xué)院信息工程系

設(shè)

計(jì)

務(wù)

書(shū)

課程名稱:

操作系統(tǒng)原理課程設(shè)計(jì)

指導(dǎo)教師:

班級(jí)名稱:

軟件

開(kāi)課系、教研室:

軟件與信息安全

一、課程設(shè)計(jì)目的與任務(wù)

操作系統(tǒng)課程設(shè)計(jì)是《操作系統(tǒng)原理》課程的后續(xù)實(shí)踐課程,旨在通過(guò)一周的實(shí)踐訓(xùn)練,加深學(xué)生對(duì)理論課程中操作系統(tǒng)概念,原理和方法的理解,加強(qiáng)學(xué)生綜合運(yùn)用操作系統(tǒng)原理、Linux系統(tǒng)、C語(yǔ)言程序設(shè)計(jì)技術(shù)進(jìn)行實(shí)際問(wèn)題處理的能力,進(jìn)一步提高學(xué)生進(jìn)行分析問(wèn)題和解決問(wèn)題的能力,包含系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、系統(tǒng)實(shí)現(xiàn)和系統(tǒng)測(cè)試的能力。

學(xué)生將在指導(dǎo)老師的指導(dǎo)下,完成從需求分析,系統(tǒng)設(shè)計(jì),編碼到測(cè)試的全過(guò)程。

二、課程設(shè)計(jì)的內(nèi)容與基本要求

1、課程設(shè)計(jì)題目

編程序模擬銀行家算法

2、課程設(shè)計(jì)內(nèi)容

本課程設(shè)計(jì)要求在Linux操作系統(tǒng),GCC編譯環(huán)境下開(kāi)發(fā)。

銀行家算法是避免死鎖的一種重要方法,本實(shí)驗(yàn)要求用用c/c++語(yǔ)言在Linux操作系統(tǒng)環(huán)境下編寫和調(diào)試一個(gè)簡(jiǎn)單的銀行家算法程序。加深了解有關(guān)資源申請(qǐng)、避免死鎖等概念,并體會(huì)和了解死鎖和避免死鎖的具體實(shí)施方法。

思想:將一定數(shù)量的資金供多個(gè)用戶周轉(zhuǎn)使用,當(dāng)用戶對(duì)資金的最大申請(qǐng)量不超過(guò)現(xiàn)存資金時(shí)可接納一個(gè)新客戶,客戶可以分期借款,但借款總數(shù)不能超過(guò)最大的申請(qǐng)量。銀行家對(duì)客戶的借款可以推遲支付,但是能夠使客戶在有限的時(shí)間內(nèi)得到借款,客戶得到所有的借款后能在有限的時(shí)間內(nèi)歸還。用銀行家算法分配資源時(shí),測(cè)試進(jìn)程對(duì)資源的最大需求量,若現(xiàn)存資源能滿足最大需求就滿足當(dāng)前進(jìn)程的申請(qǐng),否則推遲分配,這樣能夠保證至少有一個(gè)進(jìn)程可以得到所需的全部資源而執(zhí)行到結(jié)束,然后歸還資源,若OS能保證所有進(jìn)程在有限的時(shí)間內(nèi)得到所需資源則稱系統(tǒng)處于安全狀態(tài)。

3、設(shè)計(jì)報(bào)告撰寫格式要求:

1設(shè)計(jì)題目與要求

設(shè)計(jì)思想

3系統(tǒng)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu)的說(shuō)明和模塊的算法流程圖

使用說(shuō)明書(shū)(即用戶手冊(cè)):內(nèi)容包含如何登錄、退出、讀、寫等操作說(shuō)明

運(yùn)行結(jié)果和結(jié)果分析(其中包括實(shí)驗(yàn)的檢查結(jié)果、程序的運(yùn)行情況)

自我評(píng)價(jià)與總結(jié)

附錄:程序清單,注意加注釋(包括關(guān)鍵字、方法、變量等),在每個(gè)模塊前加注釋;

三、課程設(shè)計(jì)步驟及時(shí)間進(jìn)度和場(chǎng)地安排

本課程設(shè)計(jì)將安排在第15周,教育技術(shù)中心。具體安排如下:

第一天

下發(fā)任務(wù)書(shū),學(xué)生查閱資料

第二天

系統(tǒng)設(shè)計(jì)和原型開(kāi)發(fā)

第三,四天

系統(tǒng)功能實(shí)現(xiàn)

第五天

系統(tǒng)調(diào)試

測(cè)試

打包和驗(yàn)收

四、課程設(shè)計(jì)考核及評(píng)分標(biāo)準(zhǔn)

課程設(shè)計(jì)考核將綜合考慮學(xué)生考勤和參與度,系統(tǒng)設(shè)計(jì)方案正確性,系統(tǒng)設(shè)計(jì)和開(kāi)發(fā)效果以及課程設(shè)計(jì)報(bào)告書(shū)的質(zhì)量。具體評(píng)分標(biāo)準(zhǔn)如下:

設(shè)置六個(gè)評(píng)分點(diǎn)

(1)設(shè)計(jì)方案正確,具有可行性、創(chuàng)新性;

25分

(2)系統(tǒng)開(kāi)發(fā)效果較好;

25分

(3)態(tài)度認(rèn)真、刻苦鉆研、遵守紀(jì)律;

10分

(4)設(shè)計(jì)報(bào)告規(guī)范、課程設(shè)計(jì)報(bào)告質(zhì)量高、參考文獻(xiàn)充分

20分

(5)課程設(shè)計(jì)答辯概念清晰,內(nèi)容正確

10分

(6)課程設(shè)計(jì)期間的課堂考勤、答疑與統(tǒng)籌考慮。

10分

按上述六項(xiàng)分別記分后求和,總分按五級(jí)記分法記載最后成績(jī)。

優(yōu)秀(100~90分),良好(80~89分),中等(70~79分),及格(60~69分),不及格(0~59分)

1.題目要求與實(shí)驗(yàn)?zāi)康?.1

實(shí)驗(yàn)?zāi)康模?/p>

1.1.1進(jìn)一步理解利用銀行家算法避免死鎖的問(wèn)題;

1.1.2在了解和掌握銀行家算法。

1.1.3理解和掌握安全序列、安全性算法

1.2

設(shè)計(jì)題目:

編程序模擬銀行家算法

1.3

要求

本實(shí)驗(yàn)要求用用

c/c語(yǔ)言在Linux

操作系統(tǒng)環(huán)境下編寫和調(diào)試一個(gè)簡(jiǎn)單的銀行家算法程序。加深了解有關(guān)資源申請(qǐng)、避免死鎖等概念,并體會(huì)和了解死鎖和避免死鎖的具體實(shí)施方法。

1.4

實(shí)驗(yàn)內(nèi)容

1.4.1編寫安全性算法;

1.4.2編寫銀行家算法,并編制銀行家算法通用程序,將調(diào)試結(jié)果顯示在計(jì)算機(jī)屏幕上,再檢測(cè)和筆算的一致性。

設(shè)計(jì)思想

將一定數(shù)量的資金供多個(gè)用戶周轉(zhuǎn)使用,當(dāng)用戶對(duì)資金的最大申請(qǐng)量不超過(guò)現(xiàn)存資金時(shí)可接納一個(gè)新客戶,客戶可以分期借款,但借款總數(shù)不能超過(guò)最大的申請(qǐng)量。銀行家對(duì)客戶的借款可以推遲支付,但是能夠使客戶在有限的時(shí)間內(nèi)得到借款,客戶得到所有的借款后能在有限的時(shí)間內(nèi)歸還。

用銀行家算法分配資源時(shí),測(cè)試進(jìn)程對(duì)資源的最大需求量,若現(xiàn)存資源能滿足最大需求就滿足當(dāng)前進(jìn)程的申請(qǐng),否則推遲分配,這樣能夠保證至少有一個(gè)進(jìn)程可以得到所需的全部資源而執(zhí)行到結(jié)束,然后歸還資源,若OS能保證所有進(jìn)程在有限的時(shí)間內(nèi)得到所需資源則稱系統(tǒng)處于安全狀態(tài)。

3.需求分析

3.1問(wèn)題描述:利用銀行家算法模擬計(jì)算機(jī)系統(tǒng)分配資源的過(guò)程。

3.2要求:

3.2.11、以課本例題中數(shù)據(jù)為例,模擬資源分配過(guò)程。

3.2.2、系統(tǒng)中資源種類,各類資源數(shù)目,進(jìn)程申請(qǐng)資源數(shù)目可任意輸入,模擬資源分配過(guò)程。

4.系統(tǒng)結(jié)構(gòu)

初始化函數(shù)init()開(kāi)始

輸入進(jìn)程的數(shù)目m

輸入資源種類n

輸入每個(gè)進(jìn)程最多所需的各種資源數(shù)

輸入每個(gè)進(jìn)程分配的資源數(shù)

輸入各個(gè)資源現(xiàn)有數(shù)目

初始化函數(shù)init()結(jié)束

輸入提示:

輸入有誤重新輸入

5.數(shù)據(jù)結(jié)構(gòu)的說(shuō)明和模塊的算法流程圖

5.1

數(shù)據(jù)結(jié)構(gòu):

①可利用資源向量

Available

是個(gè)含有

m

個(gè)元素的數(shù)組,其中的每一個(gè)元素代表一類可利用的資源數(shù)目。如果

AvailablejK,則表示系統(tǒng)中現(xiàn)有

Rj

類資源

K

個(gè)。

②最大需求矩陣

Max

這是一個(gè)

n×m的矩陣,它定義了系統(tǒng)中

n

個(gè)進(jìn)程中的每一個(gè)進(jìn)程對(duì)

m

類資源的最大需求。如果

MaxijK,則表示進(jìn)程

i

需要

Rj

類資源的最大數(shù)目為

K。

③分配矩陣

Allocation

這也是一個(gè)

n×m的矩陣,它定義了系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)。如果

AllocationijK,則表示進(jìn)程

i

當(dāng)前已分得

Rj

類資源的數(shù)目為

K。

④需求矩陣

Need。

這也是一個(gè)

n×m的矩陣,用以表示每一個(gè)進(jìn)程尚需的各類資源數(shù)。如果NeedijK,則表示進(jìn)程

i

還需要

Rj

類資源

K

個(gè),才可以完成其任務(wù)。

5.2

程序流程圖:

①、系統(tǒng)主要過(guò)程流程

預(yù)分配

安全?

實(shí)際分配打印輸出

退出系統(tǒng)

Request[i]>Available[i]?

Request[i]>need[i]?

提出申請(qǐng)

打印輸出此時(shí)刻資源分配情況

進(jìn)入系統(tǒng)

輸入:

1.繼續(xù)分配

2.退出

進(jìn)入初始化

②、安全性算法流程圖

調(diào)用safty()函數(shù)

Work[]=Available[],Finish[]=False

Need[]<=work[]且Finsh[]=Falsse?

Work[]=work[]+Alloccation[],Finish[]=Ture

所有進(jìn)程的Finsh[]=Ture?

實(shí)際分配輸出安全序列并打印出

輸出提示系統(tǒng)不安全

調(diào)用結(jié)束

用戶手冊(cè)

6.1

首先在終端中使用

vi

編輯器建立

c的源文件

6.2

然后使用

gcc

編輯器編譯生成可執(zhí)行文件

6.3

使用命令./當(dāng)前名字,來(lái)執(zhí)行

7.運(yùn)行結(jié)果和結(jié)果分析

7.1

運(yùn)行結(jié)果:

申請(qǐng)成功如圖

2,申請(qǐng)失敗如圖

3:

申請(qǐng)金額在需求范圍之內(nèi)同意

申請(qǐng)金額在需求范圍之外拒絕

7.2

結(jié)果分析

首先是自己定義

個(gè)用戶所需的金額數(shù),銀行可以給用戶貸款的總金額數(shù)是100,用戶

Id

號(hào)的范圍是在0

4,超過(guò)

之后的id

請(qǐng)求貸款,會(huì)顯示拒絕提示信息,每個(gè)客戶的貸款數(shù)量必須是在之前定義的范圍之內(nèi),如果超出,也會(huì)出現(xiàn)錯(cuò)誤提示,只有在規(guī)定的用戶

id

和在客戶所要求金額的范圍之內(nèi)請(qǐng)求,才會(huì)給予貸款,并且輸出安全序列號(hào)。

8.自我評(píng)價(jià)與總結(jié)

一周的課程設(shè)計(jì)結(jié)束了。在這一周里,我收獲很多,以前都是在自己的教室由我們自己的老師進(jìn)行講課,這次學(xué)校沒(méi)有這樣做,而是請(qǐng)的校外的老師給我們做課程設(shè)計(jì),讓我們體會(huì)一下真正的公司是怎樣做業(yè)務(wù)的。在這一周里我做一個(gè)模擬銀行家算法。我覺(jué)得在著手設(shè)計(jì)前設(shè)計(jì)的思路是很重要的。只有思路清晰才能進(jìn)行下一階段的設(shè)計(jì)。這樣才能完成整個(gè)程序的設(shè)計(jì),完成整個(gè)文報(bào)告的書(shū)寫。

課程設(shè)計(jì)這幾天學(xué)到的東西還真不少。以前不清楚的現(xiàn)在都暴露出來(lái)了。以前認(rèn)為學(xué)了沒(méi)用的東西現(xiàn)在也用到了。這次的課程設(shè)計(jì)使我進(jìn)一步了解了調(diào)度與死鎖的問(wèn)題。以及有關(guān)資源申請(qǐng)的問(wèn)題、避免死鎖的具體實(shí)施方法。深入了解了銀行家算法的資源申請(qǐng)和資源分配的過(guò)程及原則。保證系統(tǒng)處于安全狀態(tài)。

經(jīng)過(guò)本周的課程設(shè)計(jì),我對(duì)操作系統(tǒng)的掌握又進(jìn)了一步,收獲了很多知識(shí)。,終于我了由于對(duì)

c

語(yǔ)言不夠熟練,在試驗(yàn)過(guò)程中,進(jìn)行了反復(fù)的修改和調(diào)試,解銀行家算法的基本原理,并且在此次的課程設(shè)計(jì)中我又復(fù)習(xí)了一下

c

語(yǔ)言,加深了對(duì)它的了解,而且在課程設(shè)計(jì)的過(guò)程中我們同樣學(xué)會(huì)了如何簡(jiǎn)單的操作與使用

Linux

操作系統(tǒng),學(xué)習(xí)到了許多

Linux

操作系統(tǒng)中常用的一些密令。

這次的設(shè)計(jì)數(shù)據(jù)是通過(guò)一道實(shí)際的題目來(lái)體現(xiàn)銀行家算法避免死鎖的問(wèn)題,先用銀行家算法給其中一個(gè)進(jìn)程分配資源,看它所請(qǐng)求的資源是否大于它的需求量,才和系統(tǒng)所能給的資源相比較.讓進(jìn)程形成一個(gè)安全隊(duì)列看系統(tǒng)是否安全.再利用安全性算法檢查此時(shí)系統(tǒng)是否安全。

操作系統(tǒng)的基本特征是并發(fā)與共享。系統(tǒng)允許多個(gè)進(jìn)程并發(fā)執(zhí)行,并且共享系統(tǒng)的軟、硬件資源。為了最大限度的利用計(jì)算機(jī)系統(tǒng)的資源,操作系統(tǒng)應(yīng)采用動(dòng)態(tài)分配的策略,但是這樣就容易因資源不足,分配不當(dāng)而引起“死鎖”。而我本次課程設(shè)計(jì)就是得用銀行家算法來(lái)避免“死鎖”。銀行家算法就是一個(gè)分配資源的過(guò)程,使分配的序列不會(huì)產(chǎn)生死鎖。此算法的中心思想是:按該法分配資源時(shí),每次分配后總存在著一個(gè)進(jìn)程,如果讓它單獨(dú)運(yùn)行下去,必然可以獲得它所需要的全部資源,也就是說(shuō),它能結(jié)束,而它結(jié)束后可以歸還這類資源以滿足其他申請(qǐng)者的需要。

通過(guò)這次實(shí)驗(yàn),我體會(huì)到銀行家算法的重要性,銀行家算法是避免死鎖的主要方法,其思路在很多方面都非常值得我來(lái)學(xué)習(xí)借鑒。

附錄:

主要源程序

參考文獻(xiàn)

[1]

張堯?qū)W主編.計(jì)算機(jī)操作系統(tǒng)教程(第三版).北京:清華大學(xué)出版社,2006

[2]

張堯?qū)W編.計(jì)算機(jī)操作系統(tǒng)教程(第三版)習(xí)題解答與實(shí)驗(yàn)指導(dǎo).北京:清華大學(xué)出版社,2006

[3]

湯子瀛主編.計(jì)算機(jī)操作系統(tǒng)(第三版).西安:西安電子科技大學(xué)出版社,2001

[4]

張坤等編.操作系統(tǒng)實(shí)驗(yàn)教程.北京:清華大學(xué)出版社,2008

[5]

張麗芬等編.操作系統(tǒng)實(shí)驗(yàn)教程.北京:清華大學(xué)出版社,2006

[6]

屠祁等編.操作系統(tǒng)基礎(chǔ)(第三版).北京:清華大學(xué)出版社,2000

[7]

馮耀霖等編.操作系統(tǒng).西安:西安電子科技大學(xué)出版社,2001

[8]

左萬(wàn)歷.計(jì)算機(jī)操作系統(tǒng)教程(第二版).北京:高等教育出版社,2004

[9]譚浩強(qiáng).《C語(yǔ)言程序設(shè)計(jì)》.北京:清華大學(xué)出版社2003

[8]

龐麗華.《操作系統(tǒng)原理》(第四版).北京.華中科技大學(xué)出版社

2002

設(shè)計(jì)過(guò)程中質(zhì)疑(或答辯)記載:

1.銀行家算法的主要思想是什么?

答:一個(gè)進(jìn)程進(jìn)入系統(tǒng)時(shí)分配資源之前,判斷系統(tǒng)是否是安全的,即看它所請(qǐng)求的資源是否大于它的最大需求量,若正常,則判斷該進(jìn)程所需剩余剩余量(包括本次申請(qǐng))是否超出系統(tǒng)所掌握的剩余資源量,若不超出,則分配,否則等待。

2.銀行家算法的主要問(wèn)題是什么?

答:要求每個(gè)進(jìn)程必須事先知道資源的最大需求量,而且,在系統(tǒng)運(yùn)行過(guò)程中,考查每個(gè)進(jìn)程對(duì)各類資源的申請(qǐng)需花費(fèi)較多的時(shí)間。

3.在銀行家算法中各個(gè)資源存在什么關(guān)系?

答:該進(jìn)程所需要的資源數(shù)NEED[m][n]=MAX[m][n](該進(jìn)程所需要的最多的資源數(shù))-----ALLOCATION[m][n](該進(jìn)程所占有的資源數(shù))

指導(dǎo)教師評(píng)語(yǔ):

簽名:

****年**月**日

下載操作系統(tǒng)課程設(shè)計(jì)----模擬銀行家算法避免死鎖(優(yōu)秀范文五篇)word格式文檔
下載操作系統(tǒng)課程設(shè)計(jì)----模擬銀行家算法避免死鎖(優(yōu)秀范文五篇).doc
將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    操作系統(tǒng)課程設(shè)計(jì)銀行家算法的模擬實(shí)現(xiàn)

    操作系統(tǒng)課程設(shè)計(jì)報(bào)告專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生姓名班級(jí)學(xué)號(hào)指導(dǎo)教師完成日期信息工程學(xué)院題目:銀行家算法的模擬實(shí)現(xiàn)一、設(shè)計(jì)目的本課程設(shè)計(jì)是學(xué)習(xí)完“操作系統(tǒng)原理”課程后......

    銀行家算法《操作系統(tǒng)》課程設(shè)計(jì)報(bào)告

    《操作系統(tǒng)》課程設(shè)計(jì)報(bào)告課題:銀行家算法專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生姓名班級(jí)計(jì)算機(jī)學(xué)號(hào)指導(dǎo)教師信息工程學(xué)院一、實(shí)驗(yàn)要求和實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)?zāi)康模罕菊n程設(shè)計(jì)是學(xué)生學(xué)習(xí)完《操作系......

    死鎖_銀行家算法實(shí)驗(yàn)報(bào)告

    實(shí)驗(yàn)?zāi)康?銀行家算法是避免死鎖的一種重要方法。通過(guò)編寫一個(gè)模擬動(dòng)態(tài)資源分配的銀行家算法程序,進(jìn)一步深入理解死鎖、產(chǎn)生死鎖的必要條件、安全狀態(tài)等重要概念,并掌握避免死......

    計(jì)算機(jī)操作系統(tǒng) 課程設(shè)計(jì)報(bào)告 銀行家算法

    《計(jì)算機(jī)操作系統(tǒng)》 課 程 設(shè) 計(jì) 報(bào) 告 題 目: 銀行家算法班 級(jí): XXXXXXXXXXXXXXXX 姓 名: XXM 學(xué) 號(hào): XXXXXXXXXXXX 指導(dǎo)老師: XXXXXXXXXXXXXX 設(shè)計(jì)時(shí)間: XXXXXXXXXXXXXXX......

    操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告

    實(shí)驗(yàn)四死鎖 一、 實(shí)驗(yàn)?zāi)康? 當(dāng)系統(tǒng)的總資源數(shù)m小于或等于所有進(jìn)程對(duì)對(duì)資源的最大需求時(shí),就可能產(chǎn)生 死鎖。死鎖會(huì)引起計(jì)算機(jī)系統(tǒng)的癱瘓。銀行家算法是在實(shí)現(xiàn)資源分配時(shí)避免......

    操作系統(tǒng)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告-用C++實(shí)現(xiàn)銀行家算法

    操 作 系 統(tǒng) 實(shí) 驗(yàn) 報(bào) 告 (2) 學(xué)院:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 班級(jí):計(jì)091 學(xué)號(hào):姓名: 時(shí)間:2011/12/30 目 錄 1. 實(shí)驗(yàn)名稱……………………………………………………3 2. 實(shí)驗(yàn)?zāi)康摹?.....

    東南大學(xué)操作系統(tǒng)實(shí)驗(yàn)報(bào)告--銀行家算法

    操作系統(tǒng)實(shí)驗(yàn)三:銀行家算法的實(shí)現(xiàn) 一、 基本信息: a) 實(shí)驗(yàn)題目:銀行家算法的實(shí)現(xiàn) b) 完成人姓名:韓璐璐 c) 學(xué)號(hào):71114115 d) 報(bào)告日期:2016.5.27 二、 實(shí)驗(yàn)?zāi)康?通過(guò)實(shí)驗(yàn),加深對(duì)......

    操作系統(tǒng)課程設(shè)計(jì)六種算法

    《計(jì)算機(jī)操作系統(tǒng)》 學(xué)號(hào):班級(jí):軟技姓名:張靖?jìng)?課 程 設(shè) 計(jì) 報(bào) 告 4班 1367003270 目錄 1 實(shí)驗(yàn):進(jìn)程調(diào)度算法——時(shí)間片輪轉(zhuǎn)算法 2 實(shí)驗(yàn):銀行家算法3 實(shí)驗(yàn):分區(qū)分配算法——4......

主站蜘蛛池模板: www插插插无码免费视频网站| 后入到高潮免费观看| 2020年无码国产精品高清免费| 337p日本欧洲亚洲大胆| 亚洲人成人网站在线观看| 久久综合香蕉国产蜜臀av| 亚洲毛片无码专区亚洲a片| 亚洲五月综合缴情在线| 欧美成人aa大片| 欧美性大战久久久久久| 国产精品99久久久久久宅男小说| 日韩精品久久无码中文字幕| 国产精品高清网站| 14萝自慰专用网站| 狠狠色婷婷久久一区二区三区| 日本强伦片中文字幕免费看| 免费无毒永久av网站| 欧美丰满老妇性猛交| 色综合久久久无码中文字幕| 国产精品日韩欧美一区二区三区| 大香伊蕉国产av| 51国偷自产一区二区三区| 欧洲熟妇色xxxx欧美老妇老头多毛| 男女做爰无遮挡性视频| 日产精品久久久久久久性色| 风韵饥渴少妇在线观看| 久久夜色精品国产欧美乱极品| 国产白嫩护士被弄高潮| 国产精品污www一区二区三区| 国产熟人av一二三区| 免费国产va在线观看| 精品国产福利视频在线观看| 一区二区三区无码被窝影院| 精品综合久久久久久97| 成人午夜无码精品免费看| 国产成人av在线免播放app| 男人扒开女人双腿猛进视频| 国产精品美女久久久久av超清| 欧美丰满熟妇bbbbbb| 亚洲综合天天夜夜久久| 久9视频这里只有精品8|