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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

银行家死锁避免算法模拟.docx

1、银行家死锁避免算法模拟银行家死锁避免算法模拟1.课程设计目的通过本次实验掌握银行家死锁避免算法的基本思想。当进程提出资源申请时,能够用 该算法判断是否拒绝进程请求。2.课程设计摘要银行家算法:我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的 资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照 银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对 资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的 申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试 该进程已占用的资源数与本次申请的资源数之和是否超过了该进程

2、对资源的最 大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否 满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也 要推迟分配。4.课程设计原理分析在多道程序系统中,虽可借助于多个进程的并发执行,来改善系统的资源 利用率,提高系统的吞吐量,但可能发生一种危险一一死锁。所谓死锁,是指 多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵局状 态时,若无外力作用,它们都将无法再向前推进。为保证系统中诸进程的正常 运行,应事先采取必要的措施,来预防死锁。最有代表性的避免死锁的方法, 是Dijkstra的银行家算法。死锁:死锁的产生,必须同时满足四个条件

3、,第一个为互斥条件,即一个资源每 次只能由一个进程占用;第二个为请求和保持条件,指进程已经保持了至少一 个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进 程阻塞,但又对自己已获得的其他资源保持不放;第三个为非剥夺条件,即在 出现死锁的系统中一定有不可剥夺使用的资源;第四个为循环等待条件,系统 中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持 有的资源。防止死锁的机构只能确保上述四个条件之一不出现,则系统就不会 发生死锁。银行家算法原理:银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法 程序,加深了解有关资源申请、避免死锁等概念,并体会和了

4、解死锁和避免死 锁的具体实施方法。通过这个算法可以用来解决生活中的实际问题,如银行贷 款等。银行家算法,顾名思义是来源于银行的借贷业务,一定数量的本金要应多 个客户的借贷周转,为了防止银行家资金无法周转而倒闭,对每一笔贷款,必 须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题, 系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的 时间内归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程 循环等待资源,则进程都无法继续执行下去的死锁现象。把一个进程需要和已 占有资源的情况记录在进程控制中,假定进程控制块 PCB其中“状态”有就绪态、等待态和完成态。

5、当进程在处于等待态时,表示系统不能满足该进程当前 的资源申请。“资源需求总量”表示进程在整个执行过程中总共要申请的资源 量。显然,每个进程的资源需求总量不能超过系统拥有的资源总数 ,银行算法进行资源分配可以避免死锁算法思想:将一定数量的资金供多个用户周转使用, 当用户对资金的最大申请量不超过 现存资金时可接纳一个新客户,客户可以分期借款,但借款总数不能超过最大 的申请量。银行家对客户的借款可以推迟支付,但是能够使客户在有限的时间 内得到借款,客户得到所有的借款后能在有限的时间内归还。用银行家算法分配资源时,测试进程对资源的最大需求量,若现存资源能满足 最大需求就满足当前进程的申请,否则推迟分配

6、,这样能够保证至少有一个进 程可以得到所需的全部资源而执行到结束, 然后归还资源,若OS能保证所有进 程在有限的时间内得到所需资源则称系统处于安全状态。5.算法实现1.程序流程图:系统必须做若是,2.算法描述:银行家算法的设计思想是:当用户申请一组资源时,出判断;如果把这些资源分出去,系统是否还处于安全装他就可以分出这些资源;否则,该申请暂不能满足。3.数据结构描述:(n表示系统中进程的数目,m表示资源的分类数。)3.1.Available 是一个长度为m的向量,它表示每类资源可用的数量。Available j=k ,表示rj类资源可用的数量为k。3.2.Max是一个nxm矩阵,它表示每个进程

7、对资源的最大需求。 Maxi , j=k,表示进程pi至多可以申请k个rj类资源单位。3.3.Allocation 是一个nx m矩阵,它表示当前分给每个进程的资源数目。Allocation i , j=k,表示进程pi当前分到k个rj类资源。34 Need是一个nx m矩阵,它表示每个进程还缺少多少资源。Needi , j=k ,表示进程pi尚需k个rj类资源才能完成其任务。显然 Needi , j= Max i , j- Allocation i , j。这些数据结构的大小和数值随时间推移而改变。4.系统所执行的安全性算法描述如下:4.1.设置2个向量:工作向量 Work:它表示系统可提供

8、给进程继续 运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时, Work = Available 。Finishi:它表示系统是否有足够的资源分配给进程,使之完成运 行。开始时先做Finishi=true 。42从进程集合中找到一个满足下述条件的进程:Finishi=flase ; Needi,j Workj;若找到,则执行步骤3,否则,执行步骤4。43当进程pi获得资源后,可顺利执行,直至完成,并释放分配给 它的资源。4.4.如果所有进程的Finishi=true 都满足。则表示系统处于安全状态;否则,系统处于不安全状态。6.程序源代码#in clude #in clude #i

9、 nclude using n amespace std; #defi ne False 0#defi ne True 1各进程所需各类资源的最大需求 系统可用资源资源的名称int Allocatio n 100100=0;int M=100; 作业的最大数为 100int N=100; 资源的最大数为 100void showdata() 显示资源矩阵int i,j;cout 系统目前可用的资源 Avaliable:e ndl; for(i=0;iN;i+)cout n ameicoute ndl;for (j=O;jN;j+) coutAvaliablej ”; 输出分配资源coute n

10、dl;cout Max Allocation Neede ndl;cout 进程名 ;for(j=0;j3;j+) for(i=0;iN;i+) cout n amei;cout;coute ndl;for(i=0;iM;i+)cout i ;for(j=0;jN;j+)coutMaxij;cout;for(j=0;jN;j+)coutAllocationij;cout;for(j=0;jN;j+)coutNeedij;coute ndl;int cha ngdata(i nt i)/ 进行资源分配int j;for (j=0;jM;j+) Avaliablej=Avaliablej-Requ

11、estj;Allocatio n ij=Allocatio n ij+Requestj;Needij=Needij-Requestj;return 1;int safe()/ 安全性算法int i,k=O,m,apply,Fi nish100=0;int j;int flag=0;Work0=Avaliable0;Work1=Avaliable1;Work2=Avaliable2;for(i=0;iM;i+)apply=O;for(j=0;jN;j+)if (Fi ni shi=False&Needij=Workj)apply+;if(apply=N)for(m=0;mN;m+)Workm=W

12、orkm+Allocatio nim; 变分配数Fini shi=True;tempk=i;i=-1;k+;flag+;for(i=0;iM;i+)if(Fi ni shi=False)cout 系统不安全endl; 不成功系统不安全return -1;cout 系统是安全的!endl; 如果安全,输出成功cout 分配的序列:;for(i=0;iM;i+) 输出运行进程数组couttempi;if(iM-1) cout;coute ndl;return 0;void share() 利用银行家算法对申请资源对进行判定char ch;int i=0,j=0;ch=y;cout请输入要求分配的资

13、源进程号 (0-M-1i; 输入须申请的资源号cout请输入进程i 申请的资源:endl;for(j=0;jN;j+)cout n amej Requestj; 输入需要申请的资源for (j=O;jNeedij) 判断申请是否大于需求,若大于则出错cout 进程i申请的资源大于它需要的资源 ;cout 分配不合理,不予分配! Avaliablej) 判断申请是否大于当前资源, / 出错cout 进程i申请的资源大于系统现在可利用的资源 ;cout 分配出错,不予分配 !e ndl;ch= n;break;if(ch=y) cha ngdata(i);/ 根据进程需求量变换资源showdata

14、(); 根据进程需求量显示变换后的资源safe();/ 根据进程需求量进行银行家算法判断void addresources()/ 添加资源int n, flag;cout请输入需要添加资源种类的数量 :;cinn;flag=N;N=N+n;for(int i=0;in;i+)cout名称:;cinn ameflag;cout Avaliableflag+;showdata();safe();void cha ngeresources() 修改资源函数cout系统目前可用的资源 Avaliable:endl;for(int i=0;iN;i+)cout n amei:Avaliableie nd

15、l;cout输入系统可用资源Avaliable:Avaliable0Avaliable1Avaliable2; cout经修改后的系统可用资源为 endl;for (int k=0;kN;k+)cout n amek:Avaliableke ndl; showdata();safe();void delresources() 删除资源char ming;int i,flag=1;cout请输入需要删除的资源名称: ;docinming;for(i=0;iN;i+)if(mi ng=n amei)flag=0;break;if(i=N)cout 该资源名称不存在,请重新输入: ;while(fl

16、ag);for(i nt j=i ;jN-1;j+)n amej=n amej+1;Avaliablej=Avaliablej+1;N=N-1;showdata();safe();void addprocess() 添加作业int flag=M;M=M+1;cout请输入该作业的最大需求量 Maxendl;for(int i=0;iN;i+)cout n amei Maxflagi;Needflagi=Maxflagi-Allocati on flagi;showdata();safe();int mai n() 主函数int i,j,number,choice,m,n,flag;char m

17、ing;cout* 资源管理系统的设计与实现cout请首先输入系统可供资源种类的数量 :;cinn;N=n;for(i=0;i n; i+)cout 资源i+1的名称:;cinming;n amei=ming;cout 资源的数量cinnu mber;Avaliablei=nu mber;coute ndl;cout请输入作业的数量:;cinm;M=m;cout请输入各进程的最大需求量 (m*矩阵)Max:endl;for(i=0;im;i+)for(j=0;j Maxij;doflag=0;cout 请输入各进程已经申请的资源量 (m*n矩阵)Allocatio n:e ndl;for(i=

18、0;im;i+)for(j=0;j Allocatio nij;if(Allocati on ijMaxij)flag=1;Needij=Maxij-Allocati on ij;if(flag)cout 申请的资源大于最大需求量,请重新输入 !n;while(flag);showdata(); 显示各种资源safe(); 用银行家算法判定系统是否安全while(choice)case 1: addresources();break;case 2: delresources();break;case 3: cha ngeresources();break;case 4: share();bre

19、ak;case 5: addprocess();break;case 0: choice=0;break;default: cout 请正确选择功能号(0-5)!e ndl;break;return 1;调试及运行结果:检测结果如下:1假设系统只有一种资源a,剩余数量为2,分配情况如下:进程需求总量已占资源还需数量0844142229272假设系统只有一种资源a,剩余数量为2,分配情况如下:进程需求总量已占资源还需数量083514222945注:“系统不安全”表示此种情况是银行家算法也解不了的死锁3假设系统有2种资源a,b,a的剩余数量为4, b的剩余数量为3,分配情况如下:需求总量已占资源还需数量进程ababab0872265199217825624327.实验总结通过本次试验,加深了自己对于死锁问题和银行家算法的理解。对于银行家算法的思想有了更加深刻的认识, 并且意识到银行家算法并不是能避免所有的死锁,可以称这种情况为潜在的死锁。

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

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