银行家算法c语言流程图Word文档格式.docx

上传人:b****5 文档编号:16559342 上传时间:2022-11-24 格式:DOCX 页数:15 大小:233.26KB
下载 相关 举报
银行家算法c语言流程图Word文档格式.docx_第1页
第1页 / 共15页
银行家算法c语言流程图Word文档格式.docx_第2页
第2页 / 共15页
银行家算法c语言流程图Word文档格式.docx_第3页
第3页 / 共15页
银行家算法c语言流程图Word文档格式.docx_第4页
第4页 / 共15页
银行家算法c语言流程图Word文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

银行家算法c语言流程图Word文档格式.docx

《银行家算法c语言流程图Word文档格式.docx》由会员分享,可在线阅读,更多相关《银行家算法c语言流程图Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

银行家算法c语言流程图Word文档格式.docx

否则,认为出错,因为它所请求的资源数已超过它当前的最大需求量。

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++语言。

程序设计过程中开始遇到的最大的问题是算法的结构设计问题,课本上只给了设计要求及简单的算法,要真正实现还需要考虑很多方面。

在程序设计中先后参考了很多网络资料,也参考了一些别人写的的程序,让我彻底认识到自己的不足,也同时从中学到了更多。

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

当前位置:首页 > 高等教育 > 教育学

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

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