ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:169.03KB ,
资源ID:11211943      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11211943.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统课程设计银行家算法.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统课程设计银行家算法.docx

1、操作系统课程设计银行家算法 操作系统课程设计报告 小组成员 指导教师 吉林建筑大学计算机科学与工程学院 年 月 日银行家算法摘 要本次的课程设计内容是银行家算法,在操作系统当中,由于竞争非剥夺性资源和进程推进的不当,对系统的安全造成威胁,所以,银行家算法就是为了避免对系统产生死锁而存在的。银行家算法包括对请求资源的试分配和对安全性的考量,当系统的安全性不能够满足的时候,则对系统进行保护。在编写银行家算法的时候需要定义Need(需求矩阵),Allocation(分配矩阵),Max(最大需求矩阵)以及Available(可利用资源量)。在实现一系列的功能的时候使用的数组的结构,便于进行矩阵的加减运

2、算,可以提高程序的运行效率。通过编写可以基本上实现银行家算法所要达到的基本目的,在输入正确的情况下能够输出正确的安全序列,在不安全的情况下可以做出提醒,并且恢复原有输入数据。 关键字:银行家算法 最大需求矩阵 分配矩阵 需求矩阵 可利用资源量1 绪论银行家算法是操作系统当中为避免锁死的算法,并且是最具有代表性的避免锁死的算法,能够有效的在资源分配的过程中,对系统的安全性进行检测。整个算法的计算步骤为对输入的数据进行试分配,并对安全性进行检测,当系统为安全的时,依照安全序列执行程序,如果不安全则进入阻塞状态。银行家算法的来源是在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明

3、完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。在避免死锁的方法中,所施加的简直条件比在预防死锁的方法中限制条件要弱,有可能获得令人满意的系统性能。在该方法中,把系统的状态分为安全状态和不安全状态,只要能使系统都处于安全状态,就可避免死锁的发生。 所谓安全状态与不安全状态是指如果所有过程有可能完成执行(终止),则一个状态被认为是安全的。由于系统无法知道什么时候一个过程将终止,或者之后它需要多少资源,系统假定所有进程将最终

4、试图获取其声明的最大资源并在不久之后终止。2 需求分析2.1 问题描述: 在多道程序系统中,虽然能够借助于多个进程的并发执行,来改善系统资源的利用率,提高系统的吞吐量,但是依然有风险存在,那就是锁死。所谓锁死是指,多个进程在运行中因争夺资源而造成的一种僵局,当进程的这种僵持状态时,若无外力作用,它们将无法再向前推进。一组程序中,每个进程都无限等待被该组进程中的另一进程所占有的资源,因而永远无法得到资源,这种现象就叫做进程死锁。2.2 产生条件1进程间竞争非剥夺性资源2进程保持申请3资源的独占,一个资源同一时刻只能分配给一个进程4进程循环等待资源2.3 运行环境 Visual C+ 6.02.4

5、 程序功能在该程序中应该具有以下功能:1、从外界输入进程数,资源数以及完成银行家算法的所需的各类资源数。2、当输入越界或者非法输入时能够提示错误。3、当进程推进处于不安全状态时要能够进行提示处于不安全状态,并且能够恢复数据到初始状态。当请求资源量大于可利用资源数时要能够进行提醒,并且重新输入。4、当数据完成初始化时,要能够输出数据所对应的矩阵。3 概要设计3.1程序模块本程序包括了四个基本模块: 主函数、试分配、安全性测试、数据的输入与输出。3.1.1主函数主函数用于输出系统的主要操作界面,以及调用其他的函数,完成银行家算法。3.1.2试分配: 对输入的进程的Max、Available、All

6、ocation以及Request进行分配,判断是否可以正常分配。3.1.3 安全性测试:当试分配完成时,通过安全性测试来对系统的安全性进行检测,安全时输出安全序列,不安全时进行提醒,并且恢复到初始化时输入的数据。3.2模块之间关系 主函数可以调用系统的所有函数,以及输出功能界面,将试分配函数,安全性测试函数和输入输出函数定义在主函数当中,在需要时通过相应的选项进行调用。而试分配与安全性测试是并列的两个函数,存在执行试分配后需对安全序列进行判断。输入输出函数,确定数值,并将相对应的数据输入到对应的模块,来进行计算。3.3 数据结构程序当中需要四种数据结构。1、可利用资源矩阵(Available)

7、,当Available=k时,这表示系统中有该类资源k个。 2、最大需求矩阵(Max),当Max=k时,则表示进程需要的资源为k个。3、分配矩阵(Allocation),当Allocation=k时,则表示进程当前已被分得k个资源。 4、需求矩阵(Need),当Need=k时,则表示进程还需要k个资源才能够完成。3.4算法思想操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进

8、程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。4详细设计4.1 程序模块划分:4.1.1 数据的初始化:根据提示输入最大需求矩阵(Max),可利用资源量(Available),分配矩阵(Allocation)所需的数据。4.1.2 输出所对应的矩阵: 根据输入的数据输出对应的矩阵,并且计算出需求矩阵(Need),将完整的算法需要的数据呈现给操作者。4.1.3 试分配:根据操作者所输入的进程号已经请求,对系统进行时分配。4.1.4 安全测试当试分配完成时可进行安全性测试,当进程间是安

9、全的时候则可以输出相应的安全序列。如果错误,则可以回到数据的初始化状态。4.2 数据判断 当输入的数据不符合规定时,可以对该数据进行判断,不符合条件重新输入,例如:if(!(0=in&in=t-1),在程序中,用于判断所输入的进程号是否满足要求,如果不满足要求通过该语句输出“cout该进程不存在,重新输入endl;”。4.3 函数调用通过switch语句对所调用的函数进行判断。 switch(choice) case 1: Input();break;/输入相关数据函数 case 2: Print();break;/打印输出相关数据表函数 case 3: cout请输入有请求的进程号: bre

10、ak; case 4: checksafe(in); break;/安全性检查 case 5: refenpei(in); break;/恢复数据 4.4程序流程图4.4.1数据初始化流程图4.4.2安全性流程图5 测试与分析5.1程序调试:1、在数据初始化当中要考虑到输入进程数是否为负数,是否为字符。2、在安全性算法当中要考虑到当不安全时,数据能否恢复,是否可以重新进行分配。当输入的Request大于Need或者大于Available的情况,当大于是需要重新输入。5.2 程序测试: 5.2.1输入初始化:5.2.2 矩阵输出5.2.3 安全序列输出5.2.4进程不安全时 6 参考文献 1 汤

11、小丹 梁红兵 哲凤屏 汤子瀛,计算机操作系统(第三版),西安: 西安电子科技大学出版社 2 王长元 李晋惠 等编著 ,软件工程 ,西安: 西安地图出版社 3 孟庆昌 等编著 ,操作系统原理, 北京: 机械工业出版社 4 左万历 周长林 彭涛,计算机操作系统教程(第三版),北京: 高等教育出版社 5 陈志泊 王春玲 孟伟,面向对象的程序设计语言c+(第二版),北京: 人民邮电出版社7附录:源程序清单#include #define M 10 /资源类数#define N 50 /进程数void Input(); /用于输入的函数void Print(); /用于打印输出表格的函数void try

12、fenpei(int i);/试分配函数void checksafe(int x);/安全检测函数void refenpei(int i);/恢复数据函数/定义初始化数组 int AvailableM, MaxNM, AllocationNM, NeedNM, RequestM; int c,t;/资源进程 int in;/用户选择的进程号/*-*/void main( ) int choice; char ch=Y; coutc; coutt; do if(ch=Y|ch=y) cout银行家算法endl; cout1:输入所需数据 endl; cout2:显示矩阵 endl; cout3:

13、试分配 endl; cout4:检查安全性 endl; cout5:恢复数据到初始状态 endl; cout*endl; coutchoice; switch(choice) case 1: Input();/输入相关数据函数 break; case 2: Print();/打印输出相关数据表函数 break; case 3: coutin) if(!(0=in&in=t-1) cout该进程不存在,重新输入endl; else break; tryfenpei(in);/试分配 break; case 4: checksafe(in);/安全性检查 break; case 5: refenp

14、ei(in);/恢复数据 break; default: cout请(1-5)中选择正确的操作序号!endl; break; cout要继续进行吗?(y-是 n否); else if(ch=N|ch=n) cout正在退出.endl; break; else cout输入无效!重新输入.ch);/*-main函数结束-*/*-输入函数-*/void Input() int j,n,m; cout输入 可利用资源:endl; for(j=0;jc;j+) /cout请输入 AvailablejAvailablej) if(Availablej0) cout输入数字无效,请重新输入endl; el

15、se break; ; cout输入 最大需求:endl; for(n=0;nt;n+)/各个进程循环输入 for(m=0;mMaxnm) if(Maxnm0) cout输入数字无效,请重新输入endl; else break; ; cout输入 占有资源:endl; for(n=0;nt;n+)/各个进程循环输入 for(m=0;mAllocationnm) if(Allocationnm0) cout输入数字无效,请重新输入endl; else break; Neednm=Maxnm-Allocationnm; cout初始化完成!.endl;/*-输入函数结束-*/*-输出函数-*/vo

16、id Print() int i,j; cout|*|*|*|*|*|endl; cout|*| | | | |endl; cout| 进程| Max | Allocation | Need | Available |endl; cout|*|*|*|*|*|endl; for(i=0;it;i+) cout| pi | ; for(j=0;jc;j+) coutMaxij ; cout| ; for(j=0;jc;j+) coutAllocationij ; cout | ; for(j=0;jc;j+) coutNeedij ; cout| ; if(i=0) for(j=0;jc;j+)

17、 coutAvailablej ; cout0) cout |; coutendl; cout|*|*|*|*|*|endl;/*-输出函数结束-*/*-试分配函数-*/void tryfenpei(int n) int i; cout您输入的是 pn 进程endl; cout该进程需求量为: ; for(i=0;ic;i+) coutNeedni ; coutendl; cout请输入请求资源的数目:; for(i=0;iRequesti) if (Requesti0) cout!输入的数字无效.Needni) cout!超出进程需求量endlAvailablei) cout!系统没有足够的

18、可用资源量满足进程需要endlendl; else break; cout输入成功,输入的是:; for(int f=0;fc;f+) coutRequestf ; coutendl; cout执行银行家算法,进行试分配.endl;for( f=0;fc;f+) Availablef = Availablef - Requestf; Allocationnf = Allocationnf + Requestf; Neednf = Neednf-Requestf; cout试分配完成!endl; /*-试分配函数结束-*/*-安全检测函数-*/void checksafe(int x) cout

19、进入安全性检测.endl; int i,m,apply,j,k=0,flag=0; int WorkM,tempN; bool FinishN; /t为进程数 for(i=0;ic;+i) Worki=Availablei; for(i=0;it;i+) Finishi=false; for(i=0;it;i+) apply=0; for(j=0;jc;j+) if (false=Finishi & Needij=Workj) apply+;/标记是否所需的资源都得到满足 if(apply=c) for(m=0;mc;m+) Workm=Workm+Allocationim;/变分配数 w=w

20、+a Finishi=true; tempk+=i;/将满足的进程号存入temp数组中 i=-1; /若有进程满足条件则从头开始寻找 for(i=0;it;i+) if(Finishi=false) cout试分配后系统不安全! 本次资源申请不成功!endl; cout等待恢复原来的数据.endl; refenpei(in); return ; cout安全序列:endl; cout分配的序列:; for(i=0;it-1;i+) coutPtempi; coutPtempt-1endl; cout已通过安全性测试!endl; cout开始给第 pin进程分配资源.endl; cout分配完成!等待打印输出.endl; Print(); return ;/*-安全性检查函数结束-*/*-恢复数据函数-*/void refenpei(int i) for(int f=0;fc;f+) Availablef = Availablef + Requestf; Allocationif = Allocationif - Requestf; Needif = Needif + Requestf; cout数据已恢复初始状态.endl;Print();设计体会教师评语:成绩: 指导教师:设计体会教师评语:成绩: 指导教师:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1