资源描述:
《操作系统课设电子稿》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一.课题简介银行家算法是避免死锁的一种重要方法,本课程设计要求用高级语言编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。死锁的产生,必须同时满足四个条件,即一个资源每次只能由一个进程占用:第二个为等待条件,即一个进程请求资源不能满足时,它必须等待,但它仍继续保持已得到的所有其他资源:第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。防止死锁的机构只能确保上述四个条件之一不出现,则系
2、统就不会发生死锁。通过这个算法可用解决生活中的实际问题,如银行贷款等.通过对这个算法的设计,让学生能够对书本知识有更深的理解,在操作和其它方面有更高的提升.二.程序总体设计随机分配算法:当进程申请资源时,如果系统中现存资源数能满足进程的当前资源申请量,就把资源能会产生死锁。随机分配算法很容易进入死锁.银行家分配算法,顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,
3、系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程循环等待资源,各进程都无法继续执行下去的死锁现象。把各进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态。当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。显然,,每个进程的资源需求总量不能超过系统拥有的资源总数,银行算法进行资源分配可以避免死锁.三
4、.算法的分析与设计模拟实现Dijkstra的银行家算法以避免死锁的出现.分两部分组成:第一部分:银行家算法(扫描)1.如果Request<=Need,则转向2;否则,出错2.如果Request<=Available,则转向3,否则等待3.系统试探分配请求的资源给进程AVAILABLE=AVAILABLE-REQUESTALLOCATION=ALLOCATION+REQUESTNEED=NEED-REQUEST4.系统执行安全性算法第二部分:安全性算法1.设置两个向量(1).工作向量:Work=Avai
5、lable(表示系统可提供给进程继续运行所需要的各类资源数目)(2).Finish:表示系统是否有足够资源分配给进程(True:有;False:没有).初始化为False2.若Finish[i]=False&&Need<=Work,则执行3;否则执行4(I为资源类别)3.进程P获得第i类资源,则顺利执行直至完成!并释放资源:Work=Work+Allocation;Finish[i]=true;转24. 若所有进程的Finish[i]=true,则表示系统安全;否则,不安全!银行家算法数据结构:假设有
6、M个进程N类资源,则有如下数据结构:MAX[M*N]M个进程对N类资源的最大需求量AVAILABLE[N]系统可用资源数ALLOCATION[M*N]M个进程已经得到N类资源的资源量NEED[M*N]M个进程还需要N类资源的资源量初始化流程图如下:银行家算法流程图如下:四.程序的描述#include"string.h"#include"iostream.h"#defineM5//总进程数#defineN3//总资源数#defineFALSE0#defineTRUE1//M个进程对N类资源最大资源需求量
7、intMAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};//系统可用资源数intAVAILABLE[N]={3,3,2};//M个进程已经得到N类资源的资源量intALLOCATION[M][N]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};//M个进程还需要N类资源的资源量intNEED[M][N]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};intRequest[N
8、]={0,0,0};voidmain()//主函数,实现银行家算法的基本流程{inti=0,j=0;//初始化进程数i和资源数jcharflag='Y';//是否继续进行银行家演示voidshowdata();//显示分配资源后的状态voidchangdata(int);//改变要申请的进程和所对应的资源intchkerr(int);//检测系统是否安全showdata();while(flag=='Y'
9、
10、flag=='y'){i=-1;while(i