#include<iostream> using namespace std; int avaResour[3]={3,3,2}; int allocation[5][3]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}}; int maxRequest[5][3]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; int nneed[5][3]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}}; void rrequest(); bool safeTest(); int main() { rrequest(); return 0; } void rrequest() { int sqjc=0,i=0,l=0,a=0,b=0,c=0; char contn=0; cout<<endl<<"进程个数:5 资源个数:3"<<endl<<"可用资源向量Available:"<<endl; for(i=0;i<3;i++) cout<<avaResour[i]<<" "; cout<<endl<<"最大需求矩阵Max:"<<endl; for(i=0;i<5;i++) { for(l=0;l<3;l++) cout<<maxRequest[i][l]<<" "; cout<<endl; } cout<<"已分配矩阵Allocation:"<<endl; for(i=0;i<5;i++) { for(l=0;l<3;l++) cout<<allocation[i][l]<<" "; cout<<endl; } cout<<"需求矩阵Need:"<<endl; for(i=0;i<5;i++) { for(l=0;l<3;l++) cout<<nneed[i][l]<<" "; cout<<endl; } cout<<"输入发起请求的进程(0-4): "; cin>>sqjc; while(sqjc>4||sqjc<0) { cout<<endl<<"不要乱输! ^_^"<<endl; cout<<endl<<"输入发起请求的进程(0-4): "; cin>>sqjc; } cout<<"输入请求资源的数目,按照这样的格式输入 x x x: "; cin>>a>>b>>c; if(a<=nneed[sqjc][0] && b<=nneed[sqjc][1] && c<=nneed[sqjc][2]) { cout<<endl<<"开始执行银行家算法..."<<endl; if(a<=avaResour[0] && b<=avaResour[1] && c<=avaResour[2]) { avaResour[0]=avaResour[0]-a; avaResour[1]=avaResour[1]-b; avaResour[2]=avaResour[2]-c; allocation[sqjc][0]=allocation[sqjc][0]+a; allocation[sqjc][1]=allocation[sqjc][1]+b; allocation[sqjc][2]=allocation[sqjc][2]+c; nneed[sqjc][0]=nneed[sqjc][0]-a; nneed[sqjc][1]=nneed[sqjc][1]-b; nneed[sqjc][2]=nneed[sqjc][2]-c; cout<<endl<<"试分配完成..."<<endl; if(safeTest()) { cout<<endl<<"开始给第"<<sqjc<<"个进程分配资源..."<<endl <<"分配完成,已更新Allocation_list.txt"<<endl; for(i=0;i<5;i++) if(nneed[i][0]==0 && nneed[i][1]==0 && nneed[i][2]==0) for(l=0;l<3;l++) { avaResour[l]=avaResour[l]+allocation[i][l]; allocation[i][l]=0; } } else { cout<<endl<<"系统已恢复试分配前状态。"<<endl; avaResour[0]=avaResour[0]+a; avaResour[1]=avaResour[1]+b; avaResour[2]=avaResour[2]+c; allocation[sqjc][0]=allocation[sqjc][0]-a; allocation[sqjc][1]=allocation[sqjc][1]-b; allocation[sqjc][2]=allocation[sqjc][2]-c; nneed[sqjc][0]=nneed[sqjc][0]+a; nneed[sqjc][1]=nneed[sqjc][1]+b; nneed[sqjc][2]=nneed[sqjc][2]+c; } } else cout<<endl<<"试分配失败,系统无足够资源"<<endl; } else cout<<endl<<"Error!申请的资源大于需求值"<<endl; xz: cout<<"\n\n"<<"要继续吗?(y-继续;n-终止):"; cin>>contn; switch(contn) { case 'y':rrequest(); case 'n':break; default:cout<<"亲,不要乱输哦"<<endl; goto xz;break; } } bool safeTest() { int s=0,m=0,z=0,r[5]={0},y=0,wwork[3]={0}; bool ffinish[5]={0}; cout<<endl<<"进入安全性测试!"<<endl; for(s=0;s<3;s++) wwork[s]=avaResour[s]; for(z=0;z<5;z++) { for(s=0;s<5;s++) if(ffinish[s]==0 && nneed[s][0]<=wwork[0] && nneed[s][1]<=wwork[1] && nneed[s][2]<=wwork[2]) { for(m=0;m<3;m++) wwork[m]=wwork[m]+allocation[s][m]; ffinish[s]=1; r[y]=s; y++; } } if(y==5) { cout<<endl<<"找到一个安全序列:"; for(s=0;s<2;s++) cout<<"P"<<r[2*s]<<"--->"<<"P"<<r[2*s+1]<<"--->"; cout<<"P"<<r[4]<<endl<<"已通过安全检测!"<<endl; return 1; } cout<<endl<<"没有找到安全序列!"<<endl<<"安全测试失败。"<<endl; return 0; }