1、输入个进程的最大需求量 Max:输入个进程已经申请的资源量 Allocation:(2) 输出的形式系统目前可用的资源Avaliable:(资源名)进程名MaxAllocati onNeed(资源名)(显示系统是否安全)分配序列:(3)程序所能达到的功能 通过手动输入资源种类数量和各进程的最大需求量、 已经申请的资源量, 运用银行家 算法检测系统是否安全, 若安全则给出安全序列, 并且当用户继续输入某进程的资源请求时, 能够继续判断系统的安全性。(4) 测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。 正确输入输入参数(已申请资源数)错误3、概要设计所有抽象数据类型的定义:i
2、nt Max100100; / 各进程所需各类资源的最大需求char name100 ;/ 资源的名称int Allocation100100; / 系统已分配资源int Need100100 ; / 还需要资源int Request100; / 请求资源向量int temp100; / 存放安全序列int Work100;/ 存放系统可提供资源int M=100; / 作业的最大数为 100int N=100; / 资源的最大数为 100 主程序的流程 :* 变量初始化;* 接收用户输入 n,m,Maxij ,Allocation ij;* 按照银行家算法判断当前状态安全与否, 安全给出安全
3、序列, 不安 全给出提示;* 如果安全,提示 用户输入下一时 刻进程 Pk 的资源请求Request(R,R);* 如果不安全或者无新请求则退出。各程序模块之间的层次 (调用 )关系使用 Main 函数对全局变量进行初始化,然后调用 showdata 函数对各资源 和进程进行整合显示,最后调用 safe 函数即银行家算法判定系统是否安全。若 安全,并想继续对某进程进行资源请求,则调用 request 函数进行操作,其中 request函数又调用changedata函数、showdata函数和safe函数进行请求后的数据修改、显示以及对系统安全性的判定。4、详细设计 实现程序模块的具体算法。 i
4、nt safe()/ 安全性算法int i,k=0,m,apply,Finish100=0;int j;int flag=0;Work0=Avaliable0;Work1=Avaliable1;Work2=Avaliable2; for(i=0;iM;i+)apply=0;for(j=0;jN;j+)if (Finishi=False&Needij=Workj) apply+;if(apply=N) for(m=0;m+)Workm=Workm+Allocationim;/ 变分配数 Finishi=True;tempk=i;i=-1;k+;flag+;for(i=0;if(Finishi=F
5、alse)cout 系统不安全 endl;/ 不成功系统不安全 return -1; 系统是安全的 !/ 如果安全,输出成功 cout 安全序列 :;i+)/ 输出运行进程数组 couttempi;if(iM-1) coutreturn 0;5、调试分析(1) 调试过程中遇到的问题以及解决方法,设计与实现的回顾讨论和分析 起初,对于银行家算法的运算步骤有一定的偏差,导致在将算法编码时造成了一些错误,结果无法得到正确答案,之后通过仔细查阅银行家算法的步骤, 问题得以及时解决。(2) 算法的性能分析用户对可供资源和各进程所需要的最大资源量和已分配资源量进行赋值, 可得到系统的安全性判定,以及安全时
6、的安全序列以及对资源进行请求后的系统 安全性判定。(3) 经验体会通过对银行家算法的编码,让我对银行家算法的原理有了更为深刻的理解, 同时也让我意识到只有通过亲自动手实践,才能加深对算法思想的理解与记忆。6、用户使用说明程序的使用说明,列出每一步的操作步骤7、测试结果列出测试结果,包括输入和输出Allocationab321之后对进程一进行资源请求:鶴雷请求请选擇功能号:hress any key to cent In ue8附录带注释的源程序,注释应清楚具体#i ncludestri ng.hstdio.h#define False 0#define True 1int Max100100=
7、0;/ 各进程所需各类资源的最大需求int Avaliable100=0;/ 系统可用资源char name100=0;int Allocation100100=0;/ 系统已分配资源int Need100100=0;/ 还需要资源int Request100=0;/ 请求资源向量int temp100=0;/ 存放安全序列int Work100=0;/ 作业的最大数为 100/ 资源的最大数为 100void showdata()/ 显示资源矩阵int i,j; 系统目前可用的资源 Avaliable:i+)namei for (j=0;j+)Avaliablej/ 输出分配资源 cout
8、Max Allocation Need 进程名 3;MaxijAllocationij for(j=0;j+) coutint changdata(int i)/ 进行资源分配j+) Avaliablej=Avaliablej-Requestj;Allocationij=Allocationij+Requestj;Needij=Needij-Requestj;return 1; int safe()/ 安全性算法 for(i=0;i+)/ 输出运行进程数组void request()/ 利用银行家算法对申请资源对进行判定char ch;int i=0,j=0;ch=y 请输入要求分配的资源进程
9、号 (0-M-1i;/ 输入须申请的资源号 请输入进程 申请的资源 :namejNeedij)/ 判断申请是否大于需求,若大于则出错 进程 申请的资源大于它需要的资源 coutAvaliablej)/ 判断申请是否大于当前资源, 若 大于则 / 出错 申请的资源大于系统现在可利用的资源 分配出错,不予分配 ! ch=break;if(ch=) changdata(i);/ 根据进程需求量变换资源 showdata();/ 根据进程需求量显示变换后的资源 safe();/ 根据进程需求量进行银行家算法判断int main()/ 主函数 int i,j,number,m,n,flag,choice
10、; char ming;* 单 处 理 机 系 统 进 程 调 度 实 现 * 请首先输入系统可供资源种类的数量 : cinn;N=n;i+) cout 资源 i+1 的名称 :ming; namei=ming; 资源的数量 :number;Avaliablei=number; coutMaxij) flag=1;Needij=Maxij-Allocationij;if(flag) 申请的资源大于最大需求量,请重新输入 !n while(flag);showdata();/ 显示各种资源safe();/ 用银行家算法判定系统是否安全 while(choice).* 0: 离开 1: 资源请求 请选择功能号:choice;switch(choice)case 1: request();case 0: choice=0;default: 请正确选择功能号 (0-1)!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1