银行家算法实验报告(同名22949)_第1页
银行家算法实验报告(同名22949)_第2页
银行家算法实验报告(同名22949)_第3页
银行家算法实验报告(同名22949)_第4页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本文格式为word版,下载可任意编辑银行家算法实验报告(同名22949) 计算机操作系统试验报告 何美西 1 一、 试验名称: 银行家算法 二、 试验目的: 银行家算法是避开死锁的一种重要方法,通过编写 一个简洁的银行家算法程序,加深了解有关资源申请、避开死 锁等概念,并体会和了解死锁和避开死锁的详细实施方法。 三、 问题分析与设计: 1 、算法思路 : 先对用户提出的恳求进行合法性检查,即检查 恳求是否大于需要的,是否大于可利用的。若恳求合法,则进 行预安排,对安排后的状态调用平安性算法进行检查。若安 全,则安排;若担心全,则拒绝申请,恢复到原来的状态,拒 绝申请。 2 、银行家算法步骤:(

2、 1 )假如 request k or 二 need 则转向步 骤 (2) ;否则,认为出错,由于它所需要的资源数已超过它所 宣布的最大值。 (2) 假如 reques t or 二 available, 则转向步骤( 3 );否则,表 示系统中尚无足够的资源,进程必需等待。 (3) 系统摸索把要求的资源安排给进程 pi, 并修改下面数据结 构中的数值: available=available-requesti; allocation=allocation+request; need=need-request; (4) 系统执行平安性算法,检查此次资源安排后,系统是否处于 平安状态。 3 、平

3、安性算法步骤: ( 1 )设置两个向量 工作向量 work 。它表示系统可供应进程连续运行所需要的各类资 源数目,执行平安算法开头时, work=allocation; 布尔向量 finish 。它表示系统是否有足够的资源安排给进程,使 之运行完成,开头时先做 finishi=false ,当有足够资源安排给进程 时,令 finishi=true 。 ( 2 ) 从进程集合中找到一个能满意下述条件的进程: finishi=false needor=work 如找到,执行步骤( 3 );否则,执行步骤( 4 )。 ( 3 ) 当进程 p 获得资源后,可顺当执行,直至完成,并释放出安排 给它的资源

4、,故应执行: work=work+allocation; finishi=true; o o requesti avai1ablei? 转向步骤( 2 ) 4 、流程图: 系统主要过程流程图 (4 )假如全部进程的 finishi=true, 则表示系统处于平安状态;否 则,系统处于担心全状态 倾安排 242111 1t 印输出* t 时刻资源安排惰况 宾陥分 ahi 打进行和始化 _ i 进人泰址 li 银行家算法流程图 平安性算法流程图 四、试验代码: #i ncludeiostream.h #i ncludevstri ng.h #in cludestdio.h #defi ne fal

5、se 0 #define true 1 int allocation100100=0;/ 系统已安排资源 int need100100=0;/ int request100=0;/ int temp100=0;/ int work100=0;/ int p100=0; int q100100=0; int z100100=0; int m=100;/ 作业的最大数为 100 int n=100;/ 资源的最大数为 100 int gg=1; void showdata()/ 显示资源矩阵 int i,j; coutendl 此时刻的资源安排状况为: endl; cout max allocat

6、ion need avaliableendl;cout 进程名 for(j=0;j4;j+) for(i=0;in;i+) coutnamei ; int max100100=0;/ 大需求 int avaliable100=0;/ char name100=0;/ 各进程所需各类资源的最 系统可用资源 资源的名称 还需要资源 恳求资源向量 存放平安序列 存放系统可供应资源 cout ; coutendl; for(i=0;im;i+) cout i ; for(j=0;jn;j+) coutmaxij ; cout ; for(j=0;jn;j+) coutallocationij cout

7、 ; for(j=0;jn;j+) coutneedij ; if(i=0) cout ; for (j=0;jn;j+) coutavaliablej ;/ coutendl; 输出安排资源 int changdata(int i)/ 进行资源安排 int j; for (j=0;jm;j+) /pj=avaliablej; avaliablej=avaliablej-requestj; /qij=allocationij; allocationij=allocationij+requestj; /zij=needij; needij=needij-requestj; return 1; i

8、nt safe()/ 平安性算法 int i,d,k=0,m,h,s,apply,finish100=0; int j; int flag=0; for(i=0;in;i+) worki=avaliablei; coutendl 平安性检查 endl; cout work need allocation work+allocation finishendl; cout 进程名 ; for(h=0;h4;h+) for(s=0;sn;s+) coutnames ; cout ; coutendl; for(i=0;im;i+) apply=0; for(j=0;jn;j+) if (finish

9、i=falseneedij=workj) apply+; if(apply=n) cout i ; for(d=0;dn;d+) coutworkd ; cout ; for(d=0;dn;d+) coutneedid ; cout ; for(d=0;dn;d+) coutallocationid ; cout ; for(m=0;mn;m+) workm=workm+allocationim; coutworkm / 变安排数 finishi=true; tempk=i; cout ; couttrue ; coutendl; i=-1; k+; flag+; for(i=0;im;i+)

10、 if(finishi=false) for(j=0;jn;j+) avaliablej=avaliablej+requestj; allocationij=allocationij-requestj; needij=needij+requestj; coutendl 系统进入担心全状态!此时系统不 安排资源! endl;/ 不胜利系统担心全 return 0; coutendl 此时系统是平安的 !endl;/ 假如 平安,输出胜利 cout 平安序列为 :; for(i=0;im;i+)/ 输出运行进程数组 couttempi; if(im-1) cout-; coutendl; retu

11、rn 0; void share()/ 利用银行家算法对申请资源对进行判定 char ch; int i=0,j=0; ch="y" / 出错 coutendl 请输入要求安排的资源进程号 (0- m-1):; cini;/ 输入须申请的资源号 coutendl 请输入进程 i 申请的资 源 :e ndl; for(j=0;jn;j+) coutnamej:; cinrequestj;/ 输入需要申请的资源 for (j=0;jn;j+) if(requestjneedij)/ 推断申请是否大于需 求,若大于则出错 coutendl 进程 i 申请的资源大于它 需要的资源

12、; cout 安排不合理,不予安排! endl; ch="n" break; else if(requestjavaliablej)/ 推断申请是否 大于当前资源,若大于则 coutendl 进程 i 申请的资源大于系 统现在可利用的资源 ; cout 安排出错,不予安排 !endl; ch="n" break; if(ch="y") changdata(i);/ 依据进程需求量变换资源 showdata();/ 依据进程需求量显示变换后的资源 safe();/ 依据进程需求量进行银行家算法推断 int main()/ 主函数 int

13、 t=1,i,j,number,choice,m,n,flag; char ming; endl; coutendl 请首先输入系统可供资源种类的数量 cinn; cout * 银行家算法的设计与 实现 n=n; for(i=0;in;i+) coutvv 资源 i+1 的名称 :; cinming; namei=ming; cout 资源的数量 :; cinnumber; avaliablei=number; coutendl; cout 请输入作业的数量 :; cinm; m=m; 请输入各进程的最大需求量 矩阵 )max:e ndl; for(i=0;im;i+) for(j=0;jn;

14、j+) cinmaxij; do flag=0; 矩阵 )allocati on :e ndl; for(i=0;im;i+) for(j=0;jn;j+)coutendl (m*n coutendl 请输入各进程已经申请的资源量 (m*n cinallocationij; if(allocationijmaxij) flag=1; needij=maxij-allocationij; if(flag) coutendl 申请的资源大于最大需求量,请重 新输入 !nendl; while(flag); showdata();/ 显示各种资源 safe();/ 用银行家算法判定系统是否平安 wh

15、ile(1) if(t=1) coutendl 利用银行家算法预安排资源 endl; share(); t=0; else break; coutendl 是否连续银行家算法? ( 按 1 键连续 , 按其它任意键退出 ):; cint; coutendl; return 1; 五、程序执行结果: 请输入各进程的最大需求量鸽旳矩阵'帕小 3 2 此时刻的资源安排情祝为: tl-ax a hoc 且 t icm need available 进程名 r b abc ft b c aug 6 7 s 3 0 1 7 4 3 s 3 2 1 3 2 2 2 a 12 2 2 9 fl 2 3

16、 0 2 09 3 2 2 2 2 11 oil 4 4 3 3 0 0 2 4 3 1 fit ft b c rrr : 3 - - 3 : 2 2 2 0 请输入作业的数量汚 平安性检查 此时垂统是平安的? 平安序列为 : 1-3-0-2-4 利用银行家算法预安排资源 请输入要求安排的资源进程号 0-4 : 1 请输入进程 1 申请的资源: a : 1 b : 0 c : 2 此时刻的资源安排懵况为: aualiahle max a 1location need 进程名 abc abc abc abc 0 ? 5 3 0 10 7 4 3 2 3 0 1 3 2 2 3 r 2 d 2 d

17、 2 9 0 2 3 0 2 6 0 0 3 2 2 2 2 11 0 11 4 4 3 3 0 0 2 4 3 1 平安性检杳 wo *k need ft1location wo*k*a 1 locatr ion pin ish 进程名 abc abc abc abc 1 2 3 0 0 2 0 3 0 2 5 3 2 true 3 5 3 2 0 11 2 11 7 4 3 t*ue 0 7 4 3 7 4 3 0 10 7 5 3 true 2 ? 5 3 6 0 8 3 0 2 10 5 5 true 4 1r 5 5 4 3 1 a a 2 1h 5 7 tvue 此时系统是平安的?

18、 女全序列:1-3-0- 2-4 是否连续银行家算法?按 1 键连续,按其它任意健退岀 利用银行家算法预安排资源 请输入要求安排的资源进程号 : 4 请输入进程 4 申请的资源: a : 3 b : 3 c : 0 进程 4 申请的资源大于系统现在可利用的资源分酉己岀错,不予安排? 是否连续银行家算法?按 1 键连续,按其它旺意键退出汽进程名 1 3 0 2 4 work abc 3 3 2 5 3 2 7 4 3 7 5 3 10 5 5 need abc 12 2 0 11 7 4 3 6 0 0 4 3 1 hllocation abc 2 11 0 0 ijouk llocat 1.0 n abc 5 3 2 7 4 3 7 5 3 10 5 5 10 5 7 finish true true true true true 用银行家算法预分 s 己资源 请输儿要求分配的资源进程 请输入进程 0 申请的资源: a : 0 b : 2 c : 0 平安性检查 六、试验总结 多个进程同时运行时,系统依据各类系统资源的最大需求和各 类系统的剩余资源为进程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论