您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 操作系统课程设计报告--银行家算法
操作系统课程设计报告摘要Dijkstra提出的银行家算法,是最具代表性的避免死锁的算法。本文对如何用银行家算法来处理操作系统给进程分配资源做了详细的说明,包括需求分析、概要设计、详细设计、测试与分析、总结、源程序清单。首先做了需求分析,解释了什么是银行家算法,并指出它在资源分配中的重要作用。然后给出了银行家算法的概要设计,包括算法思路、步骤,以及要用到的主要数据结构、函数模块及其之间的调用关系等。在概要设计的基础上,又给出了详细的算法设计,实现概要设计中定义的所有函数,对每个函数写出核心算法,并画出了流程图。接着对编码进行了测试与分析(并在最后附上Java编写的程序代码)。最后对整个设计过程进行了总结。关键词:安全序列;银行家算法;安全性算法;类图。目录摘要.....................................................11绪论...................................................41.1前言.................................................51.2研究意义..............................................51.3结构安排..............................................52需求分析...............................................42.1题目描述..............................................52.2银行家算法............................................52.3基本要求..............................................52.4目的.................................................53概要设计...............................................43.1基本思路..............................................53.2银行家算法步骤........................................53.3安全型算法步骤........................................53.4数据结构............................................53.4.1主要用到的数据结构..................................63.4.2程序模块..........................................63.4.3各模块间的调用关系..................................64详细设计...............................................44.1主要函数的核心代码.....................................54.1程序流程图............................................55测试...................................................45.1测试用例..............................................55.1测试结果分析和截图.....................................56总结...................................................4参考文献.................................................4附录:原程序清单.........................................41绪论1.1前言:Dijkstra(1965)提出了一种能够避免死锁的调度算法,称为银行家算法。它的模型基于一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,每个客户都有一个贷款额度,银行家知道不可能所有客户同时都需要最大贷款额,所以他只保留一定单位的资金来为客户服务,而不是满足所有客户贷款需求的最大单位。这里将客户比作进程,贷款比作设备,银行家比作系统。客户们各自做自己的生意,在某些时刻需要贷款。在某一时刻,客户已获得的贷款和可用的最大数额贷款称为与资源分配相关的系统状态。一个状态被称为是安全的,其条件是存在一个状态序列能够使所有的客户均得到其所需的贷款。如果忽然所有的客户都申请,希望得到最大贷款额,而银行家无法满足其中任何一个的要求,则发生死锁。不安全状态并不一定导致死锁,因为客户未必需要其最大贷款额度,但银行家不敢抱这种侥幸心理。银行家算法就是对每一个请求进行检查,检查如果满足它是否会导致不安全状态。若是,则不满足该请求;否则便满足。检查状态是否安全的方法是看他是否有足够的资源满足一个距最大需求最近的客户。如果可以,则这笔投资认为是能够收回的,然后接着检查下一个距最大需求最近的客户,如此反复下去。如果所有投资最终都被收回,则该状态是安全的,最初的请求可以批准。1.2研究意义:在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险——死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。要预防死锁,有摒弃“请求和保持”条件,摒弃“不剥夺”条件,摒弃“环路等待”条件等方法。但是,在预防死锁的几种方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统状态分为安全状态和不安全状态,便可避免死锁的发生。而最具代表性的避免死锁的算法,便是Dijkstra的银行家算法。利用银行家算法,我们可以来检测CPU为进程分配资源的情况,决定CPU是否响应某进程的的请求并为其分配资源,从而很好避免了死锁的产生。1.3结构安排:一、绪论:介绍了题目背景以及研究意义。二、需求分析:介绍了题目描述、银行家算法、以及基本要求和所需达到的目的。三、概要设计:介绍了基本的算法思路、步骤,以及数据结构和主要的函数模块及其调用关系。四、详细设计:介绍了主要函数及其核心代码,以及程序流程图。五、测试六、总结参考文献附录:原程序清单2需求分析2.1题目描述:银行家算法是一种最具有代表性的避免死锁的算法。要解释银行家算法,必须先解释操作系统的安全状态和不安全状态。所谓安全状态,是指系统能按照某种进程顺序{P1,P2,…,Pn}(称{P1,P2,…,Pn}序列为安全序列),来为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺利完成。安全状态一定没有死锁发生。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。那么,什么是安全序列呢?如果对每一个进程Pi(1in),它以后尚需要的资源量不超过系统当前可利用的资源量与所有的进程Pj(jn)所占有的资源量之和,则称此进程序列{P1,P2,…,Pn}是安全的,称作安全序列。2.2银行家算法:我们可以把操作系统看做是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求资源相当于客户向银行家贷款。操作系统按银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程尚需求的资源量,若是系统现存的资源可以满足它尚需求的资源量,则按当前的申请量来分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程申请的资源量是否超过了它尚需的资源量。若超过则拒绝分配,若没有超过则再测试系统尚存的资源是否满足该进程尚需的资源量,若满足即可按当前的申请量来分配,若不满足亦推迟分配。2.3基本要求:(1)可以输入某系统的资源以及T0时刻进程对资源的占用及需求情况的表项,以及T0时刻系统的可利用资源数。(2)对T0时刻的进行安全性检测,即检测在T0时刻该状态是否安全。(3)进程申请资源,用银行家算法对其进行检测,分为以下三种情况:A.所申请的资源大于其所需资源,提示分配不合理不予分配并返回。B.所申请的资源未大于其所需资源,但大于系统此时的可利用资源,提示分配不合理不予分配并返回。C.所申请的资源未大于其所需资源,亦未大于系统此时的可利用资源,预分配并进行安全性检查:a.预分配后系统是安全的,将该进程所申请的资源予以实际分配并打印后返回。b.与分配后系统进入不安全状态,提示系统不安全并返回。(4)对输入进行检查,即若输入不符合条件,应当报错并返回重新输入。2.4目的:根据设计题目的要求,充分地分析和理解题目,叙述系统的要求,明确程序要求实现的功能以及限制条件。明白自己需要用代码实现的功能,清楚编写每部分代码的目的,做到有的放矢,有条理不遗漏的用代码实现银行家算法。3概要设计3.1算法思路:先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。3.2银行家算法步骤(1)如果Request[i]<=Need,则转向步骤(2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2)如果Request[i]<=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。(3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值:Available=Available-Request[i];Allocation=Allocation+Request;Need=Need-Request;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。3.3安全性算法步骤(1)设置工作向量①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Available;②定义判断一个进程是否执行完毕的方法:booleanisFinished()。(2)从进程集合中找到一个能满足下述条件的进程:①process.isFinished()返回值为true.②Need=Work如找到,执行步骤(3);否则,执行步骤(4)。(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work=Work+Allocation;Allocation+=Need;转向步骤(2)。(4)如果所有进程的均执行完毕即isAllFinished()返回值为true,则表示系统处于安全状态;否则,系统处于不安全状态。3.4数据结构:3.4.1主要用到的数据结构:(1)保存进程最大资源需求量的矩阵:int[]_maxNeed(2)保存进程已分配资源量的矩阵:int[]_allocated(3)保存进程标识符的字符串:String_id(4)保存系统中各资源总数的矩阵:int[]_totalResource(5)表示申请资源的进程队列:ArrayListProcess_processes(6)表示系统资源种类数的整数:int_resourceClassCount(7)存储执行信息:StringBuffer_executeInfo3.4.2程序模块:代表进程的类:Process.java代表银行家算法的类:BankerAlgorithm.java算法的主界面:BankerMainUI.java添加进程的对话框:AddProcessDialog.java添
本文标题:操作系统课程设计报告--银行家算法
链接地址:https://www.777doc.com/doc-3364986 .html