您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 银行家算法设计-操作系统课程设计报告书
东莞理工学院操作系统课程设计报告第1页共17页课程设计:银行家算法设计目录一.设计目的:......................................................................................................................................................2二.设计内容:......................................................................................................................................................2三.设计过程.......................................................................................................................................................2实现功能.......................................................................................................................................................2添加功能.......................................................................................................................................................3设计思路.......................................................................................................................................................3算法和流程图...............................................................................................................................................3四.操作界面截图及分析...................................................................................................................................6五.设计总结:......................................................................................................................................................9附录:各程序主要函数及注释...........................................................................................................................9设计的函数.................................................................................................................................................12check检查安全性函数.......................................................................................................................12东莞理工学院操作系统课程设计报告第2页共17页主函数.................................................................................................................................................15一.设计目的:本设计的目的是通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。二.设计内容:编制银行家算法通用程序,并检测所给状态的系统安全性。设进程I提出请求Request[N],则银行家算法按如下规则进行判断。(1)如果Request[N]=NEED[I,N],则转(2);否则,出错。(2)如果Request[N]=AVAILABLE,则转(3);否则,出错。(3)系统试探分配资源,修改相关数据:AVAILABLE=AVAILABLE-REQUESTALLOCATION=ALLOCATION+REQUESTNEED=NEED-REQUEST(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。三.设计过程实现功能voidshowdata()//函数showdata,输出资源分配情况voidchangdata(intk)//函数changdata,改变可用资源和已经拿到资源和还需要的资源的值voidrstordata(intk)//函数rstordata,恢复可用资源和已经拿到资源和还需要的资源的值东莞理工学院操作系统课程设计报告第3页共17页intcheck(ints)//函数check,检查是否安全voidbank()//银行家算法添加功能无设计思路银行家算法,顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态。当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。显然,,每个进程的资源需求总量不能超过系统拥有的资源总数,银行算法进行资源分配可以避免死锁.算法和流程图1.银行家算法:设进程i提出请求Request[n],则银行家算法按如下规则进行判断。(1)如果Request[n]Need[i,n],则报错返回。(2)如果Request[n]Available,则进程i进入等待资源状态,返回。(3)假设进程i的申请已获批准,于是修改系统状态:Available=Available-RequestAllocation=Allocation+RequestNeed=Need-Request东莞理工学院操作系统课程设计报告第4页共17页(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。开始输入数据提出请求RequestRequest[j]=NEED[i][j]?Request[j]=AVAILABLE[j]?AVAILABLE[j]=AVAILABLE[j]-Request[j];ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j];NEED[k][j]=NEED[k][j]-Request[j];check?安全性检查调用showdata()函数,输出资源分配情况调用rstordata(i)函数,恢复资源数调用showdata()函数,输出资源分配情况输出信息:经安全性检查,系统安全,本次分配成功输出信息:系统不安全!!!本次资源申请不成功输出错误提示输出错误提示是否继续演示?NYN结束NYNYNYNNN东莞理工学院操作系统课程设计报告第5页共17页2.安全性检查(1)设置两个工作向量Work=Available;Finish[M]=False(2)从进程集合中找到一个满足下述条件的进程,Finish[i]=FalseNeed=Work如找到,执行(3);否则,执行(4)(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。Work=Work+AllocationFinish=TrueGOTO2(4)如所有的进程Finish[M]=true,则表示安全;否则系统不安全。所有的WORK[j]=AVAILABLE[j];所有的FINISH[i]=FALSEFINISH[i]==FALSE&&NEED[i][j]=WORK[j]?WORK[j]=WORK[j]+ALLOCATION[i][j];FINISH[i]=TRUE;所有的FINISH[i]=TRUE?Y安全不安全YNN东莞理工学院操作系统课程设计报告第6页共17页四.操作界面截图及分析1.输入数据2.输出数据东莞理工学院操作系统课程设计报告第7页共17页3.银行家算法检查安全性(1)输入正确的进程请求序列,结果:(2)输入错误的进程请求序列,结果:东莞理工学院操作系统课程设计报告第8页共17页4.测试输入非法数据:东莞理工学院操作系统课程设计报告第9页共17页五.设计总结:银行家算法就是为了使系统保持安全状态,避免死锁的发生。我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。在实现过程中没遇到什么大问题,主要是一开始没深刻理解银行家算法原理,以致出现了逻辑上的错误,于是我花了好一段时间去研究该算法,网上有各种各样的解释方法,把它们都看了之后,我感觉算是理解透了。在真正理解了原理之后,再去实现,问题就不大了。也由此我得到了一个经验,磨刀不费斩柴功,做好分析设计、明白清楚实现原理,代码实现就可以事半功倍了。若能满足则按当前的申请量分配资源,否则也要推迟分配。附录:各程序主要函数及注释(用红色黑体标注自己设计的函数)#includestring.h#includeiostreamusingnamespacestd;#defineFALSE0东莞理工学院操作系统课程设计报告第10页共17页#defineTRUE1#defineW10#defineR20intM;//总进程数intN;//资源种类intALL_RESOURCE[W];//各种资源的数目总和intMAX[W][R];//M个进程对N类资源最大资源需求量intAVAILABLE[R];//系统可用资源数intALLOCATION[W][R];//M个进程已经得到N类资源的资源量intNEED[W][R];//M个进程还需要N类资源的资源量i
本文标题:银行家算法设计-操作系统课程设计报告书
链接地址:https://www.777doc.com/doc-3929923 .html