首页 银行家算法

银行家算法

举报
开通vip

银行家算法银行家算法1、需求分析1)判断当前状态是否安全,如果安全给出安全序列;如果不安全给出理由。2)对于下一个时刻T1,某个进程Pk会提出请求Request(R1,…,Rm),判断分配给Pk进程请求的资源之后系统是否安全。3)输入:进程个数n,资源种类m,T0时刻各个进程的资源分配情况(可以运行输入,也可以在程序中设置);4)输出:如果安全,输出安全的进程序列,不安全则提示信息。2、概要设计1)抽象数据类型的定义/课本/P110 intAvailable[MaxNumber_line]={3,3,2}; ...

银行家算法
银行家算法1、需求分析1)判断当前状态是否安全,如果安全给出安全序列;如果不安全给出理由。2)对于下一个时刻T1,某个进程Pk会提出请求Request(R1,…,Rm),判断分配给Pk进程请求的资源之后系统是否安全。3)输入:进程个数n,资源种类m,T0时刻各个进程的资源分配情况(可以运行输入,也可以在程序中设置);4)输出:如果安全,输出安全的进程序列,不安全则提示信息。2、概要 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 1)抽象数据类型的定义/课本/P110 intAvailable[MaxNumber_line]={3,3,2}; //剩下的 intMax[MaxNumber][MaxNumber_line]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; //最大需求 intAllocation[MaxNumber][MaxNumber_line]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}}; //现在占用的 intNeed[MaxNumber][MaxNumber_line]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}}; //需要的 intRequest[MaxNumber_line]={0,0,0}; intSafeOrder[MaxNumber]; intN=5,M=3,number_finish=0;2)主程序的流程1.判断当前程序是否安全,若安全,收回已完成程序的资源并转向第2步2.输入进程Pi及该进程的资源请求数3.判断是否满足Request[I,j]<=Need[I,j],若不满足则转向第2步4.判断是否满足Request[I,j]<=Available[j],若不满足则转向第2步5.将资源分配给Pi6.重复上述1——5步骤直至给所以进程都分配完资源3、详细设计#include<iostream>usingnamespacestd;constintMaxNumber=5;constintMaxNumber_line=3;boolsafeTest(intN,intM,intAllocation[MaxNumber][MaxNumber_line],intNeed[MaxNumber][MaxNumber_line],intAvailable[MaxNumber_line],intSafeOrder[MaxNumber],int&number_finish);voidshow(intN,intM,intMax[MaxNumber][MaxNumber_line],intAllocation[MaxNumber][MaxNumber_line],intNeed[MaxNumber][MaxNumber_line],intAvailable[MaxNumber_line],intSafeOrder[MaxNumber]);boolfill_need(intn,intm,intNeed[MaxNumber][MaxNumber_line]);voidmain(void){ //P110 intAvailable[MaxNumber_line]={3,3,2}; //剩下的 intMax[MaxNumber][MaxNumber_line]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; //最大需求 intAllocation[MaxNumber][MaxNumber_line]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}}; //现在占用的 intNeed[MaxNumber][MaxNumber_line]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}}; //需要的 intRequest[MaxNumber_line]={0,0,0}; intSafeOrder[MaxNumber]; intN=5,M=3,number_finish=0; intnum=0; while(fill_need(N,M,Need)==false) { if(safeTest(N,M,Allocation,Need,Available,SafeOrder,number_finish)==false) {cout<<"该系统处于不安全状态!!!\n";break;} else { cout<<"该系统处于安全状态!!!\n"; show(N,M,Max,Allocation,Need,Available,SafeOrder); cout<<"提示输入的进程序号:"<<SafeOrder[number_finish]<<";输入的资源请求:"; for(inti=0;i<M;i++)cout<<""<<Need[SafeOrder[number_finish]][i]; cout<<"\n请输入进程序号:";cin>>num; cout<<"请输入资源请求:";for(inti=0;i<M;i++)cin>>Request[i]; boolasd=true; for(inti=0;i<M;i++) if(Request[i]>Need[num][i]) {asd=false;break;} if(asd==false) {cout<<"输入的资源请求大于所需要的资源数!!!\n";continue;} else for(inti=0;i<M;i++) if(Request[i]>Available[i]) {asd=false;break;} if(asd==false) {cout<<"系统所剩下的资源数不足!!!\n";continue;} else for(inti=0;i<M;i++) { Available[i]-=Request[i]; Allocation[num][i]+=Request[i]; Need[num][i]-=Request[i]; } inttest_need=0; for(inti=0;i<M;i++) if(Need[num][i]!=0) {test_need++;break;} if(test_need==0) //该进程资源已分配完成,现在回收 for(inti=0;i<M;i++) Available[i]+=Allocation[num][i]; } cout<<"所以程序都完成!"; } system("pause");}boolsafeTest(intN,intM,intAllocation[MaxNumber][MaxNumber_line],intNeed[MaxNumber][MaxNumber_line],intAvailable[MaxNumber_line],intSafeOrder[MaxNumber],int&number_finish){ intWork[MaxNumber];boolFinish[MaxNumber]; for(inti=0;i<N;i++) //初始化Work,Finish { Work[i]=Available[i]; Finish[i]=false; } for(intt=0;t<N;t++) //共有N个程序 { for(inti=0;i<N;i++) //检测已完成的程序 { intneeds=0; for(intj=0;j<M;j++) needs+=Need[i][j]; if(needs==0&&Finish[i]==false) {Finish[i]=true;SafeOrder[t]=i;t++;number_finish=t;}//cout<<"p"<<i<<"完成";} } inttemp=-1; //获取p[temp]another_temp: for(inti=0;i<N;i++) { temp++; if(temp==N) gotoend_test; else if(Finish[temp]==false) break; } intnumber_ok=0; for(intj=0;j<M;j++) if(Need[temp][j]>Work[j]) {number_ok++;break;} if(number_ok==0) //满足Need[i][j]<=Work[j] for(intj=0;j<M;j++) { Work[j]+=Allocation[temp][j]; Finish[temp]=true; } else gotoanother_temp; SafeOrder[t]=temp; }end_test: for(inti=0;i<N;i++) if(Finish[i]==false) returnfalse; returntrue;}boolfill_need(intn,intm,intNeed[MaxNumber][MaxNumber_line]){ for(inti=0;i<n;i++) for(intj=0;j<m;j++) if(Need[i][j]!=0) returnfalse; returntrue;}voidshow(intN,intM,intMax[MaxNumber][MaxNumber_line],intAllocation[MaxNumber][MaxNumber_line],intNeed[MaxNumber][MaxNumber_line],intAvailable[MaxNumber_line],intSafeOrder[MaxNumber]){ cout<<"进程名\t\tMax(A,B,C)\t\tAllocation(A,B,C)\tNeed(A,B,C)\tAllocation(A,B,C)\n"; for(inti=0;i<N;i++) { cout<<"P"<<SafeOrder[i]<<"\t\t"; for(intj=0;j<M;j++) cout<<Max[SafeOrder[i]][j]<<""; cout<<"\t\t"; for(intj=0;j<M;j++) cout<<Allocation[SafeOrder[i]][j]<<""; cout<<"\t\t"; for(intj=0;j<M;j++) cout<<Need[SafeOrder[i]][j]<<""; cout<<"\t\t"; if(i==0) for(intj=0;j<M;j++) cout<<Available[j]<<""; cout<<endl; }}4、调试分析5、用户使用说明1)输入进程Pi;2)输入进程Pi的请求资源数。
本文档为【银行家算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_063353
暂无简介~
格式:doc
大小:239KB
软件:Word
页数:7
分类:互联网
上传时间:2013-05-03
浏览量:22