操作系统银行家算法(7页).doc

上传人:1595****071 文档编号:36343137 上传时间:2022-08-26 格式:DOC 页数:7 大小:335KB
返回 下载 相关 举报
操作系统银行家算法(7页).doc_第1页
第1页 / 共7页
操作系统银行家算法(7页).doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《操作系统银行家算法(7页).doc》由会员分享,可在线阅读,更多相关《操作系统银行家算法(7页).doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-操作系统 银行家算法操作系统实验报告实验目标1. 理解银行家算法。2. 掌握进程安全性检查的方法及资源分配的方法。3. 加深了解有关资源申请、避免死锁等概念。4. 体会和了解死锁和避免死锁的具体实施方法。实验要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。设计思路1.银行家算法在避免死锁的方法中,如果施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。基本思想为:在分配资源之前,判断系统是否是安全的;若安全,才分配。它是最具代表

2、性的死锁算法,具体算法如下表示:假设进程P提出请求Requesti,则银行家算法按如下步骤进行判断:1) 如果Requesti =Needi,则转向2);否则出错。2) 如果Requesti =Availablei,则转向3);否则出错。3) 系统试探分配相关资源,修改相关数据:Availablei=Availablei-Requesti;Allocationi=Allocationi+Requesti;Needi=Needi-Requesti;4) 系统执行安全性检查,如安全,则分配成立;否则试探性分配资源作废,系统恢复原状,进程进入等待状态。根据以上银行家算法步骤,可得出如下图所示流程图:

3、2.安全性检查算法安全性检查算法主要是根据银行家算法进行资源分配后,检查资源分配后的系统状态是否处于安全状态之中。具体算法如下所示:1) 设置两个工作向量Work=Available,Finish=false;2) 从进程集合中找到一个满足下述条件的进程;Finish=false;Need=work;如果能够找到该进程,则执行3),否则,执行4);3) 假设上述找到的进程获得资源,可顺利执行,直至完成,从而释放资源。Work=Work+Allocation;Finish=true;Goto 2);4) 如果所有进程的Finish=true,则表示该系统安全,否则系统不安全,请求被拒。5) 根据

4、以上安全检查算法步骤,可得出如下图所示流程图:主要数据结构#include /全局变量定义int Available100; /可利用资源数组int Max50100; /最大需求矩阵int Allocation50100; /分配矩阵int Need50100; /需求矩阵int Request50100; /M个进程还需要N类资源的资源量int Finish50;int p50;int m,n; /M个进程,N类资源主要代码结构/安全性算法int Safe() int i,j,l=0;int Work100; /可利用资源数组for (i=0;in;i+)Worki=Availablei;

5、for (i=0;im;i+)Finishi=0;for (i=0;im;i+)if (Finishi=1)continue;elsefor (j=0;jWorkj)break;if (j=n)Finishi=1;for(int k=0;kn;k+)Workk+=Allocationik;pl+=i;i=-1;else continue;if (l=m)cout系统是安全的n;cout系统安全序列是:n;for (i=0;il;i+)coutpi;if (i!=l-1)cout;coutn;return 1;/银行家算法int main()int i,j,mi;coutm;coutn;cout

6、输入每个进程最多所需的各类资源数,按照mxn矩阵输入n;for (i=0;im;i+)for(j=0;jMaxij;cout输入每个进程已经分配的各类资源数,按照mxn矩阵输入n;for (i=0;im;i+)for(j=0;jAllocationij;Needij=Maxij-Allocationij;if (Needij0)cout你输入的第i+1个进程所拥有的第j+1个资源错误,请重新输入:n;j-;continue;cout请输入各个资源现有的数目:n;for (i=0;iAvailablei;Safe();while (1)coutmi;cout输入进程所请求的各个资源的数量n;fo

7、r (i=0;iNeedmii)coutAvailablei)cout所请求资源数超过系统所有的资源数!n;return 0;for (i=0;in;i+)Availablei-=Requestmii;Allocationmii+=Requestmii;Needmii-=Requestmii;if (Safe()cout同意分配请求n;elsecoutSORRY()你的请求被拒绝n;for (i=0;in;i+)Availablei+=Requestmii;Allocationmii-=Requestmii;Needmii+=Requestmii;for (i=0;im;i+) Finishi

8、=0;char Flag; /标志位coutFlag;if (Flag=Y|Flag=y|Flag=N|Flag=n)break;elsecout请按要求重新输入:n;continue;if (Flag=Y|Flag=y)continue;else break;主要代码段分析1. 在开始编写程序时,由于相关参数由用户自己进行输入时,由于运用scanf和printf语句,造成程序长度很长,而且输入子程序复杂度为O(),程序反应速度也比较慢。后来改用cin和cout函数程序长度大大缩短。2. 由于程序的可重复使用的方便性,采取设立标志位Flag,由用户输入命令(Y/N或y/n)用以作为程序继续运行和结束的标志。实验心得本次试验老师要求对固定的资源进行分配,虽然实现起来比较简单,但是其只能算固定的一种情况,所以在此基础上,我进行了改进,即相关参数由用户自己进行输入增加其实用性。下图为程序运行情况:-第 7 页-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁