欢迎来到天天文库
浏览记录
ID:9937800
大小:1.31 MB
页数:16页
时间:2018-05-16
《银行家算法课程设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、操作系统课程设计银行家算法专业:网络工程学号:姓名:伊兵指导老师:姜红一、实验名称:模拟实现银行家算法二、实验目的:用程序语言模拟实现银行家算法。银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。三、问题分析与设计1、算法思路:先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。2、银行家算法步骤:(1)如果R
2、equesti<or=Need,则转向步骤(2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2)如果Request<or=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。(3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值: Available=Available-Request[i]; Allocation=Allocation+Request;Need=Need-Request;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。3、安全性算法步骤:(1)设置
3、两个向量①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation;②布尔向量Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]=true。(2)从进程集合中找到一个能满足下述条件的进程:①Finish[i]=false②Need4、cation;Finish[i]=true;转向步骤(2)。(4)如果所有进程的Finish[i]=true,则表示系统处于安全状态;否则,系统处于不安全状态。4、流程图:①系统主要过程流程图:②银行家算法流程图:③安全性算法流程图:5、实现过程:一、开发环境编程语言:java开发环境:windows&eclipse二、开发过程:1、display()用于初始化资源矩阵和初始化进程,available[][]、allocation[]、need[][]、resource[]、process[]。2、print(int)用于打印T时刻的资源矩阵。3、cal()用于5、进行安全性算法。4、changeStatu()通过request向量改变资源使用情况并进行安全性检测。5、main()用于初始化程序。三、关键代码1.银行家算法while(flag){int[]req=newint[5];System.out.print("请输入您要请求资源的编号:");intchoose=scan.nextInt();System.out.print("请输入该进程的请求向量:");for(inti=0;i6、<=need[choose][0]&&req[1]<=need[choose][1]&&req[2]<=need[choose][2]&&req[3]<=need[choose][3]&&req[4]<=need[choose][4]);booleanflag2=(req[0]<=available[0]&&req[1]<=available[1]&&req[2]<=available[2]&&req[3]<=available[3]&&req[4]<=available[4]);System.out.println(flag1);System.out.prin7、tln(flag2);if(flag1){if(flag2){//判断请求向量是否小于可用资源数for(inti=0;i8、ss];//设置fini
4、cation;Finish[i]=true;转向步骤(2)。(4)如果所有进程的Finish[i]=true,则表示系统处于安全状态;否则,系统处于不安全状态。4、流程图:①系统主要过程流程图:②银行家算法流程图:③安全性算法流程图:5、实现过程:一、开发环境编程语言:java开发环境:windows&eclipse二、开发过程:1、display()用于初始化资源矩阵和初始化进程,available[][]、allocation[]、need[][]、resource[]、process[]。2、print(int)用于打印T时刻的资源矩阵。3、cal()用于
5、进行安全性算法。4、changeStatu()通过request向量改变资源使用情况并进行安全性检测。5、main()用于初始化程序。三、关键代码1.银行家算法while(flag){int[]req=newint[5];System.out.print("请输入您要请求资源的编号:");intchoose=scan.nextInt();System.out.print("请输入该进程的请求向量:");for(inti=0;i6、<=need[choose][0]&&req[1]<=need[choose][1]&&req[2]<=need[choose][2]&&req[3]<=need[choose][3]&&req[4]<=need[choose][4]);booleanflag2=(req[0]<=available[0]&&req[1]<=available[1]&&req[2]<=available[2]&&req[3]<=available[3]&&req[4]<=available[4]);System.out.println(flag1);System.out.prin7、tln(flag2);if(flag1){if(flag2){//判断请求向量是否小于可用资源数for(inti=0;i8、ss];//设置fini
6、<=need[choose][0]&&req[1]<=need[choose][1]&&req[2]<=need[choose][2]&&req[3]<=need[choose][3]&&req[4]<=need[choose][4]);booleanflag2=(req[0]<=available[0]&&req[1]<=available[1]&&req[2]<=available[2]&&req[3]<=available[3]&&req[4]<=available[4]);System.out.println(flag1);System.out.prin
7、tln(flag2);if(flag1){if(flag2){//判断请求向量是否小于可用资源数for(inti=0;i8、ss];//设置fini
8、ss];//设置fini
此文档下载收益归作者所有