您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 操作系统 银行家算法
淮海工学院计算机工程学院实验报告书课程名:《计算机操作系统》题目:实验二银行家算法班级:^^姓名:^^评语:成绩:指导教师:批阅时间:年月日《UML理论与实践》实验报告-1-实验二银行家算法实验目的和要求应用银行家算法验证进程安全性检查及分配资源编制模拟银行家算法的程序,并以以下例子验证程序的正确性。实验环境1.PC微机。2.Windows操作系统。3.C/C++/VB开发集成环境。实验学时2学时,必做实验实验内容和步骤1)根据算法流程图编制可执行程序2)用以下两个例子验证程序的正确性。3)按照上述两个例子,输出执行的结果。算法流程图银行家算法:安全性算法:【例1】某系统有A、B、C、D这4类资源供5个进程共享,进程对资源的需求和分配情况如下表所示。现在系统中A、B、C、D类资源分别还剩1、5、2、0个,请按银行家算法回答下列问题:进程已占资源最大需求数ABCDABCDP100120012P210001750P313542356P406320652P500140656(1)现在系统是否处于安全状态?(2)如果现在进程P2提出需要(0,4,2,0)个资源的请求,系统能否满足它的请求?《UML理论与实践》实验报告-2-【例2】用银行家算法考虑下列系统状态:进程分配矩阵最大需求矩阵资源总数矩阵A301141116342B01000212C11104210D11011111E00002110问系统是否安全?若进程B请求(0,0,1,0),可否立即分配?此后进程E也请求(0,0,1,0),可否分配给它?通过运行程序发现,例1当中的系统处于不安全状态,进程P2提出的请求无法实现;例2当中的系统处于安全状态,进程B提出的请求能实现,此后进程E的请求也能实现。源代码#includeiostream#defineN20#defineM20usingnamespacestd;intf(inta[N][M],intb[N][M],intm,intk){intj;for(j=0;jm;j++)if(a[k-1][j]b[k-1][j])return0;return1;}intg(inta[N][M],intb[],intm,intk){intj;for(j=0;jm;j++)if(a[k][j]b[j])return0;return1;}inth(inta[],intn){for(inti=0;in;i++)if(!a[i])return0;return1;}intp(inta[],intb[N][M],intm,intk){《UML理论与实践》实验报告-3-intj;for(j=0;jm;j++)if(a[j]b[k-1][j])return0;return1;}intq(inta[],intb[],intm){intj;for(j=0;jm;j++)if(a[j]b[j])return0;return1;}intsafe(intFinish[N],intWork[M],intNeed[N][M],intAllocation[N][M],intn,intm){inti,j,k;intt[N];for(i=0;in;i++)t[i]=1;cout安全性检查!endl;for(i=0;in;)//首先找到一个满足条件的进程{if((Finish[i]==0)&&g(Need,Work,m,i)){k=i;t[i]=0;coutp(k+1):endl;coutWork[m]:;for(j=0;jm;j++){coutWork[j];Work[j]=Work[j]+Allocation[i][j];Finish[i]=1;}coutendl;coutNeed[m]:;for(j=0;jm;j++)coutNeed[i][j];coutendl;coutAllocation[m]:;for(j=0;jm;j++)coutAllocation[i][j];coutendl;cout(Work+Allocation)[m]:;for(j=0;jm;j++)coutWork[j];coutendl;coutFinish[k+1]:;《UML理论与实践》实验报告-4-coutFinish[i];coutendl;break;}else{i++;}}if(g(Need,Work,m,k))//依次找到满足条件的后面几个进程{for(i=0;in;i++){if(t[i]){if(g(Need,Work,m,i)){coutp(i+1):endl;coutWork[m]:;for(j=0;jm;j++){coutWork[j];Work[j]=Work[j]+Allocation[i][j];Finish[i]=1;}coutendl;coutNeed[m]:;for(j=0;jm;j++)coutNeed[i][j];coutendl;coutAllocation[m]:;for(j=0;jm;j++)coutAllocation[i][j];coutendl;cout(Work+Allocation)[m]:;for(j=0;jm;j++)coutWork[j];coutendl;coutFinish[i+1]:;coutFinish[i];coutendl;t[i]=0;}}}}《UML理论与实践》实验报告-5-else{return0;}if(h(Finish,n))return1;//系统处于安全状态elsereturn0;//系统处于不安全状态}voidr(intFinish[N],intWork[M],intAvailable[M],intNeed[N][M],intAllocation[N][M],intMax[N][M],intn,intm){intRequest[M];charb;inti,j,k;cout\n要申请资源,请按'y'或'Y',否则按'n'或'N'endl;//是立即进行安全性检查,还是进行资源申请cinb;if(b!='y'&&b!='Y'){if(safe(Finish,Work,Need,Allocation,n,m)){cout此时刻系统安全!\n;}else{cout此时刻系统不安全!\n;}}else{{cout\n请输入申请资源的进程编号(1,2,…,n):endl;cink;while(kn){cout您输入了错误的进程号,请核查后重新输入:endl;cink;}cout\n请输入进程p(k)申请各类资源的数量:endl;for(j=0;jm;j++)cinRequest[j];if(p(Request,Need,m,k)){if(q(Request,Available,m)){for(j=0;jm;j++){Available[j]=Available[j]-Request[j];《UML理论与实践》实验报告-6-Allocation[k-1][j]=Allocation[k-1][j]+Request[j];Need[k-1][j]=Need[k-1][j]-Request[j];Work[j]=Available[j];}cout试分配!endl;cout各种资源可利用的数量Available[m]:endl;for(j=0;jm;j++){coutAvailable[j];}coutendl;cout\n已分配资源Allocation[m]:endl;for(i=0;in;i++){for(j=0;jm;j++){coutAllocation[i][j];}coutendl;}cout\n最大需求矩阵Max[n][m]:endl;for(i=0;in;i++){for(j=0;jm;j++){coutMax[i][j];}coutendl;}cout\n需求矩阵Need[n][m]:endl;for(i=0;in;i++){for(j=0;jm;j++){coutNeed[i][j];}coutendl;}if(safe(Finish,Work,Need,Allocation,n,m)){//判断当前状态的安全性cout系统处于安全状态!;cout\n申请资源成功!!!endl;}else{《UML理论与实践》实验报告-7-cout\n当前状态不安全!!!!!!;//恢复数据for(j=0;jm;j++){Available[j]=Available[j]+Request[j];Allocation[k-1][j]=Allocation[k-1][j]-Request[j];Need[k-1][j]=Need[k-1][j]+Request[j];Work[j]=Available[j];}for(i=0;in;i++)Finish[i]=0;cout\n恢复数据:endl;//显示输入各数组的值cout各种资源可利用的数量Available[m]:endl;for(j=0;jm;j++){coutAvailable[j];}coutendl;cout\n已分配资源Allocation[m]:endl;for(i=0;in;i++){for(j=0;jm;j++){coutAllocation[i][j];}coutendl;}cout\n最大需求矩阵Max[n][m]:endl;for(i=0;in;i++){for(j=0;jm;j++){coutMax[i][j];}coutendl;}cout\n需求矩阵Need[n][m]:endl;for(i=0;in;i++){for(j=0;jm;j++){coutNeed[i][j];}coutendl;}cout系统中尚无足够的资源满足进程p[k]的申请,p[k]必须等待!endl;《UML理论与实践》实验报告-8-}}elsecout系统中尚无足够的资源满足进程p[k]的申请,p[k]必须等待!endl;}elsecout出错,进程所需要的资源数目已超过它所宣布的最大值!endl;}}}voidmain(){cout---------------------------------------------------------endl;cout------------------模拟银行家算法------------------endl;cout---------------------------------------------------------endl;cout--------------------江之风海之韵-------------------endl;cout------------------------QuQu-------------------------endl;cout---------------------------------------------------------endl;intAvailable[M];intMax[N][M];intAllocation[N][M];intN
本文标题:操作系统 银行家算法
链接地址:https://www.777doc.com/doc-243170 .html