银行家算法c++语言流程图代码全Word文件下载.docx
- 文档编号:22505775
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:16
- 大小:218.57KB
银行家算法c++语言流程图代码全Word文件下载.docx
《银行家算法c++语言流程图代码全Word文件下载.docx》由会员分享,可在线阅读,更多相关《银行家算法c++语言流程图代码全Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
m的矩阵,用以表示每个进程还需要的各类资源的数目。
如果Need(i,j)=k,表示进程i还需要j类资源k个,才能完成其任务。
Needi表示进程i的需求向量,由矩阵Need的第i行构成。
5)上述三个矩阵间存在关系:
Need(i,j)=Max(i,j)-Allocation(i,j);
3.银行家算法
设Request[i]是进程i的请求向量,如果Request[i,j]=K,表示进程i需要K个j类型的资源。
当i发出资源请求后,系统按下述步骤进行检查:
1)如果Requesti≤Need,则转向步骤2;
否则,认为出错,因为它所请求的资源数已超过它当前的最大需求量。
2)如果Requesti≤Available,则转向步骤3;
否则,表示系统中尚无足够的资源满足i的申请,i必须等待。
3)系统试探性地把资源分配给进程i,并修改下面数据结构中的数值:
Available=Available-Requesti
Allocationi=Allocationi+Requesti
Needi=Needi-Requesti
4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。
如果安全才正式将资源分配给进程i,以完成本次分配;
否则,将试探分配作废,恢复原来的资源分配状态,让进程i等待。
四、实验代码以及运行示例
1.源代码:
#include<
iostream>
string.h>
stdio.h>
#defineFalse0
#defineTrue1
usingnamespacestd;
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;
//进程的最大数为
intN=100;
//资源的最大数为
voidshowdata()//显示资源矩阵
{
inti,j;
cout<
<
"
系统目前可用的资源[Avaliable]:
endl;
for(i=0;
i<
N;
i++)
name[i]<
"
;
for(j=0;
j<
j++)
Avaliable[j]<
//输出分配资源
MaxAllocationNeed"
进程名"
for(j=0;
3;
j++){
for(i=0;
cout<
cout<
}
M;
i++){
for(j=0;
Max[i][j]<
Allocation[i][j]<
Need[i][j]<
}
intchangdata(inti)//进行资源分配
{
intj;
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};
intflag=0;
Work[0]=Avaliable[0];
Work[1]=Avaliable[1];
Work[2]=Avaliable[2];
i++){
apply=0;
if(Finish[i]==False&
&
=Work[j]){
apply++;
if(apply==N){
for(m=0;
m<
m++)
Work[m]=Work[m]+Allocation[i][m];
//变分配数
Finish[i]=True;
temp[k]=i;
i=-1;
k++;
flag++;
}
}
}
if(Finish[i]==False){
系统不安全"
//不成功系统不安全
return-1;
系统是安全的!
//如果安全,输出成功
分配的序列:
i++){//输出运行进程数组
temp[i];
if(i<
M-1)cout<
->
return0;
voidshare()//利用银行家算法对申请资源对进行判定
charch;
inti=0,j=0;
ch='
y'
请输入要求分配的资源进程号(0-"
M-1<
):
cin>
>
i;
//输入须申请的资源号
请输入进程"
申请的资源:
{
name[j]<
:
cin>
Request[j];
//输入需要申请的资源
if(Request[j]>
Need[i][j])//判断申请是否大于需求,若大于则出错
{
进程"
申请的资源大于它需要的资源"
分配不合理,不予分配!
ch='
n'
break;
else{
if(Request[j]>
Avaliable[j])//判断申请是否大于当前资源,若大于则
{//出错
cout<
申请的资源大于系统现在可利用的资源"
分配出错,不予分配!
ch='
break;
if(ch=='
){
changdata(i);
//根据进程需求量变换资源
showdata();
//根据进程需求量显示变换后的资源
safe();
//根据进程需求量进行银行家算法判断
voidaddresources(){//添加资源
intn,flag;
请输入需要添加资源种类的数量:
n;
flag=N;
N=N+n;
for(inti=0;
名称:
name[flag];
数量:
Avaliable[flag++];
showdata();
safe();
voiddelresources(){//删除资源
charming;
inti,flag=1;
请输入需要删除的资源名称:
do{
ming;
if(ming==name[i]){
flag=0;
if(i==N)
该资源名称不存在,请重新输入:
while(flag);
for(intj=i;
N-1;
name[j]=name[j+1];
Avaliable[j]=Avaliable[j+1];
N=N-1;
voidchangeresources(){//修改资源函数
Avaliable[i]<
输入系统可用资源[Avaliable]:
Avaliable[0]>
Avaliable[1]>
Avaliable[2];
经修改后的系统可用资源为"
for(intk=0;
k<
k++)
name[k]<
Avaliable[k]<
voidaddprocess(){//添加作业
intflag=M;
M=M+1;
请输入该作业的最大需求量[Max]"
Max[flag][i];
Need[flag][i]=Max[flag][i]-Allocation[flag][i];
intmain()//主函数
inti,j,number,choice,m,n,flag;
\t---------------------------------------------------"
\t||||"
\t||银行家算法的实现||"
\t||08软工何丽茗||"
\t||20081344066||"
请首先输入系统可供资源种类的数量:
N=n;
资源"
i+1<
的名称:
name[i]=ming;
资源的数量:
number;
Avaliable[i]=number;
请输入作业的数量:
m;
M=m;
请输入各进程的最大需求量("
*"
n<
矩阵)[Max]:
cin>
Max[i][j];
flag=0;
请输入各进程已经申请的资源量("
矩阵)[Allocation]:
Allocation[i][j];
if(Allocation[i][j]>
Max[i][j])flag=1;
Need[i][j]=Max[i][j]-Allocation[i][j];
if(flag)
申请的资源大于最大需求量,请重新输入!
\n"
//显示各种资源
//用银行家算法判定系统是否安全
while(choice)
\t-------------------银行家算法演示------------------"
1:
增加资源"
2:
删除资源"
3:
修改资源"
4:
分配资源"
5:
增加作业"
0:
离开"
请选择功能号:
choice;
switch(choice)
{
case1:
addresources();
break;
case2:
delresources();
case3:
changeresources();
case4:
share();
case5:
addprocess();
case0:
choice=0;
default:
请正确选择功能号(0-5)!
2.运行结果:
1)初始化状态:
2)为进程0分配资源:
3)为进程4分配资源:
五、实验总结
本程序的设计实现主要是用C++语言。
程序设计过程中开始遇到的最大的问题是算法的结构设计问题,课本上只给了设计要求及简单的算法,要真正实现还需要考虑很多方面。
在程序设计中先后参考了很多网络资料,也参考了一些别人写的的程序,让我彻底认识到自己的不足,也同时从中学到了更多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行家 算法 c+ 语言 流程图 代码