银行家算法.docx
- 文档编号:8189209
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:13
- 大小:83.07KB
银行家算法.docx
《银行家算法.docx》由会员分享,可在线阅读,更多相关《银行家算法.docx(13页珍藏版)》请在冰豆网上搜索。
银行家算法
淮海工学院计算机工程学院
实验报告书
课程名:
《操作系统》
题目:
银行家算法模拟实验
班级:
学号:
姓名:
一、实验目的与要求
1.目的:
用C、C++或Java语言编写一个简单的银行家算法模拟程序,用银行家算法实现资源分配。
本实验可加深对行家算法的理解。
2.要求:
设计五个进程{P0,P1,P2,P3,P4}共享三类资源{A,B,C}的系统,{A,B,C}的资源数量分别为10,5,7。
进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。
要求程序具有显示和打印各进程的某一时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源号以及为某进程分配资源后的有关资源数据的情况。
二、程序流程图
三、主要程序清单
#include
#include
#include
#include
usingnamespacestd;
#defineM3
#defineN5
//m资源总量
staticintTotal[M]={10,5,7};
//m资源可分配量
staticintAvailable[M];
//进程n对m资源的最大需求量
staticintMax[N][M]=
{
{7,5,3},
{3,2,2},
{9,0,2},
{2,2,2},
{4,3,3}
};
//进程n已分配m资源量
staticintAllocation[N][M]=
{
{0,1,0},
{2,0,0},
{3,0,2},
{2,1,1},
{0,0,2}
};
//进程n还需m资源量
staticintNeed[N][M];
//进程的执行序号序列
staticintSecureSequence[N];
//系统可提供给进程继续运行所需的m资源量
staticintWork[M];
//系统是否有足够资源分配给进程n
staticboolFinish[N];
staticvoidsetAllUnfinished()
{
for(inti=0;i { Finish[i]=false; } } staticvoidinitializeSecureSequence() { for(inti=0;i { SecureSequence[i]=-1; } } staticvoidcountNeed() { for(inti=0;i { for(intj=0;j { Need[i][j]=Max[i][j]-Allocation[i][j]; } } } staticvoidcountAvailable() { inttemp; for(intj=0;j { temp=0; for(inti=0;i { temp+=Allocation[i][j]; } Available[j]=Total[j]-temp; } } staticvoidaddSecureSequence(intn) { inti=0; while(i =-1) { i++; } if(i { SecureSequence[i]=n; } } stringto_string(inti) { stringstreamints; stringtemps; ints< ints>>temps;//int转换为string returntemps; } stringtemps; intSecurityAlgorithm(intPi); stringBankersAlgorithm(intPi,constint(&Request)[M]) { intj; for(j=0;j { if(Request[j]>Need[Pi][j]) { return"出错! 请求资源量大于预计最大值! "; } if(Request[j]>Available[j]) { return"出错! 尚无足够资源! "; } } for(j=0;j { Available[j]-=Request[j]; Allocation[Pi][j]+=Request[j]; Need[Pi][j]-=Request[j]; } if(SecurityAlgorithm(Pi)==1) { return"进程"+to_string(Pi)+"请求资源成功! "; } elseif(SecurityAlgorithm(Pi)==0) { return"所有进程均已执行结束进程! "; } else//检查结果为不安全时回滚 { for(j=0;j { Available[j]+=Request[j]; Allocation[Pi][j]-=Request[j]; Need[Pi][j]+=Request[j]; } return"若为进程"+to_string(Pi)+"分配资源,则系统处于不安全状态,令"+to_string(Pi)+"等待"; } return"unknownerrorfromBankersAlgorithm! Pi="+Pi; } intSecurityAlgorithm(intPi)//检查对Pi进程分配资源后是否还有完整安全序列 { inti,j,tempi; booltempb; for(intk=0;k { Work[k]=Available[k]; } tempi=0; for(i=0;i { tempb=false; if(Finish[i]==false) { for(j=0;j { if(Need[i][j]<=Work[j]) { tempb=true; } else { tempb=false; break; } } if(tempb==true) //如果Pi进程分配资源后仍有安全进程,表明Pi可以执行完,返还Pi已分配资源并将Pi进程加入完成序列,返回1 { for(intk=0;k { Available[k]+=Allocation[Pi][k]; } Finish[Pi]=true; addSecureSequence(Pi); return1; } } else { tempi++; } } if(tempi==N)//所有进程Finish==true { return0; } return-1; } voidoutput(intPi)//输出资源分配情况 { inti,j; cout< for(i=0;i<4;i++) { cout<<""; for(j=0;j cout< } cout< for(j=0;j cout< cout<<""; for(j=0;j cout< cout<<""; for(j=0;j cout< cout<<""; for(j=0;j cout< cout< } voidoutputAll() { inti,j; cout< for(i=0;i<3;i++) { cout<<""; for(j=0;j cout< } for(i=0;i { cout< for(j=0;j cout< cout<<""; for(j=0;j cout< cout<<""; for(j=0;j cout< cout<<""; } } intmain() { countAvailable(); countNeed(); initializeSecureSequence(); setAllUnfinished(); cout<<"整体资源如下: "< outputAll(); inti; intPi; intRequest[M]; cout<<"\n\nAvailable: "; for(i=0;i { cout<<""+to_string(Available[i]); } cout<<"\n\n请输入要分配资源的进程号: "; cin>>Pi; for(i=0;i { cout<<"请输入进程对资源"+to_string(i)+"的需求数目: "; cin>>Request[i]; } cout<<"\n尝试为进程"+to_string(Pi)+"分配资源"< output(Pi); cout< for(i=0;SecureSequence[N-1]==-1&&i { Pi=i%N; if(Finish[Pi]==false) { cout<<"\n尝试为进程"+to_string(Pi)+"分配资源"< output(Pi); cout< } } cout<<"\n存在安全序列"; for(i=0;i { cout<<"->"+to_string(SecureSequence[i]); } cout<<"\n程序即将退出,"; system("pause"); return0; } 四、程序运行结果 五、实验体会 通过本次实验,让我更加了解了银行家算法的过程。 即多个进程同时运行时,系统会根据各类系统资源的最大需求和各类系统剩余资源为进程安排安全序列,使得系统能快速且安全地运行进程,从而不至于发生死锁。 而银行家算法是避免死锁的主要方法,其思路在很多方面是值得我们大家所学习的。 上机实验是对我们课堂上理论知识的巩固和加深,当然只有上课认真听讲,弄懂其算法,才能在实践的过程中加以应用。 上机练习还能提高我们的编程能力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行家 算法