版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中南大学软件技术课程设计报告课程名称:模拟银行家算法原理班级: 学号: 姓名: 指导老师: 2009年5月2日一 设计目的模拟实现银行家算法,用银行家算法实现资源分配。二 问题描述在死锁的避免中,银行家算法把系统状态分为安全状态和不安全状态,只要能使系统始终处于安全状态,便可以避免发生死锁。所谓安全状态,是指系统能按某种顺序为每个进程分配所需资源,直到最大需求,使每一个进程都可以顺利完成,即可找到一个安全资源分配序列。模拟实现这个工作过程。三 设计思路我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制
2、定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。四 详细设计1、初始化由用户输入数据,分别对可利用资源向量矩阵available、最大需求矩阵max、分配矩阵allocation、需求矩阵need赋值。2、银行家算法在避免死锁的方法中,
3、所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。设进程cusneed提出请求request i,则银行家算法按如下规则进行判断。(1)如果request cusneed i= needcusneedi,则转(2);否则,出错。(2)如果request cusneed i= availablecusneedi,则转(3);否则,出错。(3)系统试探分配资源,修改相关数据: availablei-=requestcusnee
4、di; allocationcusneedi+=requestcusneedi; needcusneedi-=requestcusneedi;(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。(5)对于某一进程i,若对所有的j,有needij=0,则表此进程资源分配完毕,应将占用资源释放。3、安全性检查算法(1)设置两个工作向量work=available;finish(2)从进程集合中找到一个满足下述条件的进程,finish=false;needneedi或者requestiavailablei报错,重新输入availablei-=request i
5、;allocationi+=request i;needi-=requesti;初始化安全性检查安全availablei+=request i;allocationi-=request i;needi+=requesti;保持原分配进程执行完释放资源继续分配结束yesnoyesnoyesyesnono四 源程序:#include #include #include /#include /#includeusing namespace std;#define maxprocess 50 /*最大进程数*/ #define maxresource 100 /*最大资源数*/int availabl
6、emaxresource; /*可用资源数组*/int maxmaxprocessmaxresource; /*最大需求矩阵*/int allocationmaxprocessmaxresource; /*分配矩阵*/int needmaxprocessmaxresource; /*需求矩阵*/int requestmaxprocessmaxresource; /*进程需要资源数*/int summitmaxresource=0 ; /*各种资源总量*/int needcmaxresource=0; /*辅助向量*/bool finishmaxprocess; /*系统是否有足够的资源分配*/
7、int pmaxprocess; /*记录序列*/int m,n; /*m个进程,n个资源*/void init();bool safe();void bank();void main() /textbackground(0); /* 设置屏幕背景色 */ init(); safe(); bank();void init() /*初始化算法*/int i,j; cout endl; cout 银行家算法模拟endl; cout endl;cout 通信0602 唐敏 0401060223 endl; cout endl;cout endl;cout 算法简介:endl;cout 在避免死锁的方
8、法中,所施加的限制条件较弱,有可能获得令人满意endl; cout 的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要endl; cout 能使系统始终都处于安全状态,便可以避免发生死锁endl;cout 银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是endl;cout ,才分配。它是最具有代表性的避免死锁的算法。endl;cout endl;cout endl;cout endl;cout endl;cout 请稍候.6秒后跳入主界面 endl; sleep(6000); system(cls); cout endl; cout 运行界面endl; couten
9、dl;cout请输入进程的数目:m; cout请输入资源的种类:n; cout请输入每个进程最多所需的各资源数,按照mxn矩阵输入endl; for(i=0;im;i+) for(j=0;jmaxij; cout请输入每个进程已分配的各资源数,也按照mxn矩阵输入endl; for(i=0;im;i+) for(j=0;jallocationij; needij=maxij-allocationij; if(needij0) cout您输入的第i+1个进程所拥有的第j+1个资源数错误,请重新输入:endl; j-; continue; for(j=0;jn;j+) /已分配各资源总数for(i
10、=0;im;i+) needcj=allocationij+needcj; / for(i=0;in;i+) /此四行用于检验 / / coutneedci ; / cout请输入各个资源现有的数目:endl; for(i=0;iavailablei; for(i=0;in;i+) /总资源数 summiti=availablei+ needci; /for(i=0;in;i+) /检验用/coutsummiti ; / cout endl;coutendl; cout初始化后状态显示:endl;cout每个进程最多所需的各资源数endl; for(i=0;im;i+) for(j=0;jn;
11、j+) coutmaxij ;if(j=n-1)cout endl; cout每个进程已分配的各资源数endl; for(i=0;im;i+) for(j=0;jn;j+) coutallocationij ;if(j=n-1)cout endl; cout各个资源现有的数目:endl; for(i=0;in;i+)coutavailablei ; cout endl; coutendl;void bank() /*银行家算法*/ int i,j,cusneed; char again; int sum=0; /*监测某一进程资源是否分配完毕*/int add=0; while(1) cout
12、请输入要申请资源的进程号(注:第1个进程号为0,依次类推)cusneed; cout请输入进程所请求的各资源的数量endl; for(i=0;irequestcusneedi; / / for(i=0;ineedcusneedi) cout您输入的本个请求数超过进程的需求量!请重新输入!availablei) cout您输入的本个请求数超过系统有的资源数!请重新输入!endl; i-;continue; for(i=0;in;i+) /资源分配 availablei-=requestcusneedi; allocationcusneedi+=requestcusneedi; needcusne
13、edi-=requestcusneedi; if(safe() coutendl; cout同意分配请求!endl; cout此次分配后状态显示:endl; cout当前每个进程最多尚需的各资源数endl; for(i=0;im;i+)for(j=0;jn;j+) coutneedij ;if(j=n-1)cout endl; cout当前每个进程已分配过的各资源数endl; for(i=0;im;i+) for(j=0;jn;j+) coutallocationij ;if(j=n-1)cout endl; for(i=0;im;i+) for(j=0;jn;j+) add=needij+a
14、dd; /是否已分配完毕 if(add!=0)for(i=0;in;i+) sum=needcusneedi+sum; coutsum值:sumendl;/coutsum ;cout endl; if (sum=0) for(i=0;in;i+) availablei= allocationcusneedi+availablei; sum=0; cout各个资源现有的数目:endl; for(i=0;in;i+)coutavailablei ; cout endl;add=0; /coutadd endl;elsecout各个资源现有的数目:endl; for(i=0;in;i+)coutsu
15、mmiti ; cout endl; coutendl; else cout您的请求被拒绝!endl; /撤消资源分配 for(i=0;in;i+) availablei+=requestcusneedi; allocationcusneedi-=requestcusneedi; needcusneedi+=requestcusneedi; for(i=0;im;i+) finishi=false; cout您还想再次请求分配吗?是请按y/y,否请按其它键again; if(again=y|again=y) continue; break; /跳出while bool safe() /*安全性
16、算法*/ int i,j,k,l=0; int workmaxresource; /*工作数组*/ for(i=0;in;i+) worki=availablei; for(i=0;im;i+) finishi=false; for(i=0;im;i+) if(finishi=true) continue; else for(j=0;jworkj) break; if(j=n) finishi=true; /finish在此被赋值,表进程i可顺利进行 for(k=0;kn;k+) /并假设已执行完成 workk+=allocationik; pl+=i; i=-1; /再从i=0开始判断 el
17、se continue; if(l=m) /所有进程都可完成 cout系统是安全的endl; cout安全序列:endl; for(i=0;il;i+) cout cout; coutendl; return true; cout系统是不安全的endl; return false; 五 运行调试及结果说明初始化时若已分配资源多于最多所需资源则会报错,需重新输入(如上图所示)初始化后状态显示资源分配时请求量超过需求量或现有资源数同样会报错(如上图)特殊情况:若申请资源数既不大于资源需求量,又不大于现有资源数,但仍有可能导致死锁,如上图所示。此时会显示系统不安全,请求被拒绝。(为便于说明,以上均采用二阶矩阵。其他类型矩阵原理相同)sum=0,表某一进程资源分配完毕,资源释放(请结合第四个图)六 总结本次设计中首先要解决的问题是对所做题目的理解。简单的文字描述总是生涩难懂,像银行家算法这一问题,如果单看题目要求往往不知如何下手,更不要谈下一步的设计过程。但倘若联系实际生活中银行贷款这一现象,再来看问题时,一切开始显得清晰,再加上老师的指点,便可以把自己究竟该作何工作搞清楚。这也给我一启示,我们要解决的诸多问题都源自生活,若要解决它,联系实际是个很不错的选择。明白了需求,下一个难点是如何通过软件实现。我所做
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 8月财务人员工作计划
- 环境院工会工作计划书
- 幼儿园小班教师个人工作计划书
- 2024年度玩具喷漆彩绘承包合同3篇
- 工作计划社区团委工作计划
- 农村计划范文生育工作现状问题及对策
- 2024幼儿园教研活动计划范本
- 年级语文教学计划
- 社区半年工作总结及计划
- 9年级化学教学计划
- 高三英语写作专项道歉信 感谢信 投诉信课件
- 高中数学高级教师职称评审答辩题目
- 高净值个人财富管理税务风险与应对课件讲义
- 护工培训教学课件
- 医院个人岗位廉政风险排查登记表(空表)
- (精选)大学无机化学期末试卷及答案
- 糖尿病中医治疗及护理课件整理
- 初中数学北师大七年级上册第五章一元一次方程一元一次方程复习PPT
- 关于进一步加强建设工程施工合同管理的通知
- 地产公司适老化产品设计指引操作手册
- 《国际人才蓝皮书:中国国际移民报告(2023)》
评论
0/150
提交评论