银行家算法某实验报告材料67787_第1页
银行家算法某实验报告材料67787_第2页
银行家算法某实验报告材料67787_第3页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机操作系统实验报告一、实验名称:银行家算法二、实验目的:银行家算法是避免死锁的一种重要方法,通过编写 一个简单的银行家算法程序,加深了解有关资源申请、避免死 锁等概念,并体会和了解死锁和避免死锁的具体实施方法。三、问题分析与设计:1、算法思路:先对用户提出的请求进行合法性检查,即检查 请求是否大于需要的,是否大于可利用的。若请求合法,则进 行预分配,对分配后的状态调用安全性算法进行检查。若安 全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒 绝申请。2、 银行家算法步骤:(1)如果Requesti v or二Need,则转向步骤;否则,认为出错,因为它所需要的资源数已超过它所宣布的最

2、大值。(2) 如果 Request v or二Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。(3) 系统试探把要求的资源分配给进程 Pi,并修改下面数据结构中的数值:Available二Available-Requesti;Allocatio n=Allocatio n+Request;Need二Need-Request;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于 安全状态。3、安全性算法步骤:(1)设置两个向量 工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work二Allocatio n; 布尔

3、向量Finish。它表示系统是否有足够的资源分配给进程,使 之运行完成,开始时先做Fi ni shi=false ,当有足够资源分配给进 程时,令 Finishi=true 。(2)从进程集合中找到一个能满足下述条件的进程: Fini shi=false Need<or=Work如找到,执行步骤(3);否则,执行步骤(4 )。(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work二Work+Allocatio n;Fini shi=true;转向步骤(2)(4) 如果所有进程的Finishi=true,则表示系统处于安全状态;否 则,系统处于不安全状态

4、。4、流程图:系统主要过程流程图银行家算法流程图安全性算法流程图四、实验代码:#defi ne M 5#defi ne N 3#i nclude <stdio.h> /本实验中使用到的库函数#i nclude <stdlib.h>#in elude <stri ng.h>in t max 51;/开始定义银行家算法中需要用到的数据int allocatio n5 1;int need 51;int available1;int request51;char *fini sh5;int safe5;int n,i,m;int k=0;int j=0;int w

5、ork1;int works51;void lin e() II美化程序,使程序运行时更加明朗美观printf(”-n ”);void start() II 表示银行家算法开始lin e();printf(”银行家算法开始n");prin tf("-死锁避免方法n");lin e();void en d()/表示银行家算法结束lin e();prin tf(”银行家算法结束,谢谢使用n");lin e();void in put() /输入银行家算法起始各项数据for (n=0;n<5;n+)printf("请输入进程P%d的相关信息:n

6、",n);prin tf("Max:");for (m=0;m<1;m+)scan f("%d", &max nm);prin tf("Allocatio n:");for (m=0;m<1;m+)scan f("%d", &allocatio nn m);for (m=0;m<1;m+)n eed nm=max nm-allocatio nn m;printf("请输入系统可利用资源数Available:");for (m=0;m<1;m+)s

7、ea nf("%d",&availablem);void output。/输出系统现有资源情况lin e();printf("资源情况MaxAllocation NeedAvailablen");printf("进程 A A A A n");lin e();for(n=0;n<5;n+)prin tf("P%d%3d%3d%3d", n,max n0,allocatio nn 0, need n0); if (n=0)prin tf("%3d%3dn",available0);el

8、seprin tf("n");lin e();void cha nge() /当 Requesti,j<=Availablej时,系统把资源分配给进程Pi , Availablej和 Needi,j发生改变for (m=0;m<1;m+)availablem-=requestim;allocati on im+=requestim;n eedim_=requestim;void outputsafe() /输出安全序列的资源分配表printf("该安全序列的资源分配图如下:n”);lin e();printf("资源情况Work Need A

9、llocation Work+AllocationFi nishn");printf("进程 A A A A n");lin e();for(n=0;n<5;n+)prin tf("P%d%9d%3d%3d%5d%12sn",safe n,workssafe n0, need safe n 0,allocatio nsafe n0,workssafe n0+allocatio n safe n 0,fi nis hn );lin e();int check() /安全性算法printf("开始执行安全性算法n");fo

10、r (m=0;m<1;m+) / 数组 work 和 finish 初始化workm=availablem;for (n=0;n<5;n+)fini sh n=" false"safe n=0;k=0;for (m=0;m<5;m+)for (n=0;n<5;n+)if(strcmp(finishn,"false")=0 &&need n0<=work0 ) /查找可以分配资源但尚未分配到资源的进程safek=n; / 以数组safek记下各个进程得到分配的资源的顺序workssafek0=work0;进程执

11、行后释放出work0+=allocatio nn 0; /分配给它的资源finishn="ture" /finishn变为1以示该进程完k+;判断是否所有进程分配资源完成成本次分for (m=0;m<5;m+) /if (strcmp(fi ni shm,"false")=O)printf(”找不到安全序列,系统处于不安全状态。n");return 0; /找不到安全序列,结束check函数,返回0elseif (m=4)/ 此处m=4表示所有数组 finish的所有元素都为tureprintf(” 找到安全序列 P%d->P%d-

12、>P%d->P%d->P%d,系统是安全的 n”,safe0,safe1,safe2,safe3,safe4);j=1;outputsafe(); /输出安全序列的资源分配表return 1;void mai n() / 主程序开始start();for (;j=0;) II确认输入数据的正确性,若输入错误,重新输入in put();printf("以下为进程资源情况,请确认其是否正确:n");output();printf(”数据是否无误:n正确:输入1n错误:输入0n请输 入:”);sea nf("%d",&j);print

13、f(”数据确认无误,算法继续。n");if (check()=O) / 若cheek函数返回值为0 ,表示输入的初始数据找不到安全序列,无法进行下一步,程序结束en d();exit(0);for(;j=1;)/当有多个进程请求资源时,循环开始printf("请输入请求资源的进程i(0、1、2、3、4) : "); /输入发出请求向量的进程及请求向量sea nf("%d",&i);printf("请输入进程 P%d的请求向量 Request%d : ",i,i);for(n=0;n <1; n+)scan f(

14、"%d",&reques tin);for (;reques ti 0> needi0;)/若请求向量大于需求资源,则认为是输入错误,要求重新输入printf("数据输入有误,请重试!n请输入进程P%d的请求向量 Request%d :",i,i);for(n=0;n <1; n+)scan f("%d", &requesti n);if(reques ti 0<=available0) /判断系统是否有足够资源提供分配printf("系统正在为进程P%d分配资源n”,i);chan ge(

15、);/ 分配资源j=0;elseprintf(”系统没有足够的资源,进程P%d需要等待。n",i);if (j=0) j=0表示系统有足够资源分配的情况printf("当前系统资源情况如下:n"); /输出分配资源后 的系统资源分配情况output。;if(check()=0) /若找不到安全系列,则之前的资源分配无效printf("本次资源分配作废,恢复原来的资源分配状 态。n");for (m=0;m<1;m+) /恢复分配资源前的系统资源状态availablem+=requestim;allocati on im-=requesti

16、m;n eedim+=requestim;output(); /输出系统资源状态printf("是否还有进程请求资源?n是:输入1n否:输入0n请输入:”);seanf("%d",&j);/若还有进程请求资源,j=1 ,之前的for循环条件满足en d();五、程序执行结果:银行家7 軽方法请输AttPO的相关信息Ihx: 7Mloca tig: 0请输入进程Pl的相关信息;lax; 3llocation:2溝输入进程P2的相关信息=lax:9Mlocation:3请输入»P3的相关信息乂 lax: 2Mlocation;2请输入进程P4的相关信

17、息kx:4Ml (juatlon! U请输入系统可利用资源数畑ailable;3 以下芮进程资源情觅 请确认其是否正确:资源情况 血 Allocation Need Available AAAA7 0 73170374431 3 2 1J2 9362 2 0 吗生Q生毁据是否无误:输入1 普沽输入o 青紛k: 1 故据确认无误,算法继续。 刊台执行安全性算法 歩到安全序列Pl->P3->P4->P0->F25系圭趕安全的 r _°、 七 hI 匚占 几u JE- rsn 丄 n r该安全序列的资源分配图如下:资源情况 WorkNe日dAllocation &#

18、165;ork+Allocation Finish进卡呈AAAA5 7 7 7 0_皿2 2 0 0 310 4 7 63 5 7 7 713 4 0 21 tf.turu ture ture ture ture21703744024J001'2'34I n IF始执行安全性算法戈到安全序列Pl->P3->P4->P2->P0,系统是安全的 该安全序列的资源分配图如下:7 15 0 4.2 2 0 4 010 4 5 72 4 6 6 013 4 2 0ture tura ture ture turei 1 o 有入人 还输输入 否:输 是是否请谙输入请

温馨提示

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

评论

0/150

提交评论