操作系统实验实验四银行家算法学号1115102002姓名蔡凤武班级11电子A华侨大学电子工程系实验目的理解银行家算法。掌握进程安全性检查的方法与资源分配的方法。实验内容与基本要求编制模拟银行家算法的程序,并以下面给出的例子验证所编写的程序的正确性。进程已占资源最大需求数ABCDABCDP000120012P110001750P213542356P306320652P400140656现在系统中A、B、C、D4类资源分别还剩1、5、2、0个,请按银行家算法回答:现在系统是否处于安全状态?如果现在进程P1提出需要(0、4、2、0)个资源的请求,系统能否满足它的请求?1、银行家算法和安全性检查算法原理。操作系统的银行家算法:当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。程序流程描述。 银行家算法:(1)步骤:1如果Request [j]<=Need[i],转向步骤(2),否则认为出错,因为他所需要的资源数已经超过它所宣布的最大值。(2)步骤2;如果:Request [i]<=Available[i],转向步骤(3),否则提示尚无足够资源,进程i需等待。 (3)步骤3:系统试探分配相关资源,并修改下面数据: Available[i]= Available[i]- Request [j]; Allocation[i]= Allocation[i]+ Request [i]; Need[i]= Need[i]- Request [i]; (4)步骤4:执行安全性检查,如安全,则分配成立;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。安全性检查算法:安全性检查算法主要是根据银行家算法进行资源分配后,检查资源分配后的系统状态之中。具体算法如下:(1)步骤1:设置两个向量:Work=Available,Finish[i]=false;说明:Finish(它表示系统是否有足够的资源分配给进程)Work(它表示系统可提供给进程继续运行所需的各类资源数目)(2)步骤2:在进程中查找符合以下条件的进程:Finish[i]=false,need<=Work若能找到,则执行步骤(3),否则,执行步骤(4)(3)步骤3:当进程获得资源后,可顺利执行,直至完成,从而释放资源:Work=Work+Allocation;Finish=true;gotostep(2);(4)步骤4:如果所有进程的Finish=true都满足,则表示系统处于安全状态,否则,系统不安全状态。流程图:主函数:开始显示背景设置输入进程的数目输入资源的种类输入每个进程最多所需的各资源数输入各个资源现有的数目检测系统安全性输入请求资源的进程号及其请求的各资源的数量 Request<=Need? 否显示错误否 是进程Pi阻塞Request<=Available? 是尝试分配资源:Available[i]= Available[i]- Request [j] Allocation[i]= Allocation[i]+ Request [i]Need[i]= Need[i]- Request [i];执行安全性算法,检查安全性否是否安全 正式分配) 是试将分配作废,恢复原资源分配状态同意分配请求还想再次请求分配吗?是按Y,否按N开始初始化设置,work,finishWork=AvailableFinish[i]=false(1,2,3,…) 否 Needi>work,Finish[i]=False否`` 是Needi>work,Finish[i]=FalseWork=Work+Allocationi;Finish[i]=ture;系统处于不安全状态系统处于安全状态2、程序及注释。#include<>#include<>#include<>#definem50#definefalse0#rue1intno1;//进程数intno2;//资源数intr;intallocation[m][m],max[m][m],need[m][m],available[m];charname1[m],name2[m];//定义全局变量voidmain(){ voidcheck();voidprint();voidshoudon();inti,j,p=0,q=0;charc;ints;intrequest[m],allocation1[m][m],need1[m][m],available1[m],f[m];intm
实验四银行家算法 来自淘豆网m.daumloan.com转载请标明出处.