银行家算法课程设计报告abrx_第1页
银行家算法课程设计报告abrx_第2页
银行家算法课程设计报告abrx_第3页
银行家算法课程设计报告abrx_第4页
银行家算法课程设计报告abrx_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数学与计算机学院课程设计说明书课 程 名 称: 操作系统原理-课程设计 课 程 代 码: 题 目: 银行家算法 年级/专业/班: 2009 级软件工程 2 班 学 生 姓 名: 学 号: 312009080611202 开 始 时 间: 2011 年 12 月 05 日完 成 时 间: 2011 年 12 月 2525 日课程设计成绩:学习态度及平时成绩(30)技术水平与实际能力(20)创新(5)说明书撰写质量(45)总 分(100)指导教师签名: 年 月 日 目 录 1 1 引引 言言.11.1 问题的提出 .11.2 任务与分析.12 2 需求分析需求分析.12.1 数据的初始化.12.2

2、 银行家算法.12.3 系统安全性的检测 .12.4 显示功能.12.5 恢复功能.12.6 菜单功能.23 3 程序运行平台程序运行平台.24 4 总体设计总体设计.25 5 详细设计详细设计.25.1 数据的录入.25.2 显示模块 .45.3 系统安全状态检测 .55.4 系统试为进程分配资源 .75.5 恢复函数 .85.6 菜单选项 .86 6 系统测试系统测试.97 7 结论结论.13参考文献参考文献.15 摘摘 要要 随着计算机的普及计算机的日新月异,计算机可以说在飞速的发展着,计算机领域的相关技术也越来越高,许多的技术得到了较好的改进,使计算机越来越满足人们的要求和生活习惯,这

3、也是计算机得到飞速发展的原因之一, 。随着计算机的发展,人们对计算机的需求也越来越高,为了防止用户操作过于平凡,导致计算机同一时刻进程过多而产生死锁,所以本次任务主要是编写银行家算法避免计算机产生死锁。经过分析,本次主要是银行家算法通用程序的编写,以及测试所跟进程状态的安全性,经查阅相关资料,了解了银行家算法的大体思路,经过设计流程图,用 java 语言,利用 neatbean 6.9 实现了银行家算法的通用程序,该程序具有输入进程资源以及计算机可利用资源的数量,即初始化。输出资源进程资源信息,检测系统安全性,进程请求资源,系统试为进程分配资源,不成功恢复资源等功能。因此银行家算法的各种功能基

4、本已经实现。关键词:关键词:银行家算法通用程序;计算机;避免死锁的算法 -1-银行家算法1 引引 言言 1.1 问题的提出问题的提出 在多道程序程序系统中,虽可借助于多个进程的并发执行来改善系统资源利用率,提高系统的额吞吐量,但是可能会发生一种危险死锁。所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,他们将无法再向前推进。为了避免这种情况的发生,本次利用课程设计之际,编写了一个银行家算法通用程序,避免死锁在发生。1.2 任务与分析任务与分析 本课题主要的目的是编写银行家算法通用程序,功能主要包括银行家算法中数据结构的初始化,银行家算法的实现

5、,安全性检测的算法实现等等。以及对给定的状态进行测试安全性等。2 2 需求分析需求分析2.1 1 数据的初始化数据的初始化对银行家算法中的数据结构进行初始化,包括资源种类和进程数目的输入,可利用资源的初始化,进程的最大需求矩阵,分配矩阵。 2.2 银行家算法银行家算法对一个进程请求的资源进行判断,看是否可以为其立即进行资源的分配。若可以,试着分配,并且进行安全性的检测,若不安全,恢复原来的资源分配情况。2.3 系统安全性的检测系统安全性的检测能够对某时刻的资源分配情况进行检测,判断系统是否安全。2.4 显示功能显示功能显示某时刻资源的分配状态2.5 恢复功能恢复功能对进程请求资源,已获得分配的

6、,经检测不安全的状态进行恢复为请求前的状态-2-银行家算法2.6 菜单功能菜单功能列出用户能操作的选项3 3 程序运行平台程序运行平台neatbean ide 6.9具体操作如下:文件-打开项目-运行-运行文件。 4 4 总体设计总体设计 图 4.1 系统总体框架图5 5 详细设计详细设计5.15.1 数据的录入数据的录入选择数据录入菜单后,系统将提示用户输入相关的数据。包括输入资源种类,进程数目,以及可利用资源数目。进程最大需求矩阵,已分配矩阵。流程图如图 6.1:关键代码: /*-初始化函数-*/ public void input() system.out.println(请输入资源的种

7、类 n 和进程数 m:); n=sc.nextint() ;银行家算法初始化数据试分配资源除信息菜单选项安全检测改信息恢复资源显示资源找信息-3-银行家算法 m=sc.nextint(); available=new int1n; request=new int1n; allocation=new intmn; need=new intmm; max=new intmn; system.out.println(请输入各类资源的数目:); for(int i=0;in;i+) available0i=sc.nextint(); system.out.println(请输入各进程请求的各类资源的最

8、大数目:); for(int h=0;hm;h+) for(int j=0;jn;j+) maxhj=sc.nextint(); / system.out.println(); system.out.println(请输入各进程请求的各类资源已经分配数目:); for(int h=0;hm;h+) for(int j=0;jn;j+) allocationhj=sc.nextint(); / system.out.println(); for(int k=0;km;k+) for(int e=0;en;e+) needke=maxke-allocationke; -4-银行家算法 /*-初始化

9、函数结束-*/5.25.2 显示模块显示模块将进程的资源分配情况显示出来流程图:关键代码: /*-显示函数-*/ public void display() int i,j; system.out.println(正在更新数据.);system.out.println(|-|-|-|-|-|-|); system.out.println(|-| 资源| max | allocation | need | available |); system.out.println(|进程 |); system.out.println(|-|-|-|-|-|); for(i=0;im;i+) system.

10、out.print(|p+i+ |); for(j=0;jn;j+) system.out.print(maxij+ ); system.out.print(|); for(j=0;jn;j+) system.out.print( +allocationij); system.out.print(|); for(j=0;jn;j+) system.out.print( +needij); system.out.print(|); if(i=0) for(j=0;j0)system.out.println(); system.out.println(|-|-|-|-|-|); /*-显示函数结束

11、-*/5.35.3 系统安全状态检测系统安全状态检测 能对跟定的系统状态进行安全检测,成功输出系统安全状态图,否则输出系统状态不安全流程图:关键代码:/*-检测状态安全涵数函数-*/void checksafe1(int s) int temp=new intm,i,l=0,k=0,count=0; boolean finish=new booleanm; work=new int1n; work1=new intmn; work2=new int mn; int a=jcys(m); for(int v=0;vm;v+) finishv=false; system.arraycopy(ava

12、ilable0, 0, work0, 0, n); i=s;/s 传递进来赋给 i,s 是用户输入的进程号(有主函数里的 in 传递进来) while(im&k!=m&count!=a) for(int j=0;jn;j+) if (finishi=false&needij=work0j)l+; if(l=n) system.arraycopy(work0, 0, work1k, 0, n);-6-银行家算法 for(int j=0;jn;j+) work0j=work0j+allocationij; system.arraycopy(work0, 0, work2k, 0, n); fini

13、shi=true; tempk=i; k+; l=0; count+; i=(i+1)%m;/从用户选择的进程开始对每个进程都要检测 if(k!=m) system.out.println(系统资源状态不安全! ); else system.out.println(已通过安全性测试!); system.out.println(系统状态安全); system.out.println(打印输出.);system.out.println(|-|-|-|-|-|-|-|); system.out.println(|-| 资源| work | need | allocation | work+alloc

14、ation | funish); system.out.println(|进程 |); system.out.println(|-|-|-|-|-|); for(i=0;im;i+) system.out.print(|p+tempi+ |); for(int j=0;jn;j+) system.out.print(work1ij+ ); system.out.print(|); for(int j=0;jn;j+) -7-银行家算法 system.out.print( +needtempij); system.out.print(|); for(int j=0;jn;j+) system.o

15、ut.print( +allocationtempij); system.out.print(|); for(int j=0;jn;j+) system.out.print( +work2ij); system.out.print(|); system.out.println( +finishi+ |); system.out.println(|-|-|-|-|-|-|); /*-检测状态安全涵数结束-*/5.45.4 系统试为进程分配资源系统试为进程分配资源首先由用户输入要需要请求求资源的进程号,然后根据提示输入请求资源的数量,当输入满足要求后,系统试为该进程分配资源流程图:关键代码:/*-

16、试分配函数-*/void tryfenpei(int i) for(int f=0;fn;f+) available0f = available0f - request0f; allocationif = allocationif + request0f; needif = needif-request0f; /*-试分配函数结束-*/-8-银行家算法5.55.5 恢复函数恢复函数当系统试着为进程分配资源后,进检测分配后的状态为不安全,既要恢复分配以前的状态。流程图:关键代码:/*-恢复数据函数-*/void refenpei(int i) for(int f=0;f的 a 状态测试选择 1

17、输入数据并显示: 图 6.2-10-银行家算法选择 3 进行测试:结果如图 6.3 所示 图 6.3对 1b 状态进行测试:选择 1 输入数据 图 6.4选择 3 进行状态安全性检测,结果如下图所示:-11-银行家算法 图 6.5对 2所跟状态进行检测,选择 1 输入数据: -12-银行家算法 图 6.6系统状态安全。输入 3 安全状态检测,结果下图所示: 图 6.7系统状态安全。选择 4,输入 2中进程 2 请求资源(0420) ,结果如图 6.8 所示:-13-银行家算法 图 6.8因此可以立即为其分配资源。7 结论该题目是银行家算法,主要是编写银行家算法通用程序的编写,并且测试题目给出的

18、状态的安全性,以及进程请求资源是否可以立即进行分配。进过几天的努力,终于实现了该题目所需要完成的功能,包括进程初始态资源的录入,检测系统安全状态,银行家算法的实现,即进程发起资源请求,经判断后,系统试着把资源分配跟该进程,然后调用系统安全检测函数进行检测,如果检测通过,既可以立即跟该进程进行资源分配,否则分配失败,恢复分配前的进程资源情况,以及显示进程资源状态等功能。经输入数据测试后,功能满足,结果准确。该程序满足银行家的通用算法,即用户可以进行资源种类和进程的个数。另外采用了菜单式的选项,用户可以明了的选择自己想要做的事情。但是该程序实在 dos 下完成的输入,见面看起来不是很舒服,如果有-14-银行家算法多的时间,可以试着采用图形界面编程,在窗口中观察结果更加清晰。 通过本次课程设计,可以说是受益匪浅,学到了许多的东西。在编写程序的过程中,遇到了许多的问题,如知道了系统安全性检查的方法,但是在编写的过程中,由于变量的位置没有放正确,导致结果不正确,思维却受到了限制,因为思路根本就没错,因此很难发现是哪里错,如果不采取正确的方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论