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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

银行家算法.docx

1、银行家算法银行家算法的模拟实现1. 课程设计题目银行家算法的模拟实现。应用银行家算法验证进程安全性检查及分配资源。2. 课程设计目的 本设计的目的是通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。了解进程产生死锁的原因,了解为什么要进行死锁的避免。掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的理解。3.课程设计的开发语言C+编程语言4.功能描述A.输出资源分配情况B.输出资源分配后后的情况C.银行家算法: 设进程i提出请求Requestn,则银行家算法按如下规则进 行判断。 (1)如果RequestnNeed

2、i,n,则报错返回。 (2)如果RequestnAvailable,则进程i进入等待资源状态并返回。 (3)假设进程i的申请已获批准,于是修改系统状态: Available=Available-Request Allocation=Allocation+Request Need=Need-Request (4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。D.安全性检查 (1)设置两个工作向量Work=Available;FinishM=False (2)从进程集合中找到一个满足下述条件的进程, Finish i=False Need=Work (3)如

3、找到,执行(3);否则,执行(4) 设进程获得资源,可顺利执行,直至完成,从而释放资源。 Work=Work+Allocation Finish=True GO TO 2 (4)如所有的进程FinishM=true,则表示安全; 否则系统不安全。5.方案论证5.1.实验原理分析5.1.1. 算法的来源及基本思想银行家算法,顾名思义是来源于银行的借贷业务,通过这个算法可以用来解决生活中的实际问题,如银行贷款等。一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用

4、,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。5.1.2. 死锁产生的条件银行家算法是用来避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。死锁的产生,必须同时满足四个条件:A、即一个资源每次只能由一个进程使用;B、第二个为等待条件,即一个进程请求资源不能满足时,它必须等待,单它仍继续宝石已得到的所有其他资源;C、第三个为非剥夺条件,即在出现死锁的系统中一定有不可剥夺使用的资源;D、第四个为循环等待条

5、件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。防止死锁的机构只能确保上述四个条件之一不出现,则系统就不会发生死锁。银行家算法是避免死锁的方法中,施加的限制条件较弱的,有利于获得令人满意的系统性能的方法。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。5.1.3 模拟进程申请资源把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态。当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。显

6、然,每个进程的资源需求总量不能超过系统拥有的资源总数, 银行算法进行资源分配可以避免死锁.5.2.程序结构分析:5.2.1. 程序流程图程序流程图是人们对解决问题的方法、思路或算法的一种描述。 流程图的优点:(a)采用简单规范的符号,画法简单;(b)结构清晰,逻辑性强;(c)便于描述,容易理解。 流程图采用规范的符号(1)起始框(2)终止框 (3)执行框(4)判别框 图1银行家算法流程图6程序及说明算法用到的主要数据结构和C语言说明。(1)可利用资源向量 INT AVAILABLEM M为资源的类型。(2)最大需求矩阵 INT MAXNM N为进程的数量。(3)已分配矩阵 INT ALLOCA

7、TIONNM (4)还需求矩阵 INT NEEDN假设有M个进程N类资源,则有如下数据结构:#define W 10#define R 20int M ; int N ; int ALL_RESOURCEW; int MAXWR; int AVAILABLER; int ALLOCATIONWR; int NEEDWR; int RequestR; (5)各子模块相关函数代码已经在附录中一一列出。6.1 示例数据进程数:2资源数:2资源0:10资源1:20资源0(最大需求)资源1(最大需求)进程001进程11020资源0(已占有)资源1(已占用)进程000进程1687设计结果与分析 图2输入数

8、据完成初始化注:初始化时,如果输入数据不符合要求,程序能给出错误提示并要求使用者重新输入数据。为简便期间,省去此功能的截屏图像。演示者可以自行上机体会。计算机自动检测水所有进程能否构成一个安全序列。图3手动为进程申请资源如果能够构成安全序列,就显示出是否进行手动申请资源。输入k 开始手动申请资源。 图4申请资源的进程号申请资源并进行安全性检查。 图5选择是否继续演示用户根据根据该界面选择是否继续演示操作。图6配置资源数用户根据此界面进行配置相应的资源数目。图7选择退出演示运行界面用户输入输入N结束演示。7.3 出现问题及解决方案源程序中未考虑进程状态会随着程序运行发生变化,为了完善程序专门编写

9、了状态函数void set()来显示进程状态。如图6-2-2与图6-2-4倒数2、3行中均显示了进程状态。源程序中指定资源数必须是三种,经过改进后资源数可以为1到10中的任意数。源程序资源矩阵的输出界面不能自动适应数据长度的变化,修改后资源的矩阵输出界面中的数据显示获得了改善。8. 设计心得体会这次课程设计没有将程序初始化代码段分离出来,以至于程序的结构不清晰,由于初始化代码不是一个独立的函数致使程序的可读性较差。作课程设计时应尽量把功能模块设计好考虑好,使程序易于理解。设计中得到了老师和广大同学的帮助,并参考了网络上的优秀论文和纸质文件,使我的课程设计能够较为顺利的进行下去。9.附录(关键源

10、代码)#include string.h #include iostream#include iomanipusing namespace std;#define FALSE 0 #define TRUE 1 #define W 10#define R 20int FINISHW;int M ;int N ; int ALL_RESOURCEW;int MAXWR; int AVAILABLER; int ALLOCATIONWR; int NEEDWR; int RequestR; int WORK100;int Q100;int L=0;void showdata() int i,j; c

11、out endl; cout各种资源的总数量(all):endl; cout ; for (j=0;jN;j+)cout 资源j: ALL_RESOURCEj; coutendlendl; cout系统目前各种资源可用的数为(available):endl; cout ; for (j=0;jN;j+)cout 资源j: AVAILABLEj; coutendlendl; cout; cout 各进程还需要的资源量(need):endlendl; cout ; for (j=0;jN;j+)coutsetw(8)资源j; for (i=0;iM;i+) coutendl进程pi:; for (

12、j=0;jN;j+)coutsetw(8)NEEDij;/ ;/; coutendl; cout; cout 各进程已经得到的资源量(allocation): endlendl; cout ; for (j=0;jN;j+)coutsetw(8)资源j; for (i=0;iM;i+) coutendl进程pi:; for (j=0;jN;j+)coutsetw(8)ALLOCATIONij; coutendl; void changdata(int k) int j; for (j=0;jN;j+) AVAILABLEj=AVAILABLEj-Requestj; ALLOCATIONkj=A

13、LLOCATIONkj+Requestj; NEEDkj=NEEDkj-Requestj; void rstordata(int k) int j; for (j=0;jN;j+) AVAILABLEj=AVAILABLEj+Requestj; ALLOCATIONkj=ALLOCATIONkj-Requestj; NEEDkj=NEEDkj+Requestj; int chkerr(int s) int WORKrest;/FINISHW int i,j,k=0; for(i=0;iM;i+)FINISHi=FALSE; for(j=0;jN;j+) WORKrest=AVAILABLEj;

14、 i=s; do if(FINISHi=FALSE&NEEDij=WORKrest) WORKrest=WORKrest+ALLOCATIONij; FINISHi=TRUE; i=0; else i+; while(iM); for(i=0;iM;i+) if(FINISHi=FALSE) coutendl; cout 系统不安全! 本次资源申请不成功!endl; coutendl; return 1; cout进程pi状态: 阻塞endl; coutendl; cout 经安全性检查,系统安全,本次分配成功。endl; coutendl; return 0; void set() int

15、t10; for(int i=0;iM;i+) ti=0; for(int j=0;jN;j+)if(NEEDij=0) ti+=1; for(i=0;iM;i+) if(ti=N) cout进程pi状态: 运行结束endl; for(int k=0;kN;k+) AVAILABLEk=AVAILABLEk+ALLOCATIONik; ALLOCATIONik=0; else cout进程pi状态: 等待调用endl; void safe() coutendl现在计算机自动检测是否存在安全序列endl; int i,j; for(j=0;jN;j+) WORKj=AVAILABLEj; int

16、 flag=0; for(i=0; iM;i+) FINISHi=FALSE; for(i=0; iM;i+) if(FINISHi=FALSE) flag=0; for(j=0; j=NEEDij) flag=flag+1; else break; if(flag=N) QL=i; FINISHi=TRUE; for(j=0; jN;j+) WORKj=WORKj+ALLOCATIONij;/coutbWORKj; L=L+1; /coutLendl; cout进程pi资源释放后系统目前各种资源可用的数为(available):endl;/ cout*; coutlLendl; couten

17、dl; for (j=0;jN;j+) cout 资源j: WORKj; coutendlendl; i=0; else; int test() if (LM) coutn当前状态不安全!; cout不存在安全序列 endl; cout您不能向系统申请资源endl; cout计算机检测结束endl; return 0; else int i; /l=0; coutn此时处于安全的状态!endl; coutendl; cout安全序列是: ; for (i=0; iM; i+) cout进程pQi ; FINISHi=FALSE; coutendl; cout计算机检测结束endl; retur

18、n 1; void bank() int i=0,j=0; /i=0;intj=0; char flag=Y; while(flag=Y|flag=y) i=-1; while(i=M) coutendl; cout 请输入需申请资源的进程号(从P0到PM-1,否则重输入!):; couti; if(i=M)cout 输入的进程号不存在,重新输入!endl; cout 请输入进程Pi申请的资源数:endl; for (j=0;jN;j+) cout 资源jRequestj; if(RequestjNEEDij) cout 进程Pi申请的资源数大于进程Pi还需要j类资源的资源量!; cout申请

19、不合理,出错!请重新选择!endlAVAILABLEj) /若请求的资源数大于可用资源数 cout 进程Pi申请的资源数大于系统可用j类资源的资源量!; cout申请不合理,出错!请重新选择!endlendl; flag=N; break; if(flag=Y|flag=y) changdata(i); if(chkerr(i) rstordata(i); showdata(); else showdata(); set(); else showdata(); coutendl; coutflag; void main() cout*endl; cout欢迎使用银行家安全性算法模拟程序endl

20、; coutendl; cout 本程序由C+编制完成 endl; coutendl; cout*endl; int i=0,j=0,p; docout请输入总进程数:M;while(M0); docout请输入总资源种类:N;while(N0); cout请输入总资源数(all_resource):endl; for(i=0;iN;i+) cout资源iALL_RESOURCEi; cout依次输入各进程所需要的最大资源数量(max):endl; for (i=0;iM;i+ for (j=0;jN;j+) do cout进程i所需; coutjMAXij; if (MAXijALL_RES

21、OURCEj) coutendl所需资源超过了声明的该资源总数,请重新输入ALL_RESOURCEj); cout依次输入各进程已经占据的资源数量(allocation):endl;for (i=0;iM;i+) for (j=0;jN;j+) do cout进程i已占有; coutjALLOCATIONij; if (ALLOCATIONijMAXij) coutendl占有资源超过了所需的最大资源,请重新输入MAXij); for (j=0;jN;j+) p=ALL_RESOURCEj; for (i=0;iM;i+) p=p-ALLOCATIONij; AVAILABLEj=p; if(

22、AVAILABLEj0) AVAILABLEj=0; for (i=0;iM;i+) for(j=0;jN;j+) NEEDij=MAXij-ALLOCATIONij; safe(); if (test()=0); else char letter; coutendlletter; if (letter=k) showdata(); bank(); ;10.参考文献1 汤子赢 计算机操作系统(修订版)M. 西安:电子科技大学出版社 2006:20-100 2 屠立德 操作系统基础(第三版)M.北京:清华大学出版社 2000:34-503 庞丽萍 操作系统原理M. 武汉:华中科技大学出版社 2000:55-1204 曹聪,范廉明. 操作系统原理与分析M. 北京:科学出版社 2003:1-100

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

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