欢迎来到天天文库
浏览记录
ID:6821313
大小:122.00 KB
页数:13页
时间:2018-01-27
《银行家算法实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、银行家算法实验报告一、设计目的银行家算法是是最具有代表性的避免死锁的算法,由于该算法能用于银行系统现金贷款而得名。该算法能够进一步深入理解死锁、产生死锁的必要条件、安全状态等重要概念。二、设计要求根据银行家算法的基本思想,编写和调试一个动态分配的模拟程序,并能够有效的防止和避免死锁的发生。三、设计思想 银行家算法: 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统
2、现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。1、银行家算法中的数据结构1)可利用资源向量Available是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个。 2)最大需求矩阵Max 这
3、是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。3)分配矩阵Allocation 这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的数目为K。4)需求矩阵Need 这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。Need[i,j]=Max[i,j]-All
4、ocation[i,j]2、银行家算法设进程P[i]提出请求Request(i)[j],如果Request(i)[j]=k,表示进程P[i]需要K个R(j)类型的资源。当P[i]发出请求后,系统按下述步骤进行判断:(1)如果Request(i)[j]<=Need[i][j],则转(2);否则,出错。(2)如果Request(i)[j]<=Available[j],则转(3);否则,出错。 (3)系统试探分配资源,修改相关数据: Available[j]=Available[j]-Request(i)[j]; Allocation[i][j
5、]=Allocation[i][j]+Request(i)[j]; Need[i][j]=Need[i][j]-Request(i)[j];(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。3、安全算法1)设置两个工作向量Work:=Available;Finish (2)从进程集合中找到一个满足下述条件的进程, Finish[i]==false; Need[i][]j<=Work[j]; 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 W
6、ork[j]=Work[j]+Allocation[i,j]; Finish[i]=true; Goto2(4)如所有的进程Finish[i]=true,则表示安全;否则系统不安全。四、流程图初始化函数input()开始输入资源种类数输入进程的数量输入可利用的资源数输入最大需求Max所需要的Need<0Error;初始化函数input()结束,银行家函数Resquest()提出请求Request[i]Error;Request[i]<=Need[i]RequestT[i]<=Available[[i]Error;分配错误!IsSafe();分
7、配成功!Available[i]-=Request[i];Allocation[i]-=Request[i];Need[i]+=Request[i];Available[[i]-=Request[i];Allocation[i]+=Request[i];Need[i]-=Request[i];是否进行再次分配退出程序银行家算法Resquest()结束;安全性算法IsSafe()开始Work=Available;Finish=false;Need[i]<=Work&&Finish[i]=false;Work+=Allocation[i];Fini
8、sh[i]=ture;所有进程的FINISH=ture;输出提示:系统是不安全的安全,输出安全序列Returnture;安全算法IsSafe()结束五
此文档下载收益归作者所有