完整word版《银行家算法的模拟实现》—实验报告.docxVIP

完整word版《银行家算法的模拟实现》—实验报告.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
精品文档 精品文档 PAGE PAGE13 精品文档 PAGE 《银行家算法的模拟实现》 -- 实验报告 题 目: 银行家算法的模拟实现 专 业: 班 级: 组 员: 指导老师: 一、实验目的 死锁会引起计算机工作僵死, 因此操作系统中必须防止。 本实验的目的在于让学生独立 的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生,以加深对课堂上所讲授的知识的理解。 二、实验内容 模拟实现银行家算法实现死锁避免。要求:初始数据(如系统在况、每一种资源的总数量)从文本文件读入,文件中给出最大需求矩阵  T0  时刻的资源分配情Max、分配矩阵 Allocation  ,在程序中求得需求矩阵  Need和可利用资源向量  Available。 三、实验分析过程 1、整个银行家算法的思路。 先对用户提出的请求进行合法性检查,再进行预分配,利用安全性检查算法进行安全性检查。 1)进程一开始向系统提出最大需求量 . 2)进程每次提出新的需求 (分期贷款)都统计是否超出它事先提出的最大需求量 . 3)若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的剩余资源量,若不超出,则分配,否则等待 2、算法用到的主要数据结构和 C语言说明。 (1)、可利用资源向量 INT AVAILABLE[M] M为资源的类型。 (2)、最大需求矩阵 INT MAX[N][M] N为进程的数量。 3)、已分配矩阵INTALLOCATION[N][M] (4)、还需求矩阵 INTNEED[N][N] (5 )、申请各类资源数量 intRequest[x];// (6 )、工作向量 intWork[x]; (7 )、intFinish[y];//表示系统是否有足够的资源分配给进程, 0为否,非 0为是 3、银行家算法 (主程序) 1)、系统初始化。输入进程数量,资源种类,各进程已分配、还需求各资源数量,各资源可用数量等 2)、输入用户的请求三元组(I,J,K),为进程I申请K个J类资源。 (3)、检查用户的请求是否小于还需求的数量,条件是  K=NEED[I,J]。如果条件不符则 提示重新输入,即不允许索取大于需求量 (4)、检查用户的请求是否小于系统中的可利用资源数量,条件是 K=AVALIABLE[I,J] 如果条件不符则申请失败,阻塞该进程,重新进行进程动态资源申请(使用 goto 句)  。 语 5)、进行资源的预分配,语句如下: AVALIBLE[I][J]=AVALIBLE[I][J]-K; ALLOCATION[I][J]=ALLOCATION[I][J]+K ; NEED[I][J]=NEED[I][J]-K ; 6)、系统调用安全性检查算法(checksafe()函数)进行检查,如果检查通过,则不用回收,否则进行回收,进程资源申请失败进入等待。 4、安全性检查算法( checksafe()子函数) (1)、设置两个临时变量。 FINISH[N]记录进程模拟执行的结束状态,初值为0,如果可以模拟执行结束,则可设为1,也可设为其它非零值以表示执行的先后次序。 WORK[M]记录模拟执行中资源的回收情况,初值为 AVAILABLE[M] 的值。 2)、在进程中查找符合以下条件的进程。条件1:FINISH[I]=0 条件2:NEED[I][J]〈=WORK[J] 3)、如果查找成功则进行资源的模拟回收,语句如下: WORK[J]=WORK[J]+ALLOCATION[I][J]; FINISH[I]=1 或查找到的顺序号 4)、如果查找不成功,则检查所有进程的FINISH[],如果有一个为0,则系统不为0,返回不成功标志。否则返回成功标志。 四、系统流程图 开始 输入资源数 m,及各类资源总数,初始化 输入进程数 n, Y i≤n N 输入进程 i的最大需求向量 max≤资源 N 提 示 Y 错 误 i加1 初始化 need Y 所有进程运行 Need矩阵为 结束  N 任选一个进程作为 该进程的Need Y 该进程已运行 向量为0 N 输入该进程的资源请求量 调用银行家算法,及安全 性算法,完成分配,或并 五、程序源代码 #includeiostream.h #includestdio.h #includestdlib.h constunsignedshortc=3;//资源类数 constunsignedshortt=5;//进程数 voidprint();//用于打印输出表格的函数 voidinput();//用于输入的函数 voidtryfenpei(inti);// 试分配函数; voidrefenpei(inti);//恢复数据函数 voidc

文档评论(0)

134****7173 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档