操作系统实验报告银行家算法.docx

上传人:b****5 文档编号:3421937 上传时间:2022-11-22 格式:DOCX 页数:13 大小:222.42KB
下载 相关 举报
操作系统实验报告银行家算法.docx_第1页
第1页 / 共13页
操作系统实验报告银行家算法.docx_第2页
第2页 / 共13页
操作系统实验报告银行家算法.docx_第3页
第3页 / 共13页
操作系统实验报告银行家算法.docx_第4页
第4页 / 共13页
操作系统实验报告银行家算法.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

操作系统实验报告银行家算法.docx

《操作系统实验报告银行家算法.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告银行家算法.docx(13页珍藏版)》请在冰豆网上搜索。

操作系统实验报告银行家算法.docx

操作系统实验报告银行家算法

操作系统实验报告

题目:

银行家算法的实现

姓名:

XX

日期:

2011.11.25

实验目的

1.了解银行家算法是避免死锁的一种重要方法。

2.加深理解有关资源申请、避免死锁等概念。

3.体会、理解死锁和避免死锁的具体实施方法。

4.模拟实现银行家算法,用银行家算法实现资源分配。

一.实验内容

1.画出银行家算法的程序流程图

2.给出实现银行家算法和安全性算法的关键代码

nclude

#include

#include

#defineFalse0

#defineTrue1

intMax[100][100]={0};//各进程所需各类资源的最大需求

intAvaliable[100]={0};//系统可用资源

charname[100]={0};//资源的名称

intAllocation[100][100]={0};//系统已分配资源

intNeed[100][100]={0};//还需要资源

intRequest[100]={0};//请求资源向量

inttemp[100]={0};//存放安全序列

intWork[100]={0};//存放系统可提供资源

intM=100;//作业的最大数为100

intN=100;//资源的最大数为100

voidshowdata()//显示资源矩阵

{

inti,j;

cout<<"系统目前可用的资源[Avaliable]:

"<

for(i=0;i

cout<

cout<

for(j=0;j

cout<

cout<

cout<<"MaxAllocationNeed"<

cout<<"进程名";

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

{

for(i=0;i

cout<

cout<<"";

}

cout<

for(i=0;i

cout<<""<

for(j=0;j

cout<

cout<<"";

for(j=0;j

cout<

cout<<"";

for(j=0;j

cout<

cout<

}

}

intchangdata(inti)//进行资源分配

{

intj;

for(j=0;j

Avaliable[j]=Avaliable[j]-Request[j];

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

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

}

return1;

}

 

intsafe()//安全性算法

{

inti,k=0,m,apply,Finish[100]={0};

intj;

intflag=0;

Work[0]=Avaliable[0];

Work[1]=Avaliable[1];

Work[2]=Avaliable[2];

Work[3]=Avaliable[3];

Work[4]=Avaliable[4];

for(i=0;i

apply=0;

for(j=0;j

if(Finish[i]==False&&Need[i][j]<=Work[j]){

apply++;

if(apply==N){

for(m=0;m

Work[m]=Work[m]+Allocation[i][m];//变分配数

Finish[i]=True;

temp[k]=i;

i=-1;

k++;

flag++;

}

}

}

}

for(i=0;i

if(Finish[i]==False){

cout<<"系统不安全"<

return-1;

}

}

cout<<"系统是安全的!

"<

cout<<"分配的序列:

";

for(i=0;i

cout<

if(i";

}

cout<

return0;

}

voidshare()//利用银行家算法对申请资源对进行判定

{

charch;

inti=0,j=0;

ch='y';

cout<<"请输入要求分配的资源进程号(0-"<

";

cin>>i;//输入须申请的资源号

cout<<"请输入进程"<

"<

for(j=0;j

{

cout<

";

cin>>Request[j];//输入需要申请的资源

}

for(j=0;j

if(Request[j]>Need[i][j])//判断申请是否大于需求,若大于则出错

{

cout<<"进程"<

cout<<"分配不合理,不予分配!

"<

ch='n';

break;

}

else{

if(Request[j]>Avaliable[j])//判断申请是否大于当前资源,若大于则

{//出错

cout<<"进程"<

cout<<"分配出错,不予分配!

"<

ch='n';

break;

}

}

}

if(ch=='y'){

changdata(i);//根据进程需求量变换资源

showdata();//根据进程需求量显示变换后的资源

safe();//根据进程需求量进行银行家算法判断

}

}

voidaddresources(){//添加资源

intn,flag;

cout<<"请输入需要添加资源种类的数量:

";

cin>>n;

flag=N;

N=N+n;

for(inti=0;i

cout<<"名称:

";

cin>>name[flag];

cout<<"数量:

";

cin>>Avaliable[flag++];

}

showdata();

safe();

}

voiddelresources(){//删除资源

charming;

inti,flag=1;

cout<<"请输入需要删除的资源名称:

";

do{

cin>>ming;

for(i=0;i

if(ming==name[i]){

flag=0;

break;

}

if(i==N)

cout<<"该资源名称不存在,请重新输入:

";

}

while(flag);

for(intj=i;j

{

name[j]=name[j+1];

Avaliable[j]=Avaliable[j+1];

}

N=N-1;

showdata();

safe();

}

voidchangeresources(){//修改资源函数

cout<<"系统目前可用的资源[Avaliable]:

"<

for(inti=0;i

cout<

"<

cout<<"输入系统可用资源[Avaliable]:

"<

cin>>Avaliable[0]>>Avaliable[1]>>Avaliable[2];

cout<<"经修改后的系统可用资源为"<

for(intk=0;k

cout<

"<

showdata();

safe();

}

voidaddprocess(){//添加作业

intflag=M;

M=M+1;

cout<<"请输入该作业的最打需求量[Max]"<

for(inti=0;i

cout<

";

cin>>Max[flag][i];

Need[flag][i]=Max[flag][i]-Allocation[flag][i];

}

showdata();

safe();

}

intmain()//主函数

{

inti,j,number,choice,m,n,flag;

charming;

cout<<"*****************资源管理系统的设计与实现*****************"<

cout<<"请首先输入系统可供资源种类的数量:

";

cin>>n;

N=n;

for(i=0;i

{

cout<<"资源"<

";

cin>>ming;

name[i]=ming;

cout<<"资源的数量:

";

cin>>number;

Avaliable[i]=number;

}

cout<

cout<<"请输入作业的数量:

";

cin>>m;

M=m;

cout<<"请输入各进程的最大需求量("<

"<

for(i=0;i

for(j=0;j

cin>>Max[i][j];

do{

flag=0;

cout<<"请输入各进程已经申请的资源量("<

"<

for(i=0;i

for(j=0;j

cin>>Allocation[i][j];

if(Allocation[i][j]>Max[i][j])

flag=1;

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

}

if(flag)

cout<<"申请的资源大于最大需求量,请重新输入!

\n";

}

while(flag);

showdata();//显示各种资源

safe();//用银行家算法判定系统是否安全

while(choice)

{

cout<<"**************银行家算法演示***************"<

cout<<"1:

增加资源"<

cout<<"2:

删除资源"<

cout<<"3:

修改资源"<

cout<<"4:

分配资源"<

cout<<"5:

增加作业"<

cout<<"0:

离开"<

cout<<"*******************************************"<

cout<<"请选择功能号:

";

cin>>choice;

switch(choice)

{

case1:

addresources();break;

case2:

delresources();break;

case3:

changeresources();break;

case4:

share();break;

case5:

addprocess();break;

case0:

choice=0;break;

default:

cout<<"请正确选择功能号(0-5)!

"<

}

}

return1;

}

3.给出实验输入数据及运行结果。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1