操作系统课程设计——银行家算法的模拟实现讲课教案 下载本文

内容发布更新时间 : 2024/11/20 13:39:48星期一 下面是文章的全部内容请认真阅读。

实 验 报 告

题 目 名 称 院 系 信息工程学院 银行家算法的模拟实现 班 级 完成时间 指导老师 组长 联系电话 本次实验 成绩 邮件地址 组员(姓名, 学号) 组员(姓名, 学号) 组员(姓名, 学号) 组员(姓名, 学号) 主 要 原 理 及 所 参 考 的 资 料 ( 包 主要任务 程序算法的编写、实现、运行调试 主要任务 实验报告的完成 主要任务 实验报告的完成 银行家算法原理: 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。 为保证资金的安全,银行家规定: (1) 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客; (2) 顾客可以分期贷款,但贷款的总数不能超过最大需求量; (3) 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款; 括 实 验 内 容 及 条 件 ) (4) 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金. 操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。 主要参考书: 计算机操作系统第三版 西安电子科技大学出版社 汤子瀛主编 主 要 算 法 流 程 图 和 具 体 实 验 步 骤 算法流程图: 附录1 -- 银行家算法流程图 附录2 -- 安全性算法流程图 实验步骤: 一.银行家算法 进程i发出请求资源申请, (1)如果Request [j]<=need[i,j],转向步骤(2),否则认为出错,因为他所需要的资源数已经超过它所宣布的最大值。 (2)如果:Request i[j]<=available[i,j],转向步骤(3),否则表示尚无足够资源,进程i需等待。 (3)若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值: Available[i,j]= Available[i,j]- Request [j]; Allocation[i][j]= Allocation[i][j]+ Request [j]; need[i][j]= need[i][j]- Request [j]; (4)试分配后,执行安全性检查,调用check()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进 程;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。 (5)用do{…}while 循环语句实现输入字符y/n判断是否继续进行资源申请。 二.安全性检查算法(check()函数) (1)设置两个向量: 工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,在执行安全性算法开始时,Work= Available。 工作向量Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]=false;当有足够的资源分配给进程时,再令Finish[i]=true。 (2)在进程中查找符合以下条件的进程: 条件1:Finish[i]=false; 条件2:need[i][j]<=Work[j] 若找到,则执行步骤(3)否则,执行步骤(4) (3)当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Work[j]= Work[j]+ Allocation[i][j]; Finish[i]=true; goto step (2); (4)如果所有的Finish[i]=true都满足,则表示系统处于安全状态,否则,处于不安全状态。 主 要 算 法 流 程 图 和 具 体 实 验 步 骤 程序源代码及调试结果 附录3 -- 程序源代码 附录4 -- 程序运行调试结果