《银行家算法的模拟实现》

上传人:壹****1 文档编号:512987780 上传时间:2022-09-25 格式:DOCX 页数:12 大小:158.78KB
返回 下载 相关 举报
《银行家算法的模拟实现》_第1页
第1页 / 共12页
《银行家算法的模拟实现》_第2页
第2页 / 共12页
《银行家算法的模拟实现》_第3页
第3页 / 共12页
《银行家算法的模拟实现》_第4页
第4页 / 共12页
《银行家算法的模拟实现》_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《《银行家算法的模拟实现》》由会员分享,可在线阅读,更多相关《《银行家算法的模拟实现》(12页珍藏版)》请在金锄头文库上搜索。

1、银行家算法的模拟实现-实验报告题目:银行家算法的模拟实现专 业:班 级:组 员:一、实验目的死锁会引起计算机工作僵死,因此操作系统中必须防止。本实验的目的在于让学生独立 的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和 原因,并采用银行家算法有效地防止死锁的发生,以加深对课堂上所讲授的知识的理解。二、实验内容模拟实现银行家算法实现死锁避免。要求:初始数据(如系统在TO时刻的资源分配情 况、每一种资源的总数量)从文本文件读入,文件中给出最大需求矩阵 Max、分配矩阵 Allocation,在程序中求得需求矩阵Need和可利用资源向量Available。三、实验分析

2、过程1、整个银行家算法的思路。先对用户提出的请求进行合法性检查,再进行预分配,利用安全性检查算法进行安全性检 查。1)进程一开始向系统提出最大需求量.2)进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量.3)若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的 剩余资源量,若不超出,则分配,否则等待2、算法用到的主要数据结构和 C 语言说明。(1)、可利用资源向量 INT AVAILABLEM M 为资源的类型。(2)、最大需求矩阵INT MAXNMN 为进程的数量。( 3)、已分配矩阵INT ALLOCATIONNM( 4)、还需求矩阵INT NEEDN

3、N( 5)、申请各类资源数量 int Requestx; /( 6)、工作向量int Workx;(7)、int Finishy; /表示系统是否有足够的资源分配给进程,0为否,非0为是3、银行家算法 (主程序)(1)、系统初始化。输入进程数量,资源种类,各进程已分配、还需求各资源数量,各资源可用数量等(2)、输入用户的请求三元组(I, J,K),为进程I申请K个J类资源。(3)、检查用户的请求是否小于还需求的数量,条件是Kv=NEEDI,J。如果条件不符则提示重新输入,即不允许索取大于需求量(4)、检查用户的请求是否小于系统中的可利用资源数量,条件是Kv=AVALIABLEI,J。如果条件不

4、符则申请失败,阻塞该进程,重新进行进程动态资源申请(使用goto语 句)(5)、进行资源的预分配,语句如下:AVALIBLEIJ= AVALIBLEIJ-K;ALLOCATIONIJ= ALLOCATIONIJ+K;NEEDIJ=NEEDIJ-K;(6)、系统调用安全性检查算法(checksafe()函数)进行检查,如果检查通过,则不用回 收,否则进行回收,进程资源申请失败进入等待。4、安全性检查算法(checksafe()子函数)( 1 )、设置两个临时变量。FINISH N记录进程模拟执行的结束状态,初值为0如果可以模拟执行结束,则可 设为 1,也可设为其它非零值以表示执行的先后次序。WO

5、RKM 记录模拟执行中资源的回收情况,初值为AVAILABLEM的值。(2)、在进程中查找符合以下条件的进程。条件 1:FINISHI=0条件 2:NEEDIJ=WORKJ(3)、如果查找成功则进行资源的模拟回收,语句如下:WORKJ=WORKJ+ALLOCATIONIJ;FINISHI=1 或查找到的顺序号(4)、如果查找不成功,则检查所有进程的FINISH,如果有一个为0,则系统不为0,返回不成功标志。否则返回成功标志。四、系统流程图五、程序源代码#include #include #includeconst unsigned short c=3; 资源类数 const unsigned

6、short t=5;进程数 void print();用于打印输出表格的函数 void input();用于输入的函数 void tryfenpei(int i);试分配函数; void refenpei(int i);恢复数据函数 void checksafe(int s);安全检测函数 int tempt;int workc;/定义初始化数组int needtc,requestc,availablec;int maxtc=3, 5, 7 ,9 ,11,6 ,8 ,2 ,9, 5,6 ,3 ,5 ,7 ,4;int allocationtc=1 ,2 ,5 ,4, 8,5 ,4, 1 ,8

7、,3 ,3 ,2 ,4, 3, 1;int totalc=17,21,25;int in;/用户选择的进程号/*main 函数*/int main(int argc,char *argv)int i;char ch=Y;int l=0,m=0,a;for( i=0;it;i+)for(int j=0;jc;j+)needij=maxij-allocationij;for( m=0;mc;m+)a=0;for(int l=0;lin)if(!(0v=in&inv=4)coutvv这里没有该进程,请重新输入vvendl;else break;coutvv您输入的是prequesti)if(requ

8、estineedini)coutvv超出进程需求量vvendlvvendl; if(requestiavailablei)coutvv系统没有足够多的可用资源量满足进程需要 vvendlvvendl;else break;coutvv输入成功,您输入的是:vvrequest0vv vvrequest1vv vvrequest2;coutvv等待已久的银行家算法开始执行vvendl;tryfenpei(in);/分配函数coutvv试分配完成vvendl;coutvv现在进入安全性检测 vvendl;checksafe(in);/安全性检测函数coutvv您还想继续银行家算法的实验吗?(y继续n

9、终止);else if(ch=N|ch=n)coutvv感谢您的使用,Byevvendlvv退出 ingvvendl; break;elsecoutvv输出无效!请重新输入vvendl;while (cinch);return 0;/*输出函数*/void print()int i,j;coutvv更新数据中.vvendl;cout|0)coutvvl; coutvvendl; coutvvllllllvvendl;/*试分配函数*/void tryfenpei(int i)for(int f=0;fvc;f+)availablef=availablef-requestf; allocatio

10、nif=allocationif+requestf; needif=needif-requestf;/*恢复数据函数*/void refenpei(int i)for(int f=0;fc;f+) availablef=availablef+requestf; allocationif=allocationif-requestf; needif=needif+requestf;int com(int *p,int *q)int i;for(i=0;iqi) return 0;return 1;/*安全检测函数*/void checksafe(int s)int flag,tempt,i,j,l,k=0;bool finisht;for(i=0;it;i+) finishi=false;for(j=0;jc;j+) workj=availablej;cout|endl;cout| resource |-Work+Allocation-|-Finish-|endl; cout| | A B C | T/F |endl; cout|programme | | |endl; cout|endl;for(i=0;it;i+)l=0; for(j=0;jworkj)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 综合/其它

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