1、所谓安全状态,是指系统能按某种顺序为每个进程分配所需资源,直到最大需求,使每一个进程都可以顺利完成,即可找到一个安全资源分配序列。模拟实现这个工作过程。三 设计思路我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资
2、源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。四 详细设计1、初始化由用户输入数据,分别对可利用资源向量矩阵AVAILABLE、最大需求矩阵MAX、分配矩阵ALLOCATION、需求矩阵NEED赋值。2、银行家算法在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。设进程cusneed提出请求REQUEST i,则银行家算法按如下规
3、则进行判断。(1)如果REQUEST cusneed i= NEEDcusneedi,则转(2);否则,出错。(2)如果REQUEST cusneed i= AVAILABLEcusneedi,则转(3);(3)系统试探分配资源,修改相关数据: AVAILABLEi-=REQUESTcusneedi; ALLOCATIONcusneedi+=REQUESTcusneedi; NEEDcusneedi-=REQUESTcusneedi;(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。(5)对于某一进程i,若对所有的j,有NEEDij=0,则表此进程资源
4、分配完毕,应将占用资源释放。3、安全性检查算法(1)设置两个工作向量Work=AVAILABLE;FINISH(2)从进程集合中找到一个满足下述条件的进程,FINISH=false;NEED=Work;如找到,执行(3);否则,执行(4)(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。Work+=ALLOCATION;Finish=true;GOTO 2(4)如所有的进程Finish= true,则表示安全;否则系统不安全。4、流程图四 源程序:#include .6秒后跳入主界面 endl; Sleep(6000); system(cls); cout cout m;请输入资源的种
5、类:n;请输入每个进程最多所需的各资源数,按照mxn矩阵输入 for(i=0;ii+) for(j=0;jj+)MAXij;请输入每个进程已分配的各资源数,也按照 ALLOCATIONij; NEEDij=MAXij-ALLOCATIONij; if(NEEDij0)您输入的第i+1个进程所拥有的第j+1个资源数错误,请重新输入: j-; continue; j+) /已分配各资源总数 for(i=0; NEEDcj=ALLOCATIONij+NEEDcj; / for(i=0;i+) /此四行用于检验 / / coutNEEDci; / 请输入各个资源现有的数目:AVAILABLEi;i+)
6、 /总资源数 SUMMITi=AVAILABLEi+ NEEDci;/ for(i=0;i+) /检验用/ coutSUMMITi / cout初始化后状态显示:每个进程最多所需的各资源数 for(j=0; coutMAXij if(j=n-1) cout每个进程已分配的各资源数ALLOCATIONij各个资源现有的数目:AVAILABLEiNEEDcusneedi)您输入的本个请求数超过进程的需求量!请重新输入! i-; continue;AVAILABLEi)您输入的本个请求数超过系统有的资源数!i+) /资源分配 if(Safe()同意分配请求!此次分配后状态显示:当前每个进程最多尚需的各资源数 for(j=0;NEEDij 当前每个进程已分配过的各资源数 add=NEEDij+add; /是否已分配完毕 if(add!=0)i+) sum=NEEDcusneedi+sum;sum值:sum /cout if (sum=0) for(i=0; AVAILABLEi= ALLOCATIONcusneedi+AVAILABLEi; sum=0; add=0;add else
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1