计算机操作系统银行家算法实验报告Word格式文档下载.docx
- 文档编号:16965334
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:7
- 大小:48.82KB
计算机操作系统银行家算法实验报告Word格式文档下载.docx
《计算机操作系统银行家算法实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机操作系统银行家算法实验报告Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。
(3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值:
Available=Available-Request[i];
Allocation=Allocation+Request;
Need=Need-Request;
(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。
3、安全性算法步骤:
(1)设置两个向量
①工作向量Work。
它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation;
②布尔向量Finish。
它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]=true。
(2)从进程集合中找到一个能满足下述条件的进程:
①Finish[i]=false
②Need<
or=Work
如找到,执行步骤(3);
否则,执行步骤(4)。
(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
Work=Work+Allocation;
Finish[i]=true;
转向步骤
(2)。
(4)如果所有进程的Finish[i]=true,则表示系统处于安全状态;
否则,系统处于不安全状态。
四.程序源代码:
#include<
stdio.h>
#defineW5//最大进程数W=5
#defineR3//最大资源总数=3
intAvailable[3];
//可利用资源向量
intMax[5][3];
//最大需求矩阵
intAllocation[5][3];
//分配矩阵
intNeed[5][3];
//需求矩阵
intRequest[3];
//进程请求向量
voiddispose()
{
printf("
请输入可利用资源向量Available(格式:
a,b,c)\n"
);
scanf("
%d,%d,%d"
&
Available[0],&
Available[1],&
Available[2]);
请输入最大需求数Max(格式:
for(intj=0;
j<
5;
j++)
printf("
进程%d:
\n"
j);
scanf("
Max[j][0],&
Max[j][1],&
Max[j][2]);
}
请输入分配数Allocation(格式:
for(j=0;
进程%d\n"
Allocation[j][0],&
Allocation[j][1],&
Allocation[j][2]);
}//输入Max[5][3],Available[5][3],Allocation[5][3]
for(inti=0;
i<
3;
i++)
Need[j][i]=Max[j][i]-Allocation[j][i];
//求出Need[5][3]
main()
银行家算法\n"
dispose();
安全性检查\n"
intWork[3];
//系统可提供进程继续运行所需的各类资源数
charFinish[5];
//表示系统是否有足够的资源分配
Finish[i]='
f'
;
for(intk=0;
k<
k++)
Work[k]=Available[k];
intq[5];
for(intx=0;
x<
50;
x++)
请输入一个序列:
%d,%d,%d,%d,%d"
q[0],&
q[1],&
q[2],&
q[3],&
q[4]);
for(i=0;
if((Need[q[i]][0]<
=Work[0])&
&
(Need[q[i]][1]<
=Work[1])&
(Need[q[i]][2]<
=Work[2]))//比较Need[i][j]与Work[j]
{
for(k=0;
Work[k]=Work[k]+Allocation[q[i]][k];
Finish[i]='
t'
}
if((Finish[0]=='
)&
(Finish[1]=='
(Finish[2]=='
(Finish[3]=='
(Finish[4]=='
))//通过Finish[i]判断系统是否安全
break;
else
printf("
此序列不是安全序列,请重新输入一个序列!
if(x==49)
return0;
这个系统安全!
inta;
请输入Request进程:
%d"
a);
该进程Request(a,b,c)\n"
Request[0],&
Request[1],&
Request[2]);
//输入请求量Request[3]
if((Request[0]<
=Need[a][0])&
(Request[1]<
=Need[a][1])&
(Request[2]<
=Need[a][2]))//判断Request[i]<
=Need[a][i]
if((Request[0]<
(Request[0]<
=Available[a][i]
for(intk=0;
{
Available[k]=Available[k]-Request[k];
Allocation[a][k]=Allocation[a][k]+Request[k];
Need[a][k]=Need[a][k]-Request[k];
//如果上述判断成功,则修改相应的Available[k],Allocation[a][k],Need[a][k]
}
资源分配成功!
else
printf("
资源分配失败!
return0;
else
return0;
程序截图:
五.实验总结
多个进程同时运行时,系统根据各类系统资源的最大需求和各类系统的剩余资源为进程安排安全序列,使得系统能快速且安全地运行进程,不至发生死锁。
银行家算法是避免死锁的主要方法,其思路在很多方面都非常值得我们来学习借鉴。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 操作系统 银行家 算法 实验 报告