- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
报告创建时间:
报告创建时间:2013.05.16
《操作系统》实验报告
年级、专业、班级实验题目
姓名
资源分配和管理的银行家算法
实验时间
2013.05.14
实验地点
主教 0416
实验成绩
实验性质
□验证性
□设计性
□综合性
教师评价:
□ 算法/实验过程正确;
□ 源程序/实验内容提交
□ 程序结构/实验步骤合理;
□ 实验结果正确;
其他:
□ 语法、语义正确;
□ 报告规范;
评价教师签名:
一、实验目的
学习分配和管理资源的银行家算法,了解死锁避免方法。
二、实验项目内容
编写程序实现教材 6.3.2 节的银行家算法程序功能:
程序随机生成进程数量(10)、资源种类(3)、每类资源总数量
(3)、进程的申请资源的数量(0)、已分配资源的数量、可用资源数量等;
输出每一个进程的资源分配情况;
输出每一步的资源分配情况和进程执行序列(安全序列)。
指出每一次资源分配后系统是否处于安全状态。
报告创建时间:
报告创建时间:2013.05.16
三、实验过程或算法(源程序)
算法思路:
先对用户提出的请求进行合法性检查,即检查请求是否大于需要的, 是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。
银行家算法步骤
如果Request[i]<=Need,则转向步骤(2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。
如果 Request[i]<=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。
系统试探把要求的资源分配给进程 Pi,并修改下面数据结构中的数值:
Available=Available-Request[i]; Allocation=Allocation+Request; Need=Need-Request;
(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。
安全性算法步骤
设置工作向量
①工作向量 Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Available;
②定义判断一个进程是否执行完毕的方法:boolean isFinished()。
从进程集合中找到一个能满足下述条件的进程:
①process.isFinished()返回值为 true.
②Need=Work
如找到,执行步骤(3);否则,执行步骤(4)。
当进程 P 获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
Work=Work+Allocation; Allocation += Need; 转向步骤(2)。
如果所有进程的均执行完毕即isAllFinished()返回值为 true,则表示系统处于安全状态;否则,系统处于不安全状态。
数据结构:
3.4. 1 主要用到的数据结构:
保存进程最大资源需求量的矩阵: int[] _maxNeed
保存进程已分配资源量的矩阵: int[] _allocated
保存进程标识符的字符串:String _id
保存系统中各资源总数的矩阵:int[] _totalResource
表示申请资源的进程队列:ArrayListProcess _processes
表示系统资源种类数的整数:int _resourceClassCount
存储执行信息:StringBuffer _executeInfo
3.4. 2 程序模块:
代表进程的类:Process.java
代表银行家算法的类:BankerAlgorithm.java
算法的主界面:BankerUI.java
3.4. 3 各模块间的调用关系:
BankerUI 是程序执行的主界面,输入系统资源种类数之后,其通过程序随机生成进程数量(10)、资源种类(3)、每类资源总数量(3)、进程的申请资源的数量( 0)、已分配资源的数量、可用资源数量等。其中所用针对系统进程和资源的操作均需要调用类 BankerAlgorithm 的方法。
主要函数的核心代码:
进行初始化输入的函数
打印输出的函数
利用安全性算法进行检测的函数
进行资源分配的函数
利用行家算法进行判定的函数
注:具体代码请见附录—源程序清单。程序流程图:
1、系统主要过程流程图:
1
1
千 I 各 二 歹 夕
l顷 凯 生完 锋 妥数影砰浸痴唗复 及分配悟况令
l
智
智
刍印子统呈否妄 全( 谝凭马;年 至5
刍印子统呈否
妄 全( 谝凭
马;
年 至5 怠
方法}#
执行安 全彴去程f
泛艺夕
队列
除 i 泪 月
话二
乒
名声 E
退出系统4
l申 诸资荔(诮弓 至
l
i严 尘 笞竺 印
i
I的
I
纭复工运3元 足 萃
c酶 )J
文档评论(0)