银行家算法课程设计(共22页).doc





《银行家算法课程设计(共22页).doc》由会员分享,可在线阅读,更多相关《银行家算法课程设计(共22页).doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上操作系统课程设计报告题目:银行家算法 安全性算法院 (系):计算机科学与工程专 业:软件工程班 级:班学 生:姚骏川学 号:指导教师:姜虹 2015年12月28 目录专心-专注-专业1 绪论1.1前言Dijkstra (1965)提出了一种能够避免死锁的调度算法,称为银行家算法。它的模型基于一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,每个客户都有一个贷款额度,银行家知道不可能所有客户同时都需要最大贷款额,所以他只保留一定单位的资金来为客户服务,而不是满足所有客户贷款需求的最大单位。这里将客户比作进程,贷款比作设备,银行家比作系统。客户们各自做自己的生意,
2、在某些时刻需要贷款。在某一时刻,客户已获得的贷款和可用的最大数额贷款称为与资源分配相关的系统状态。一个状态被称为是安全的,其条件是存在一个状态序列能够使所有的客户均得到其所需的贷款。如果忽然所有的客户都申请,希望得到最大贷款额,而银行家无法满足其中任何一个的要求,则发生死锁。不安全状态并不一定导致死锁,因为客户未必需要其最大贷款额度,但银行家不敢抱这种侥幸心理。银行家算法就是对每一个请求进行检查,检查如果满足它是否会导致不安全状态。若是,则不满足该请求;否则便满足。检查状态是否安全的方法是看他是否有足够的资源满足一个距最大需求最近的客户。如果可以,则这笔投资认为是能够收回的,然后接着检查下一个
3、距最大需求最近的客户,如此反复下去。如果所有投资最终都被收回,则该状态是安全的,最初的请求可以批准。1.2研究意义在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。要预防死锁,有摒弃“请求和保持”条件,摒弃“不剥夺”条件,摒弃“环路等待”条件等方法。但是,在预防死锁的几种方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能
4、。在该方法中把系统状态分为安全状态和不安全状态,便可避免死锁的发生。而最具代表性的避免死锁的算法,便是Dijkstra的银行家算法。利用银行家算法,我们可以来检测CPU为进程分配资源的情况,决定CPU是否响应某进程的的请求并为其分配资源,从而很好避免了死锁的产生。2 需求分析2.1题目描述 银行家算法是一种最具有代表性的避免死锁的算法。要解释银行家算法,必须先解释操作系统的安全状态和不安全状态。所谓安全状态,是指系统能按照某种进程顺序P1,P2,,Pn(称P1,P2,,Pn 序列为安全序列),来为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺利完成。安全状态一
5、定没有死锁发生。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。那么,什么是安全序列呢?如果对每一个进程Pi(1in),它以后尚需要的资源量不超过系统当前可利用的资源量与所有的进程Pj(jn)所占有的资源量之和,则称此进程序列P1,P2,,Pn是安全的,称作安全序列。2.2银行家算法 我们可以把操作系统看做是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求资源相当于客户向银行家贷款。操作系统按银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程尚需求的资源量,若是系统现存的资源可以满足它尚需求的资源量,则按当前的申请量来分配资源,否则就推迟分配。当进
6、程在执行中继续申请资源时,先测试该进程申请的资源量是否超过了它尚需的资源量。若超过则拒绝分配,若没有超过则再测试系统尚存的资源是否满足该进程尚需的资源量,若满足即可按当前的申请量来分配,若不满足亦推迟分配。2.3基本要求(1)设计用来保存:可利用资源向量Available、最大需求矩阵 Max、分配矩阵 Allocation 、需求矩阵 Need。(2)编写银行家算法,安全性检测算法。要求在不安全时输出错误信息。(3)编写输出函数,能对进程申请后的系统状态进行输出。2.4目的根据设计题目的要求,充分地分析和理解题目,叙述系统的要求,明确程序要求实现的功能以及限制条件。明白自己需要用代码实现的功
7、能,清楚编写每部分代码的目的,做到有的放矢,有条理不遗漏的用代码实现银行家算法。3 概要设计3.1算法思路: 先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。3.2银行家算法步骤(1)如果Requesti=Need,则转向步骤(2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2)如果Requestor=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。(3)系统试探把要求的资源分配给
8、进程Pi,并修改下面数据结构中的数值:Available=Available-Requesti;Allocation=Allocation+Request;Need=Need-Request;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。3.3安全性算法步骤(1)设置两个向量工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation;布尔向量Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finishi=false,当有足够资源分配给进程时,令Finishi=true。(2)从进程集合
9、中找到一个能满足下述条件的进程:Finishi=falseNeed =Work;如找到,执行步骤(3);否则,执行步骤(4)。(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work=Work+Allocation;Finishi=true; 转向步骤(2)。(4)如果所有进程的Finishi=true,则表示系统处于安全状态;否则,系统处于不安全状态。34数据结构:3.4.1主要用到的数据结构:(1) 最大需求矩阵Max(2) 已分配矩阵Allocation(3) 仍需求矩阵Need=Max-Allocation(4) 可利用资源向量Available(5)
10、 申请各类资源向量Request(6) 工作向量 work , Finish(7)存放安全序列 temp(8) 存放系统可提供资源 work(9)资源的名字 name3.4.2程序模块: int main()/主函数void showdata()/显示资源矩阵int changdata(int i)/进行资源分配int safe()/安全性算法void share()/利用银行家算法对申请资源对进行判定void addresources()/添加资源void changeresources()/修改资源函数void addprocess()/添加作业3.4.3各模块间的调用关系:主函数void
11、 main()要调用: showdata(),safe(),addresources(),addprocess(),changeresources(),changdata(int i)安全性检测函数safe()银行家算法函数share() 要调用 changdata(int i), showdata(),safe()4 详细设计4.1主要函数的核心代码:1. 进行初始化输入的函数2. 输出的函数3. 利用安全性算法进行检测的函数4. 进行资源分配的函数5. 利用银行家算法进行判定的函数 4.2系统主要过程流程图图4.1 主要流程图4.3银行家算法流程图图4.2 银行家流程图5 测试与分析5.1
12、测试数据本次测试一共5个进程,分别为p0、p1、p2、p3、p4.,资源分配情况如下表:资源情况进程MaxA B CAllocationA B CNeedA B CAvailableA B CP07 5 30 1 07 4 33 3 2P13 2 22 0 01 2 2P20 9 23 0 26 0 0P32 2 22 1 10 1 1P44 3 30 0 24 3 1结果截图:图5.15.2银行家算法的演示进行资源的分配,为进程1分配了(1,0,2),进行安全算法得到如下的结果。图5.25.3分配资源由于大于可利用资源则失败。图5.35.4 增加一个作业得到不安全序列。图5.45.5分配资源
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行家 算法 课程设计 22

限制150内