实验七银行家算法的仿真Word文件下载.docx
- 文档编号:14068344
- 上传时间:2022-10-17
- 格式:DOCX
- 页数:8
- 大小:16.11KB
实验七银行家算法的仿真Word文件下载.docx
《实验七银行家算法的仿真Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验七银行家算法的仿真Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
若是,才分配。
它是最具有代表性的避免死锁的算法。
设进程cusneed提出请求REQUEST[i],则银行家算法按如下规则进行判断。
(1)如果REQUEST[cusneed][i]<
=NEED[cusneed][i],则转
(2);
否则,出错。
(2)如果REQUEST[cusneed][i]<
=AVAILABLE[cusneed][i],则转(3);
(3)系统试探分配资源,修改相关数据:
AVAILABLE[i]-=REQUEST[cusneed][i];
ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];
NEED[cusneed][i]-=REQUEST[cusneed][i];
(4)系统执行安全性检查,如安全,则分配成立;
否则试探险性分配作废,系统恢复原状,进程等待。
3)安全性检查算法
(1)设置两个工作向量Work=AVAILABLE;
FINISH
(2)从进程集合中找到一个满足下述条件的进程,
FINISH==false;
NEED<
=Work;
如找到,执行(3);
否则,执行(4)
(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。
Work+=ALLOCATION;
Finish=true;
GOTO2
(4)如所有的进程Finish=true,则表示安全;
否则系统不安全。
4.画出程序流程图,给出相关数据结构及说明。
5.参考代码
#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();
voidmain()
{
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;
.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 银行家 算法 仿真