网站大量收购独家精品文档,联系QQ:2885784924

操作系统实验报告材料三-银行家算法.doc

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实用标准文案 文档大全 银行家算法 操作系统实验三 银行家算法 姓名:杨益林 学号报告日期:2017.06.07 一、实验目的 通过实验, 加深对多实例资源分配系统中死锁避免方法——银行家算法的理解,掌握 Windows 环境下银行家算法的实现方法,同时巩固利用 Windows API进行共享数据互斥访问和多线程编程的方法。 二、实验内容 1.在 Windows 操作系统上,利用 Win32API 编写多线程应用程序实现银行家算法。 2.创建 n 个线程来申请或释放资源,只有保证系统安全,才会批准资源申请。 3.通过 Win32 API 提供的信号量机制,实现共享数据的并发访问。 三、实验步骤 (一)设计思路: 银行家算法可分为个主要的功能模块,其描述如下: 1.初始化 由用户输入数据,分别对运行的进程数、总的资源种类数、总资源数、各进程所需要的最大资源数量(Max),已分配的资源数量赋值。 2.安全性检查算法 (1)设置两个工作向量Work=AVAILABLE;FINISH=false; (2)从进程集合中找到一个满足下述条件的进程, FINISH==false; NEED=Work; 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 Work+=ALLOCATION; Finish=true; (4).如所有的进程Finish= true,则表示安全;否则系统不安全。 3. 银行家算法 在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。 银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。 设进程j提出请求REQUEST [i],则银行家算法按如下规则进行判断。 (1).如果REQUEST [j] [i]= NEED[j][i],则转(2);否则,出错。 (2).如果REQUEST [j] [i]= AVAILABLE[j][i],则转(3);否则,出错。 (3).系统试探分配资源,修改相关数据: AVAILABLE[i]-=REQUEST[j][i]; ALLOCATION[j][i]+=REQUEST[j][i]; NEED[j][i]-=REQUEST[j][i]; 用到的数据结构: 实现银行家算法要有若干数据结构,它们用来表示资源分配系统的状态。令n表示系统中进程的数目,m表示资源的分类数。还需要以下数据结构: 1).Available是一个长度为m的向量,它表示每类资源可用的数量。Available [j]=k,表示j类资源可用的数量为k。 2).Max是一个n×m矩阵,它表示每个进程对资源的最大需求。Max [i,j]=k,表示进程pi至多可以申请k个j类资源单位。 3).Allocation是一个n×m矩阵,它表示当前分给每个进程的资源数目。Allocation [i,j]=k,表示进程i当前分到k个j类资源。 4).Need是一个n×m矩阵,它表示每个进程还缺少多少资源。Need[i,j]=k,表示进程pi尚需k个j类资源才能完成其任务。显然Need[i,j]= Max [i,j]- Allocation [i,j]。 (二)流程图 四、运行结果示例 这里以书上的例子为例,初值如下表: Allocation Max Available A B C A B C A B C P0 0 1 0 7 5 3 3 3 2 P1 2 0 0 3 2 2 P2 3 0 1 9 0 0 P3 2 1 1 2 2 2 P4 0 0 2 4 3 3 现在让进程P1再申请A:1 B:0 C:2个资源,首先调用安全算法测试如果分配后系统是否安全,然后给出了分配序列,如下图: 如果再让P4申请A:0 B:2 C:0个资源,首先调用安全算法测试如果分配后系统是否安全,发现分配后系统不安全,于是报分配错误,不予分配,结果如下图: 七、实验体会 银行家算法的具体实现,我学到了很多课本上没有的知识。想要完成模拟银行家算法的C++程序,首先就是要彻底熟悉算法,了解算法的基本原理,才能开始着手程序设计在程序设计设计过程中,遇到了一些困难,通过向同学询问,翻阅资料等,问题被一一解决了。首先就是在知识层面上了解了银行家算法这种进程调度和避免死锁的算法,并用C++程序真正模拟出安全性检查和银行家算法过程,复习了之前所学C++和数据结构的知识;在编程过程中虽然遇到很多困难,解决问题的过程中,同时也锻炼了我不怕困难,勇于迎接挑战的精神,为以后的工作打下了坚实的基础。 八、源程序并附上注释 #includei

文档评论(0)

linlin921 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档