版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验实验四 银行家算法学号 1115107047姓名 吴炜松班级11 电子 B华侨大学电子工程系1、银行家算法和安全性检查算法原理操作系统的银行家算法: 当进程首次申请资源时, 要测试该进程对资源的最 大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配 资源,否则就推迟分配。 当进程在执行中继续申请资源时, 先测试该进程本次申 请的资源数是否超过了该资源所剩余的总量。 若超过则拒绝分配资源, 若能满足 则按当前的申请量分配资源,否则也要推迟分配。1、程序流程描述。进程 i 发出请求资源申请,(1) 如果 Request j=needi,j,转向步骤 (2),否则认为
2、出错,因为他所需要的资 源数已经超过它所宣布的最大值。(2) 如果: Request ij=availablei,j ,转向步骤 (3) ,否则提示尚无足够资源, 进程 i 需等待。(3) 系统试探着将资源分配给申请的进程(有预先寄存操作) ,并修改下面数 据结构中的数值: Availablei,j= Availablei,j- Request j ; Allocationij= Allocationij+ Request j ; needij= needij- Request j ;(4) 试分配后,执行安全性检查,调用 check()函数检查此次资源分配后系统 是否处于安全状态。若安全,才
3、正式将资源分配给进程,并修改系统状态;否则 本次试探分配作废,恢复原来的资源分配状态,让该进程等待。(5) 用 do while 循环语句,实现输入字符 y/n 控制是否进行进一步的资源 申请。安全性检查算法(子程序) :(1) 设置两个向量: Work(它表示系统可提供给进程继续运行所需的各类资 源数目)在执行安全性算法开始时, Work= Available。 Finish(它表示系统是否 有足够的资源分配给进程)初始化, Finishi=false ;当有足够的资源分配给进程 时,再令 Finishi=true 。(2) 在进程中查找符合以下条件的进程: 条件 1:Finishi=fal
4、se ; 条件 2: needij=Workj 若找到,则执行步骤 (3)否则,执行步骤 (4)(3) 当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Workj= Workj+ Allocationij ; Finishi=true ; goto step (2);(4) 如果所有的 Finishi=true 都满足,则表示系统处于安全状态,否则,处 于不安全状态。流程图:尝试分配资源由于 print 函数只是把所有信息按矩阵输出,比较简单,这里就不写 流程图了。2、程序及注释#include #include #include # define m 50# de
5、fine false 0# define true 1int no1; / 进程数int no2; / 资源数int r;int allocationmm, maxmm,needmm, availablem;char name1m, name2m;/定义全局变量 void main()void check(); void print();void shoudon(); int i,j,p=0,q=0; char c;int s;int requestm,allocation1mm,need1mm,available1m,fm;int mx54=0,0,1,2,1,7,5,0,2,3,5,6,0
6、,6,5,2,0,6,5,6;int an54=0,0,1,2,1,0,0,0,1,3,5,4,0,6,3,2,0,0,1,4;int ann54=0,0,1,2,1,4,2,0,2,3,5,6,0,6,5,2,0,6,5,6;printf(*n);printf(*sf 银行家算法演示*n);printf(*n);printf(n1. 演示报告给定系统 1.);printf(n2. 演示报告给定系统 2.( P1提出需要( 0、4、2、0)个资源) );printf(n3. 演示手动输入系统 .);printf(n0. 退出程序 .);printf(n 请选择( 03 ):);scanf(%d
7、,&s);switch(s)case 1:no1=5; no2=4;for(i=0;ino1;i+)for(j=0;jno2;j+)maxij=mxij;allocationij=anij;break;case 2:no1=5; no2=4; for(i=0;ino1;i+) for(j=0;jno2;j+) maxij=mxij; allocationij=annij; break;case 3:shoudon();break;case 0:printf(n thanks for you watching! n);exit(0);/* 退出程序 */default:printf(n 请输入有
8、效指令 n); break; /* 提示输入无效提示 */ for(i=0;ino1;i+)for(j=0;jno2;j+)needij=maxij-allocationij; /根据输入的两个数组计算出 need 矩阵的值printf( 请输入 Available 矩阵 n); for(i=0;ino2;i+) scanf(%d,&availablei);print(); check();if(r=1)doq=0;p=0;printf(n 请输入请求资源的进程号 for(j=0;j=no1)printf( 输入错误,请重新输入: n); continue;else break;printf(
9、n 请输入该进程所请求的资源数 requestj:n);for(j=0;jno2;j+)scanf(%d,&requestj);for(j=0;jneedij) p=1; / 判断请求是否超过该进程所需要的资源数 if(p) printf( 请求资源超过该进程资源需求量,请求失败! n); else for(j=0;javailablej) / 判断请求是否超过可用资源数 q=1;if(q)printf( 没有做够的资源分配,请求失败! n);else / 请求满足条件for(j=0;jno2;j+)available1j=availablej; allocation1ij=allocatio
10、nij;need1ij=needij; / 寄存 (原已分配的资源数、仍需要的资源数、 可用的资源数)availablej=availablej-requestj;allocationij+=requestj;needij=needij-requestj;/ 系统尝试把资源分配给请求的进程check(); /检测分配后的安全性if(r=1)for(j=0;jno2;j+) fj=allocation1ij+requestj;if(fj=maxij)allocationij=0;else allocationij=fj;availablej=available1j+allocation1ij-a
11、llocationij; / 改写 (已分配的资源 数、仍需要的资源数、可用的资源数)needij=need1ij-requestj;else/如果分配后系统不安全for(j=0;jno2;j+)/ 还原 (已分配的资源数、仍需availablej=available1j; allocationij=allocation1ij; needij=need1ij;要的资源数、可用的资源数)print();/显示相关信息printf( 返回分配前资源数 n);/判断是否继续进行资源分配printf(n 你还要继续分配吗? Y or N ?n); c=getche();while(c=y|c=Y);/
12、手动输入void shoudon() int i,j;printf( 请输入进程总数 :n); scanf(%d,&no1);printf( 请输入资源种类数 :n); scanf(%d,&no2);printf( 请输入 Max 矩阵 :n); for(i=0;ino1;i+) for(j=0;jno2;j+)scanf(%d,&maxij);/ 输入已知进程最大资源需求量printf( 请输入 Allocation 矩阵 :n);for(i=0;ino1;i+)for(j=0;jno2;j+)scanf(%d,&allocationij);/输入已知的进程已分配的资源数return;/安全
13、算法函数 void check() int k,f,v=0,i,j;int workm,am; int finishm;/安全标志/ 初始化进程均没得到足够资源数,未完成r=1;for(i=0;ino1;i+) finishi=false;for(i=0;ino2;i+)worki=availablei;k=no1;dofor(i=0;ino1;i+)if(finishi=false)f=1;for(j=0;jworkj) f=0;if(f=1) 的资源数的进程/worki 表示可提供进程继续运行的各类资源数/找到还没有完成且需求数小于可提供进程继续运行 finishi=true; av+=i
14、;/标记完成/记录安全序列号for(j=0;j0);f=1;for(i=0;ino1;i+)if(finishi=false) f=0; break; if(f=0)/判断是否所有的进程都完成/未完成/若有进程没完成,则为不安全状态printf( 系统处在不安全状态! );r=0; elseprintf(n 系统当前为安全状态,安全序列为: n); for(i=0;ino1;i+)printf(p%d ,ai); /输出安全序列 /显示函数void print() int i,j; printf(n);printf(资源分配情况*n);printf( 进程名 /号码| Max| Allocat
15、ion |Need |n);for (i = 0; i no1; i+) ,i,i);printf( p%d/%dfor (j = 0; j no2; j+) printf(%d ,maxij);for (j = 0; j no2; j+) printf( %d,allocationij); for (j = 0; j no2; j+)printf( %d,needij); printf(n);printf(n);printf( 各类资源可利用的资源数为 :);for (j = 0; j no2; j+)printf( %d,availablej); printf(n);3、运行结果以及结论。现在系统中 A、B、C、D 4 类资源分别还剩 1、5、2、0个,请按银行家算法回 答:1、现在系统是否处于安全状态? 是,且有安全序列 0、2、3 、4、1。2、如果现在进程 P1提出需要( 0、4、2、0)个资源的请求,系统能否满足它的 请求?可以,安全序列仍为 0、2、 3 、4、1。运行截图:主界面:由于
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024艺术学校教室租赁与艺术展览合作合同3篇
- 二零二五年度风力发电设备安装与运营合同3篇
- 2025年度猫咪品种引进与销售代理合同4篇
- 二零二四年光伏发电项目爆破钻孔合同
- 南昌市2025年度新建住宅买卖合同
- 二零二五版环保设施建设与运营合同3篇
- 2025年度餐饮企业知识产权保护合同18篇
- 年度超高纯气体的纯化设备战略市场规划报告
- 2025版智能交通信号系统零星维修施工合同4篇
- 二零二五年度车辆抵押担保信托合同范本3篇
- 称量与天平培训试题及答案
- 超全的超滤与纳滤概述、基本理论和应用
- 2020年医师定期考核试题与答案(公卫专业)
- 2022年中国育龄女性生殖健康研究报告
- 各种静脉置管固定方法
- 消防报审验收程序及表格
- 教育金规划ppt课件
- 呼吸机波形分析及临床应用
- 常用紧固件选用指南
- 私人借款协议书新编整理版示范文本
- 自荐书(彩色封面)
评论
0/150
提交评论