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

银行家算法的设计与实现.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
银行家算法的设计与实现

操作系统课程设计 题目:银行家算法的设计与实现 院 (系): 专 业: 班 级: 学 生: 学 号: 指导教师: 摘 要 Dijkstra的银行家算法是最有代表性的避免死锁的算法,该算法由于能用于银行系统现金贷款的发放而得名。银行家算法是在确保当前系统安全的前提下推进的。对进程请求先进行安全性检查,来决定资源分配与否,从而确保系统的安全,有效的避免了死锁的发生。 该论文在理解和分析了银行家算法的核心思想以及状态的本质涵义的前提下,对算法的实现在总体上进行了设计,包括在对算法分模块设计,并对各个模块的算法思想通过流程图表示,分块编写代码,并进行测试,最后进行程序的测试,在设计思路上严格按照软件工程的思想执行,确保了设计和实现的可行,可信。代码实现采用java语言。 关键词:银行家算法;安全性序列 一.绪论 1.1课题背景 在多道程序系统中,虽可以借助多个进程的并发执行来改善系统的资源利用率,提高系统吞吐量,但可能发生一种危险——死锁,即多个进程在运行过程中因争夺资源而造成的一种僵局,若无外力作用,将无法再向前推进。如此,寻求一种避免死锁的方法便显得有为重要。死锁的产生一般的原因有两点:竞争资源和进程间推进顺序非法。因此,我们只需在当前的有限资源下,找到一组合法的执行顺序,便能很好的避免死锁,我们称它为安全序列。而银行家算法起源于银行系统的发放贷款,和计算机操作系统的资源分配完全符合,因此可以借鉴该算法的思想,设计出一种有效的算法程序,解决该问题。 1.2 课题意义 (1)通过整个算法的设计与实现进一步加深了对算法的理解和多道程序下的计算机系统资源分配现状,为以后进一步的学习打下了良好的基础。 (2)通过这次课程设计加强对操作系统的认识,并且提高自己的分析问题,解决问题和动手能力; 二.概述 2.1 设计目的: 熟悉银行家算法,理解系统产生死锁的原因及避免死锁的方法,加深记忆。 2.2 开发环境: 操作系统 编译环境 生成文件 Windows XP MyEclipse Exe 三.需求分析 3.1 问题描述 运用银行家算法,避免死锁的发生。在确保当前系统安全的前提下推进的。对进程请求先进行安全性检查,来决定资源分配与否,从而确保系统的安全,有效的避免了死锁的发生。 问题的关键在于安全性算法,即找安全性序列。 3.2 基本要求 (1)从键盘输入当前系统的资源信息,包括当前可用资源,每个进程对各类资源的最大需求量,每个进程当前已分配的各个资源量和每个进程尚需要的各个资源量,并显示出结果在界面上。 (2)输入进程请求,按照设计好的安全性算法进行检查,得到结果并输出整个执行过程的相关信息和最终结果(主要包括资源分配表和安全序列) (3)要求int[] Resource=new int[50]; // 表示资源种类最大数 int[]Process=new int[50]; // 表示某进程个数最大数 int[][]maxneed=new int[50][50]; // 表示某进程对某类资源的最大需求 int[][]allocation=new int[50][50]; // 表示某个进程已分配到某类资源的个数 int[][]need=new int[50][50]; // 表示某个进程尚需要某类资源的个数 int[]avaliable=new int[50]; //表示当前某类资源的可用数 int[] work=new int[50]; /存储当前work[]的值,以便输出 boolean[]finish=new boolean[50]; //代表该进程是否已分配 int[] request=new int[50]; //请求向量 3.3算法整体设计与调用 算法主要分五大块: (1)首先需要动态的输入当前资源数及进程数,通过resource()方法实现。 (2)需要初始化iniship(),存储系统当前状态信息; (3)调用安全算法isSecurity(),检测当前系统安全状态,若安全则进行下一步,否则打印相关信息,程序退出。 (4) 调用试分配函数isContinue(),进行试分配,若试分配成功,修改相关数据结构,打印当前系统资源分布图,转下一步,否则,打印提示信息,接收其他请求向量。 (5) 再次调用安全性算法,检查试分配以后的系统安全性,若安全打印安全性序列和当前系统资源分布图,并进入新一轮的执行。否则之前的试分配作废,恢复试分配之前的数据结构,输出相关提示信息,接收下一个进程请求 四.核心算法及流程图 4.4.1(1)先初始化相关数据结构 for(int i=0;ir

文档评论(0)

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

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

1亿VIP精品文档

相关文档