资源描述:
《操作系统实验项目银行家算法.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验四、银行家算法(一)目的和要求银行家算法是由Dijkstra设计的最具有代表性的避免死锁的算法。本实验要求用高级语言编写一个银行家的模拟算法。通过本实验可以对预防死锁和银行家算法有更深刻的认识。(二)实验内容1、设置数据结构包括可利用资源向量(Availiable),最大需求矩阵(Max),分配矩阵(Allocation),需求矩阵(Need)2、设计安全性算法设置工作向量Work表示系统可提供进程继续运行可利用资源数目,Finish表示系统是否有足够的资源分配给进程(三)实验环境1、pc2、vc++(四
2、)、程序源代码:/*子函数声明*/intIsprocessallover();//判断系统中的进程是否全部运行完毕voidSystemstatus();//显示当前系统中的资源及进程情况intBanker(int,int*);//银行家算法voidAllow(int,int*);//若进程申请不导致死锁,用此函数分配资源voidForbidenseason(int);//若发生死锁,则显示原因/*全局变量*/intAvailiable[3]={3,3,2};//初始状态,系统可用资源量intMax[5][3]
3、={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};//各进程对各资源的最大需求量intAllocation[5][3]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};//初始状态,各进程占有资源量intNeed[5][3]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};//初始状态时,各进程运行完毕,还需要的资源量intover[5]={0,0,0,0,0};//标记对应进程是否得到所有资源并运行完
4、毕#include/*主函数*/voidmain(){intprocess=0;//发出请求的进程intdecide=0;//银行家算法的返回值intRequest[3]={0,0,0};//申请的资源量数组intsourcenum=0;//申请的各资源量/*判断系统中进程是否全部运行完毕*/step1:if(Isprocessallover()==1){cout<<"系统中全部进程运行完毕!";return;}/*显示系统当前状态*/Systemstatus();/*人机交互界面*/
5、step2:cout<<"输入发出请求的进程(输入“0”退出系统):";cin>>process;if(process==0){cout<<"放弃申请,退出系统!";return;}if(process<1
6、
7、process>5
8、
9、over[process-1]==1){cout<<"系统无此进程!";gotostep2;}cout<<"此进程申请各资源(A,B,C)数目:";for(inth=0;h<3;h++){cout<>sourcenum;Re
10、quest[h]=sourcenum;}/*用银行家算法判断是否能够进行分配*/decide=Banker(process,Request);if(decide==0){/*将此进程申请资源分配给它*/Allow(process,Request);gotostep1;}else{/*不能分配,显示原因*/Forbidenseason(decide);gotostep2;}}/*子函数Isprocessallover()的实现*/intIsprocessallover(){intprocessnum=0;for
11、(inti=0;i<5;i++){/*判断每个进程是否运行完毕*/if(over[i]==1)processnum++;}if(processnum==5)/*系统中全部进程运行完毕*/return1;elsereturn0;}/*子函数Systemstatus()的实现*/voidSystemstatus(){cout<<"此刻系统中存在的进程:";for(inti=0;i<5;i++){if(over[i]!=1)cout<<"P"<
12、用资源(单位:个):";cout<<"ABC";for(inta=0;a<3;a++){cout<