欢迎来到天天文库
浏览记录
ID:51963702
大小:233.50 KB
页数:12页
时间:2020-03-20
《操作系统银行家算法实验归纳总结报告 .doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实验五银行家算法一、实验目的和要求①理解死锁概念,银行家算法及安全检测算法。②在Linux操作系统下用C++进行编程。③利用C++设计实现银行家算法的基本过程。④验证银行家算法对于避免死锁的作用。二、实验方法内容①算法设计思路1.设计进程对各类资源最大申请表示及初值确定。2.设定系统提供资源初始状况。3.设定每次某个进程对各类资源的申请表示。4.编制程序,依据银行家算法,决定其申请是否得到满足。②算法流程图如下:开始输入资源数m,及各类资源总数,初始化Available向量输入进程数n,i=1输入进程i的最大需求向量max。i≤nMax≤资
2、源总数提示错误重新输入i加1任选一进程作为当前进程输入该进程的资源请求量Request调用银行家算法,及安全性算法,完成分配,或给出提示该进程的Need向量0该进程已运行结束Need矩阵为0所有进程运行都结束ENDNYYNNY初始化Need矩阵NY③算法中用到的数据结构说明1.可利用资源向量Available,它是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源的数目,其初始值是系统中所配置的该类全部可用资源数目。其数值随该类资源的分配和回收而动态地改变。如果Available[j]=k,标是系统中现有Rj类资源k个。2.最大需
3、求矩阵P,这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果P(i,j)=k,表示进程Pi需要Rj类资源的最大数目为k。3.分配矩阵Allocation,这是一个n×m的矩阵,它定义了系统中的每类资源当前一分配到每一个进程的资源数。如果Allocation(i,j)=k,表示进程Pi当前已经分到Rj类资源的数目为k。Allocationi表示进程Pi的分配向量,有矩阵Allocation的第i行构成。4.需求矩阵Need,这是一个n×m的矩阵,用以表示每个进程还需要的各类资源的数目。如果Need(i,j)=
4、k,表示进程Pi还需要Rj类资源k个,才能完成其任务。Needi表示进程i的需求向量,由矩阵Need的第i行构成。上述三个矩阵间存在关系:Need(i,j)=P(i,j)-Allocation(i,j);5.Requesti是进程Pi的请求向量。Requesti(j)=k表示进程Pi请求分配Rj类资源k个。当Pi发出资源请求后,系统按下述步骤进行检查:①.如果Requesti≤Need,则转向步骤2;否则出错。②如果Requesti≤R,则转向步骤3;否则,表示系统中尚无足够的资源满足Pi的申请,Pi必须等待。③系统试探性地把资源分配给进程
5、Pi,并修改下面数据结构中的数值:R=R-RequestiAllocationI=AllocationI+RequestiNeedI=Needi-Requesti④系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。如果安全才正式将资源分配给进程Pi,以完成本次分配;否则,将试探分配作废,恢复原来的资源分配状态,让进程Pi等待6.主要的常量变量#defineW10//最大进程数W=10#defineR20//最大资源总数R=20intAVAILABLE[R];//可利用资源向量intMAX[W][R];//最大需求矩阵intALL
6、OCATION[W][R];//分配矩阵intNEED[W][R];//需求矩阵intRequest[R];//进程请求向量voidchangdata(intk);//进程请求资源数据改变intchksec(ints);//系统安全性的检测7.主要模块(函数和数据)voidinputdata();//数据输入voidshowdata();//数据显示voidchangdata(intk);//进程请求资源数据改变voidrestoredata(intk);//数据恢复intchksec(ints);//系统安全性的检测intchkmax(i
7、nts);//检测最大需求voidbank();//检测分配的资源是否合理四、实验代码Banker.cpp#include#includeusingnamespacestd;#defineFALSE0#defineTRUE1#defineW10//最大进程数W=10#defineR20//最大资源总数R=20intM;intN;intALL_RESOURCE[W];intAVAILABLE[R];//可利用资源向量intMAX[W][R];//最大需求矩阵intALLOCATION[W][R];//分配矩
8、阵intNEED[W][R];//需求矩阵intRequest[R];//进程请求向量voidinputdata();//数据输入voidshowdata();//数据显示voi
此文档下载收益归作者所有