实验四银行家算法的实现Word格式.docx

上传人:b****6 文档编号:20852715 上传时间:2023-01-26 格式:DOCX 页数:8 大小:74.09KB
下载 相关 举报
实验四银行家算法的实现Word格式.docx_第1页
第1页 / 共8页
实验四银行家算法的实现Word格式.docx_第2页
第2页 / 共8页
实验四银行家算法的实现Word格式.docx_第3页
第3页 / 共8页
实验四银行家算法的实现Word格式.docx_第4页
第4页 / 共8页
实验四银行家算法的实现Word格式.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

实验四银行家算法的实现Word格式.docx

《实验四银行家算法的实现Word格式.docx》由会员分享,可在线阅读,更多相关《实验四银行家算法的实现Word格式.docx(8页珍藏版)》请在冰豆网上搜索。

实验四银行家算法的实现Word格式.docx

AVAILABLE[i]-=REQUEST[cusneed][i];

ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];

NEED[cusneed][i]-=REQUEST[cusneed][i];

(4)系统执行安全性检查,如安全,则分配成立;

否则试探险性分配作废,系统恢复原状,进程等待。

三、安全性检查算法

(1)设置两个工作向量Work=AVAILABLE;

FINISH

(2)从进程集合中找到一个满足下述条件的进程,

FINISH==false;

NEED<

=Work;

如找到,执行(3);

否则,执行(4)

(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。

Work+=ALLOCATION;

Finish=true;

GOTO2

(4)如所有的进程Finish=true,则表示安全;

否则系统不安全。

各算法流程图

初始化算法流程图:

银行家算法流程图:

安全性算法流程图:

源程序清单

#include<

iostream>

usingnamespacestd;

#defineMAXPROCESS50 

/*最大进程数*/

#defineMAXRESOURCE100 

/*最大资源数*/

intAVAILABLE[MAXRESOURCE];

/*可用资源数组*/

intMAX[MAXPROCESS][MAXRESOURCE];

/*最大需求矩阵*/

intALLOCATION[MAXPROCESS][MAXRESOURCE];

/*分配矩阵*/

intNEED[MAXPROCESS][MAXRESOURCE];

/*需求矩阵*/

intREQUEST[MAXPROCESS][MAXRESOURCE];

/*进程需要资源数*/

boolFINISH[MAXPROCESS];

/*系统是否有足够的资源分配*/

intp[MAXPROCESS];

/*记录序列*/

intm,n;

/*m个进程,n个资源*/

voidInit();

boolSafe();

voidBank();

intmain()

{

Init();

Safe();

Bank();

}

voidInit() 

/*初始化算法*/

inti,j;

cout<

<

"

请输入进程的数目:

;

cin>

>

m;

请输入资源的种类:

n;

请输入每个进程最多所需的各资源数,按照"

m<

x"

n<

矩阵输入"

endl;

for(i=0;

i<

i++)

for(j=0;

j<

j++)

MAX[i][j];

请输入每个进程已分配的各资源数,也按照"

{

ALLOCATION[i][j];

NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];

if(NEED[i][j]<

0)

您输入的第"

i+1<

个进程所拥有的第"

j+1<

个资源数错误,请重新输入:

j--;

continue;

}

请输入各个资源现有的数目:

AVAILABLE[i];

voidBank() 

/*银行家算法*/

inti,cusneed;

charagain;

while

(1)

请输入要申请资源的进程号(注:

第1个进程号为0,依次类推)"

cusneed;

请输入进程所请求的各资源的数量"

REQUEST[cusneed][i];

if(REQUEST[cusneed][i]>

NEED[cusneed][i])

您输入的请求数超过进程的需求量!

请重新输入!

AVAILABLE[i])

您输入的请求数超过系统有的资源数!

if(Safe())

同意分配请求!

else

您的请求被拒绝!

AVAILABLE[i]+=REQUEST[cusneed][i];

ALLOCATION[cusneed][i]-=REQUEST[cusneed][i];

NEED[cusneed][i]+=REQUEST[cusneed][i];

FINISH[i]=false;

您还想再次请求分配吗?

是请按y/Y,否请按其它键"

again;

if(again=='

y'

||again=='

Y'

break;

boolSafe() 

/*安全性算法*/

inti,j,k,l=0;

intWork[MAXRESOURCE];

/*工作数组*/

Work[i]=AVAILABLE[i];

if(FINISH[i]==true)

if(NEED[i][j]>

Work[j])

if(j==n)

{

FINISH[i]=true;

for(k=0;

k<

k++)

Work[k]+=ALLOCATION[i][k];

p[l++]=i;

i=-1;

if(l==m)

系统是安全的"

安全序列:

l;

p[i];

if(i!

=l-1)

-->

returntrue;

系统是不安全的"

returnfalse;

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

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

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

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