银行家算法实现资源分配培训资料Word文档格式.docx
- 文档编号:20577940
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:12
- 大小:238.80KB
银行家算法实现资源分配培训资料Word文档格式.docx
《银行家算法实现资源分配培训资料Word文档格式.docx》由会员分享,可在线阅读,更多相关《银行家算法实现资源分配培训资料Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
四、实验步骤:
数据结构:
1.可利用资源向量Available
2.最大需求矩阵Max
3.分配矩阵Allocation
4.需求矩阵Need
功能介绍:
模拟实现Dijkstra的银行家算法以避免死锁的出现.分两部分组成:
第一部分:
银行家算法(扫描)
1.如果Request<
=Need,则转向2;
否则,出错
2.如果Request<
=Available,则转向3,否则等待
3.系统试探分配请求的资源给进程
4.系统执行安全性算法
第二部分:
安全性算法
1.设置两个向量
(1).工作向量:
Work=Available(表示系统可提供给进程继续运行所需要的各类资源数目)
(2).Finish:
表示系统是否有足够资源分配给进程(True:
有;
False:
没有).初始化为False
2.若Finish[i]=False&
&
Need<
=Work,则执行3;
否则执行4(I为资源类别)
3.进程P获得第i类资源,则顺利执行直至完成!
并释放资源:
Work=Work+Allocation;
Finish[i]=true;
转2
4.
若所有进程的Finish[i]=true,则表示系统安全;
否则,不安全!
五.程序清单:
编写代码如下:
#include<
iostream.h>
iomanip.h>
#defineM5/*M个进程,N个资源*/
#defineN3
intAVAILABLE[N];
/*可用资源数组*/
intMAX[M][N];
/*最大需求矩阵*/
intALLOCATION[M][N];
/*分配矩阵*/
intNEED[M][N];
/*需求矩阵*/
intREQUEST[M][N];
/*进程需要资源数*/
boolFINISH[M];
/*系统是否有足够的资源分配*/
intp[M];
/*记录序列*/
voidInit();
boolSafe();
voidBanker();
voidOutput();
voidmain()
{
Init();
Safe();
Banker();
}
voidInit()/*初始化算法*/
inti,j;
cout<
<
"
请输入每个进程最多所需的各资源数,按照"
M<
x"
N<
矩阵输入:
endl;
for(i=0;
i<
M;
i++)
for(j=0;
j<
N;
j++)
cin>
>
MAX[i][j];
cout<
请输入每个进程已分配的各资源数,按照"
for(i=0;
{
for(j=0;
{
cin>
ALLOCATION[i][j];
NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];
if(NEED[i][j]<
0)
{
cout<
您输入的第"
i+1<
个进程所拥有的第"
j+1<
个资源数错误,请重新输入:
j--;
continue;
}
}
}
请输入各个资源现有的数目:
AVAILABLE[i];
voidBanker()/*银行家算法*/
inti,pneed;
charflag;
while
(1)
{
请输入要申请资源的进程号(注:
第1个进程号为0,依次类推)"
cin>
pneed;
请输入进程所请求的各资源的数量"
REQUEST[pneed][i];
}
if(REQUEST[pneed][i]>
NEED[pneed][i])
您输入的对"
进程的请求数超过进程的需求量!
请重新输入!
continue;
AVAILABLE[i])
进程的请求数超过系统有的资源数!
AVAILABLE[i]-=REQUEST[pneed][i];
ALLOCATION[pneed][i]+=REQUEST[pneed][i];
NEED[pneed][i]-=REQUEST[pneed][i];
if(Safe())
同意分配请求!
else
您的请求被拒绝!
AVAILABLE[i]+=REQUEST[pneed][i];
ALLOCATION[pneed][i]-=REQUEST[pneed][i];
NEED[pneed][i]+=REQUEST[pneed][i];
FINISH[i]=false;
您还想再次请求分配吗?
是请按y/Y,否请按其它键"
flag;
if(flag=='
y'
||flag=='
Y'
)
break;
voidOutput()/*输出*/
资源分配表:
endl<
进程名MaxAllocationNeedAvailable"
for(i=0;
P"
:
"
;
for(j=0;
cout<
setw
(2)<
MAX[i][j]<
ALLOCATION[i][j]<
NEED[i][j]<
if(i==0)
for(j=0;
cout<
AVAILABLE[j]<
boolSafe()/*安全性算法*/
inti,j,k,l=0;
intWork[N];
/*工作数组*/
Work[i]=AVAILABLE[i];
}
安全性:
进程名WorkNeedAllocationW+AFinish"
{
if(FINISH[i]==true)
for(j=0;
if(NEED[i][j]>
Work[j])
if(j==N)
FINISH[i]=true;
for(intz=0;
z<
z++)
Work[z]<
for(z=0;
NEED[i][z]<
ALLOCATION[i][z]<
for(k=0;
k<
k++)
Work[k]+=ALLOCATION[i][k];
true"
p[l++]=i;
i=-1;
if(l==M)
系统是安全的!
安全序列:
l;
p[i];
if(i!
=l-1)
->
Output();
returntrue;
系统是不安全的!
Output();
returnfalse;
}
六.实验结果分析:
七.总结
通过本次试验熟练地掌握了利用高级语言C语言编写和调试一个动态分配资源的简单程序,实现了避免死锁的银行家算法。
通过编程实现银行家算法来预防死锁,清楚地了解了安全性算法的相关内容,加深了对课堂上所讲内容的理解。
银行家算法确实能保证系统时时刻刻都处于安全状态,但它要不断检测每个进程对各类资源的占用和申请情况,需花费较多的时间。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行家 算法 实现 资源 分配 培训资料