欢迎来到天天文库
浏览记录
ID:47513299
大小:244.00 KB
页数:11页
时间:2020-01-12
《银行家算法c++语言(流程图代码全)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.操作系统教程——银行家算法院系计算机与软件学院班级08软件工程2班学号20081344066姓名何丽茗word资料.一、实验目的银行家算法是避免死锁的一种重要方法。通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁、产生死锁的必要条件、安全状态等重要概念,并掌握避免死锁的具体实施方法。二、实验内容根据银行家算法的基本思想,编写和调试一个实现动态资源分配的模拟程序,并能够有效地防止和避免死锁的发生。三、实验方法开始输入资源数m,及各类资源总数,初始化Available向量输入进程数n,i=1输入进程i的最大需求向量max。i≤nmax≤资源总数提示错误重新输入i加1任选一个进程
2、作为当前进程输入该进程的资源请求量Request调用银行家算法,及安全性算法,完成分配,或并给出提示Need向量为0该进程已运行结束Need矩阵为0所有进程运行都结束结束NYYNNY初始化need矩阵NY1.算法流程图word资料.1.算法数据结构1)可利用资源向量Available,它是一个最多含有100个元素的数组,其中的每一个元素代表一类可利用的资源的数目,其初始值是系统中所配置的该类全部可用资源数目。其数值随该类资源的分配和回收而动态地改变。如果Available(j)=k,标是系统中现有j类资源k个。2)最大需求矩阵Max,这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程
3、对m类资源的最大需求。如果Max(i,j)=k,表示进程i需要j类资源的最大数目为k。3)分配矩阵Allocation,这也是一个n×m的矩阵,它定义了系统中的每类资源当前一分配到每一个进程的资源数。如果Allocation(i,j)=k,表示进程i当前已经分到j类资源的数目为k。Allocationi表示进程i的分配向量,有矩阵Allocation的第i行构成。4)需求矩阵Need,这还是一个n×m的矩阵,用以表示每个进程还需要的各类资源的数目。如果Need(i,j)=k,表示进程i还需要j类资源k个,才能完成其任务。Needi表示进程i的需求向量,由矩阵Need的第i行构成。5)上述三个
4、矩阵间存在关系:Need(i,j)=Max(i,j)-Allocation(i,j);2.银行家算法设Request[i]是进程i的请求向量,如果Request[i,j]=K,表示进程i需要K个j类型的资源。当i发出资源请求后,系统按下述步骤进行检查:1)如果Requesti≤Need,则转向步骤2;否则,认为出错,因为它所请求的资源数已超过它当前的最大需求量。2)如果Requesti≤Available,则转向步骤3;否则,表示系统中尚无足够的资源满足i的申请,i必须等待。3)系统试探性地把资源分配给进程i,并修改下面数据结构中的数值:Available=Available-Request
5、iAllocationi=Allocationi+RequestiNeedi=Needi-Requesti4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。如果安全才正式将资源分配给进程i,以完成本次分配;否则,将试探分配作废,恢复原来的资源分配状态,让进程i等待。四、实验代码以及运行示例1.源代码:#include#include#include#defineFalse0#defineTrue1usingnamespacestd;intMax[100][100]={0};//各进程所需各类资源的最大需求intAval
6、iable[100]={0};//系统可用资源charname[100]={0};//资源的名称intAllocation[100][100]={0};//系统已分配资源word资料.intNeed[100][100]={0};//还需要资源intRequest[100]={0};//请求资源向量inttemp[100]={0};//存放安全序列intWork[100]={0};//存放系统可提供资源intM=100;//进程的最大数为intN=100;//资源的最大数为voidshowdata()//显示资源矩阵{inti,j;cout<<"系统目前可用的资源[Avaliable]:"<<
7、endl;for(i=0;i
此文档下载收益归作者所有