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