操作系统实验银行家算法

上传人:人*** 文档编号:420090022 上传时间:2023-02-23 格式:DOCX 页数:11 大小:146.02KB
返回 下载 相关 举报
操作系统实验银行家算法_第1页
第1页 / 共11页
操作系统实验银行家算法_第2页
第2页 / 共11页
操作系统实验银行家算法_第3页
第3页 / 共11页
操作系统实验银行家算法_第4页
第4页 / 共11页
操作系统实验银行家算法_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《操作系统实验银行家算法》由会员分享,可在线阅读,更多相关《操作系统实验银行家算法(11页珍藏版)》请在金锄头文库上搜索。

1、昆明理工大学信息工程与自动化学院学生实验报告(2012 2013 学年第二学期)课程名称:操作系统开课实验室:信自楼4442013年12月10日年级、专业、班物联网111学号201010410125姓名丁洪超成绩实验项目名称银行家算法指导教师教师 评 语该同学是否了解实验内容与要求:A.了解口B.基本了解口C.不了解口设计思想或流程图是否正确:A.正确口B.基本正确口C.较差 口该同学的实验能力:A.强口B.中等口C.差口该同学的实验是否达到要求:A.达到口B.基本达到口C.未达到口实验报告是否规范:A.规范口B.基本规范口C.不规范口是否有运行结果与分析:A.详细口B.一般口C.没有口是否有

2、总结与体会:A.详细口B.一般口C.没有口教师签名:年月日、实验目的银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的 银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死 锁的具体实施方法。二、实验题目1. 设计进程对各类资源最大申请表示及初值确定。2. 设定系统提供资源初始状况。3. 设定每次某个进程对各类资源的申请表示。4. 编制程序,依据银行家算法,决定其申请是否得到满足。三、算法设计的思想或流程图1.设计思想a. 数据结构假设有M个进程N类资源,则有如下数据结构:MAXM*N M个进程对N类资源的最大需求量AVAILABLEN系统可

3、用资源数ALLOCATIONM*N M个进程已经得到N类资源的资源量NEEDM*N M个进程还需要N类资源的资源量b. 银行家算法设进程I提出请求RequestN,则银行家算法按如下规则进行判断。(1) 如果 RequestNv=NEEDI, N,则转(2);否则,出错。(2) 如果 RequestNv=AVAILABLE,则转(3);否则,出错。(3) 系统试探分配资源,修改相关数据:AVAILABLE=AVAILABLE-REQUESTALLOCATION=ALLOCATION+REQUESTNEED=NEED-REQUEST(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作

4、废,系统恢复原状, 进程等待。c. 安全性检查(1) 设置两个工作向量 WORK=AVAILABLE; FINISHM=FALSE(2) 从进程集合中找到一个满足下述条件的进程,FINISHi=FALSENEEDv=WORK如找到,执行(3);否则,执行(4)(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。WORK=WORK+ALLOCATIONFINISH=TRUEGO TO 2如所有的进程FinishM=true,则表示安全;否则系统不安全。 画出程序的流程图如下:四、编写的相关程序代码#include vstring.h#include vstdio.h#includevstd

5、lib.h#include viostream.h#define FALSE 0#define TRUE 1#define W 10#define R 10int M ; /总进程数int N ; /资源种类int ALL_RESOURCEW;各种资源的数目总和int MAXWR; / M个进程对N类资源最大资源需求量int AVAILABLER; /系统可用资源数int ALLOCATIONWR; / M个进程已经得到N类资源的资源量int NEEDWR; / M个进程还需要N类资源的资源量int RequestR; /请求资源个数void output()int i,j;coutvvend

6、lvvvvendl;cout各种资源的总数量:vvendl;for (j=0;jvN;j+)coutvv资源vvjvv: ALL_RESOURCEj;coutvvendl;coutvvvvendl;coutvv目前各种资源可利用的数量为:vvendl;for (j=0;jvN;j+)coutvv资源vvjvv: vvAVAILABLEj;coutvvendl;coutvvvvendl;coutvv各进程还需要的资源数量:vvendlvvendl;for(i=O;ivN;i+)coutvv资源vvi;coutvvendl;for (i=0;ivM;i+)coutvv进程vvivv:;coutvv

7、endl;for (j=0;jvN;j+)coutvvNEEDijvv coutvvendl;coutvvvvendl;coutvv各进程已经得到的资源量:vvendlvvendl;for(i=0;ivN;i+)coutvv资源vvi;coutvvendl;for (i=0;iM;i+)coutvv进程让:;for (j=0;jvN;j+)coutvvALLOCATIONijvv;coutvvendl;coutvvendl;void distribute(int k)int j;for (j=0;jvN;j+)AVAILABLEj=AVAILABLEj-Requestj;ALLOCATIONk

8、j=ALLOCATIONkj+Requestj;NEEDkj=NEEDkj-Requestj;void restore(int k)int j;for (j=0;jvN;j+)AVAILABLEj=AVAILABLEj+Requestj;ALLOCATIONkj=ALLOCATIONkj-Requestj;NEEDkj=NEEDkj+Requestj;int check()int WORKR,FINISHW;int i,j;for(j=0;jvN;j+) WORKj=AVAILABLEj;for(i=0;iM;i+) FINISHi=FALSE;for(i=0;iM;i+)for(j=0;jN

9、;j+)if(FINISHi=FALSE&N EEDijv=WORKj)WORKj=WORKi+ALLOCAriONij;FINISHi=TRUE;for(i=0;ivM;i+)if(FINISHi=FALSE)coutvvendl;coutvv系统不安全!!本次资源申请不成功!vvendl;coutvvendl;return 1;elsecoutvvendl;coutvv经安全性检查,系统安全,本次分配成功。vvendl;coutvvendl;return 0;void bank() /银行家算法int i=0,j=0;char flag=Y;while(flag=Yllflag=y)i=-

10、1;while(i=M)coutvvvvendl;coutwendlvv 请输入需申请资源的进程号:;cini;if(ivOlli=M) coutvv输入的进程号不存在,重新输入!vvendl;coutvv 请输入进程vvivv申请各类资源的数量:vvendl; for (j=O;jvN;j+)coutvv资源vvjvv: ;cinRequestj; if(RequestjNEEDij) /若请求的资源数大于进程还需要i类资源的资源量j coutvvendlvv进程vvivv申请的资源数大于进程vvivv还需要vvjvv类资源的数量!”;coutvv若继续执行系统将处于不安全状态!vvendl

11、;flag=N;break;elseif(RequestjAVAILABLEj) /若请求的资源数大于可用资源数coutvvendlvv进程vvivv申请的资源数大于系统可用vvjvv类资源的数量!; coutvv若继续执行系统将处于不安全状态!vvendl;flag=N;break; if(flag=Yllflag=y)distribute(i); / 调用 change(i)函数,改变资源数 if(check() /若系统安全restore(i); /调用restore(i)函数,恢复资源数output();/输出资源分配情况else/若系统不安全output(); /输出资源分配情况el

12、se/ 若 flag=Nllflag=ncoutvvendl;coutvv是否继续银行家算法演示,按Y或y键继续,按N或n键退出演示:”;cinflag;void version()coutvvendl;coutvvt银行家算法vvendl;void main() / 主函数int i=O,j=O,p;char ch;version();printf(请按照提示依次输入相应的数据:nn);printf(”继续(Y/y) 退出(N/E or n/e) n);ch=getchar();if(Y=ch II y =ch)printf(现在请继续!nn);elseprintf(输入有误或者退出)再见!

13、 n);exit(0);coutvvendlvv请输入总进程数:;cinM;coutvvendlvvvvendl;coutvv请输入总资源种类:;cinN;coutvvendlvvvvendl;coutvv请输入各类资源总数:(需要输入数为vvNvv个)”;for(i=0;ivN;i+)cinALL_RESOURCEi;coutvvendlvvvvendl;coutvv输入各进程所需要的各类资源的最大数量(需要输入数为vvM*Nvv个)”;for (i=0;ivM;i+)for (j=0;jvN;j+)docinMAXij;if (MAXijALL_RESOURCEj)coutvvendlvv占有资源超过了声明的该资源总数请重新输入vvendl;while (MAXijALL_RESOURCEj);coutvvendlvvvvendl;coutvv输入各进程已经占据的各类资源的数量:(需要输入数为vvM*Nvv个)”;for (i=0;iM;i+)for (j=0;jMAXij)coutvvendlvv

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号