1、实验三银行家算法一、 实验内容简要描述1 实验目标:加深了解有关资源申请、避免死锁等概念,并体会与了解死锁与避免死锁得具体实施方法.要求编写与调试一个系统动态分配资源得简单模拟程序,观察死锁产生得条件,并采用银行家算法,有效得防止与避免死锁得发生。2 实验要求:银行家算法就是避免死锁得一种重要方法,本实验要求用高级语言编写与调试一个简单得银行家算法程序。用银行家算法实现资源分配.设计五个进程0,p,3,p4共享三类资源,B,C得系统,例如,A,B,C得资源数量分别为1,.进程可动态地申请资源与释放资源,系统按进程得申请动态地分配资源,要求程序具有显示与打印各进程得某一个时刻得资源分配表与安全序
2、列;显示与打印各进程依次要求申请得资源号以及为某进程分配资源后得有关资源数据.二、 报告主要内容1 设计思路A、 设计进程对各在资源最大申请表示及初值确定。B、 设定系统提供资源初始状态。C、 设定每次某个进程对各类资源得申请表示。D、 编制程序,依据银行家算法,决定其申请就是否得到满足。2 主要数据结构假设有M个进程N类资源,则有如下数据结构:AMN M个进程对N类资源得最大需求量AVAILBL系统可用资源数ALLCATIOM*N M个进程已经得到N类资源得资源量NEED*N 个进程还需要N类资源得资源量银行家算法:设进程I提出请求ReqestN,则银行家算法按如下规则进行判断。()如果qu
3、stN=EED,N,则转(2);否则,出错。(2)如果equetN=AAILABL,则转(3);否则,出错。(3)系统试探分配资源,修改相关数据:VIALE=AAILALEREQUALCATIN=ALATION+RQUETEED=NEDRUEST(4) 系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。安全性检查:()设置两个工作向量WORK=AALABLE;FINISHMFALSE(2)从进程集合中找到一个满足下述条件得进程,INISiFALSED=ORK如找到,执行(3);否则,执行(4)(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。WORK
4、=WORK+ALLOCAIOFINS=TRUEGOTO2()如所有得进程inishM=tru,则表示安全;否则系统不安全。3. 主要代码源程序:iude israusin namepacestd;efie MAXRCES5 最大进程数dfine MXRESOURE 100 /最大资源数/itAILABLEMARESOURE; /*可用资源数组/nt MMAXPROCSAXROURCE; /最大需求矩阵*/iALCATINMXPROCESSMARSOURCE; /*分配矩阵*/int NDMXPCESMAXREOURC; /*需求矩阵*/t QUETAPCESMAXRESUCE; *进程需要资源
5、数oolFINISAPOCES; /系统就是否有足够得资源分配/itpMAXROCES; /记录序列*n ,; /*m个进程,n个资源*/vidInit();o Safe();vod Bank();int min() Int(); Sae(); ank();vid nit() *初始化算法*/ int i,j; cut请输入进程得数目:; cinm; cout请输入资源得种类:”; cin; ct请输入每个进程最多所需得各资源数,按照”mnMAXij; cout请输入每个进程已分配得各资源数,也按照”m”n矩阵输入”endl; fo(i=0;im;+) for(j=0;j;j+) cinALL
6、ATIONi; NEDij=AXijALOCATINij; f(NEDij) cut”您输入得第”i+1”个进程所拥有得第j+1个资源数错误,请重新输入:edl; j-; continue; couAVILALEi; void Ban() /银行家算法*/ ii,cusned; har gai; hle(1) otcus; cou请输入进程所请求得各资源得数量edl; o(i=0;in;i+) inREQUTcusneedi; r(i=0;iNEuseedi) ctAAIBLi) cou您输入得请求数超过系统有得资源数!请重新输入!end; contine; for(i;n;+) VAILAB
7、i=REESTcuneedi; ALLOCAIONcsneei+=EUESTusndi; NEEDcueedi=RQESTcundi; i(Sfe()) cou同意分配请求!l; else cout”您得请求被拒绝!ed; fr(i=;in;i+) AVAILABLi=REQEScsei; AOCATIONunedi-REQUESusneei; NEEcusnedi+=REQESTuseedi; for(=0;m;i+) FNIHi=fals; ou您还想再次请求分配吗?就是请按y/Y,否请按其它键endl; ciagai; f(gain=|again=Y) ntinu; brk; bool
8、Safe() 安全性算法*/ in i,j,,l; it WokMAXROUR; /工作数组*/ fr(i=;in;+) Worki=VALABEi; for(i0;im;+) NISHi=fale; for(i=0;Wrj) break; if(j=n) FINISHitr; fo(;n;) Work=ALOCIOik; pl+i; i1; lse continue; if(l=m) ot系统就是安全得”edl; cu安全序列:”end; for(i=0;i;i+) cup; if(!=l-1) cot; coutendl; eturn true; f(=) cot系统就是不安全得”enl; retun 1;实验结果三、 实验心得(实验中遇到得问题及解决过程、实验中产生得错误及原因分析、实验得体会及收获、对做好今后实验提出建设性建议等.) 在多个进程同时运行时,系统根据各类系统资源得最大需求与各类系统得剩余资源为进程安排安全序列,使得系统能快速且安全地运行进程,不至发生死锁.银行家算法就是避免死锁得主要方法,其思路在很多方面都非常值得我们来学习借鉴.本实验中我对数据结构得设计算法存在问题,在同学得帮助下,还就是理解了,并且参考网上存在得银行家算法完成了本试验.对于银行家算法得了解更加深入,还体会了死锁与避免死锁得具体实施方法。