1、淮海工学院计算机工程学院实 验 报 告 书课 程 名 : 操作系统原理 题 目: 银行家算法 班 级: D 软件 101 学 号: 511021012 姓 名: 陈衍 评语:成绩: 指导教师: 批阅时间: 年 月 日操作系统原理实验报告 - 1 -一、实验目的银行家算法是操作系统中避免死锁的典型算法,本实验可以加深对银行家算法的步骤和相关数据结构用法的更好理解。实验环境Turbo C 2.0/3.0 或 VC+6.0实验学时4 学时,必做实验。二、实验内容用 C 语言编写一个简单的银行家算法模拟程序,用银行家算法实现资源分配。程序能模拟多个进程共享多种资源的情形。进程可动态地申请资源,系统按各
2、进程的申请动态地分配资源。要求程序具有显示和打印各进程的某一时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源数量以及为某进程分配资源后的有关资源数据的情况。3、实验说明实验中进程的数量、资源的种类以及每种资源的总量 Totalj最好允许动态指定。初始时每个进程运行过程中的最大资源需求量 Maxi,j和系统已分配给该进程的资源量Allocationi,j均为已知(这些数值可以在程序运行时动态输入) ,而算法中其他数据结构的值(包括 Needi,j、 Availablej)则需要由程序根据已知量的值计算产生。4、实验步骤1、理解本实验中关于两种调度算法的说明。2、根据调度算法的说明,
3、画出相应的程序流程图。3、按照程序流程图,用 C 语言编程并实现。五、分析与思考1要找出某一状态下所有可能的安全序列,程序该如何实现?答:要找出这个状态下的所有可能的安全序列,前提是要是使这个系统先处于安全状态,而系统的状态可通过以下来描述:进程剩余申请数=最大申请数- 占有数;可分配资源数=总数-占有数之和;通过这个描述来算出系统是否安全,从而找出所有的安全序列。2银行家算法的局限性有哪些?答:银行家算法是一种最有代表性的避免死锁的算法。银行家算法即把操作系统看作是银行 家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。当进程在执行中继续申请资源
4、时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也操作系统原理实验报告 - 2 -要推迟分配。但任何一种算法都存在其缺点,对各进程的资源分配要求严格,经常使其处于不安全状态,银行家算法的主要局限是过于谨慎和检查各申请者对各类资源的最大需求量开销较大。六、测试数据与实验结果银行家算法流程图(1)所示:开始输入参数RequestilNeedll 出错返回YRequestilAvailablel 出错返回假定分配NYN假定分配后,系统安全
5、吗?申请成功,输出各数据变化。申请失败,以上分配作废,恢复原来分配结束是 否运行结果如图所示:操作系统原理实验报告 - 3 -图(1)图(2)七、实验心得与体会通 过 本 次 实 验 , 我 知 道 了 可 以 把 操 作 系 统 看 作 是 银 行 家 , 操 作 系 统 管 理 的 资 源 相 当 于 银 行家 管 理 的 资 金 , 进 程 向 操 作 系 统 请 求 分 配 资 源 相 当 于 用 户 向 银 行 家 贷 款 。 为 保 证 资 金 的 安 全 , 银 行 家 规 定 : 操作系统原理实验报告 - 4 -(1) 当 一 个 顾 客 对 资 金 的 最 大 需 求 量 不
6、 超 过 银 行 家 现 有 的 资 金 时 就 可 接 纳 该 顾 客 ; (2) 顾 客 可 以 分 期 贷 款 , 但 贷 款 的 总 数 不 能 超 过 最 大 需 求 量 ; (3) 当 银 行 家 现 有 的 资 金 不 能 满 足 顾 客 尚 需 的 贷 款 数 额 时 , 对 顾 客 的 贷 款 可 推 迟 支 付 , 但 总 能使 顾 客 在 有 限 的 时 间 里 得 到 贷 款 ; (4) 当 顾 客 得 到 所 需 的 全 部 资 金 后 , 一 定 能 在 有 限 的 时 间 里 归 还 所 有 的 资 金 . 操 作 系 统 按 照 银 行 家 制 定 的 规 则
7、为 进 程 分 配 资 源 , 当 进 程 首 次 申 请 资 源 时 , 要 测 试 该 进 程 对 资源 的 最 大 需 求 量 , 如 果 系 统 现 存 的 资 源 可 以 满 足 它 的 最 大 需 求 量 则 按 当 前 的 申 请 量 分 配 资 源 ,否 则 就 推 迟 分 配 。 当 进 程 在 执 行 中 继 续 申 请 资 源 时 , 先 测 试 该 进 程 本 次 申 请 的 资 源 数 是 否 超 过了 该 资 源 所 剩 余 的 总 量 。 若 超 过 则 拒 绝 分 配 资 源 , 若 能 满 足 则 按 当 前 的 申 请 量 分 配 资 源 , 否 则也 要
8、推 迟 分 配 。这 次 的 实 验 中 还 遇 到 一 些 问 题 , 在 同 学 的 帮 助 下 一 一 解 决 了 。附录#include#include#include#define False 0#define True 1int Max100100=0;/各进程所需各类资源的最大需求int Avaliable100=0;/系统可用资源char name100=0;/资源的名称int Allocation100100=0;/系统已分配资源int Need100100=0;/还需要资源int Request100=0;/请求资源向量int temp100=0;/存放安全序列int Wo
9、rk100=0;/存放系统可提供资源int M=100;/作业的最大数为 100int N=100;/资源的最大数为 100void showdata()/显示资源矩阵int i,j;cout“;couti;/输入须申请的资源号coutRequestj;/输入需要申请的资源for (j=0;jNeedij)/判断申请是否大于需求,若大于则出错 coutAvaliablej)/判断申请是否大于当前资源,若大于则 /出错coutn;flag=N;N=N+n;for(int i=0;inameflag;coutAvaliableflag+;showdata();safe();void delreso
10、urces()/删除资源char ming;int i,flag=1;coutming;for(i=0;iAvaliable0Avaliable1Avaliable2;coutMaxflagi;Needflagi=Maxflagi-Allocationflagi;showdata();safe();int main()/主函数int i,j,number,choice,m,n,flag;char ming;coutn;N=n;for(i=0;iming;namei=ming;coutnumber;Avaliablei=number;操作系统原理实验报告 - 9 -coutm;M=m;coutM
11、axij;doflag=0;coutAllocationij;if(AllocationijMaxij)flag=1;Needij=Maxij-Allocationij;if(flag)coutchoice;switch(choice)case 1: addresources();break;case 2: delresources();break;case 3: changeresources();break;case 4: share();break;case 5: addprocess();break;case 0: choice=0;break;default: cout“请正确选择功能号(0-5)!“endl;break;操作系统原理实验报告 - 10 -return 1;