




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信软学院课程设计报告题目全称:用高级语言Java设计辅助教学软件(模拟银行家算法) 课程名称:计算机操作系统 指导老师:陈佳 序号学生姓名学号分工成绩1组长,软件架构,界面设计主要代码,文档第四章2部分核心代码,软件测试,文档第五章3需求分析,文档第二章4结构构思,文档第三章5参与代码编写,文档第一章6材料收集和整理,需求分析指导老师评语: 签字: 17目录目录第1章绪论31.1课题背景31.2课题目的31.3课题意义31.4银行家算法31.5死锁41.6安全性序列4第2章需求分析52.1环境需求52.2功能需求52.3性能需求52.4界面需求62.5本章小结6第3章概要设计73.1总体设计73.1.1界面设计73.1.2功能模块设计73.1.3初始化进程数与资源数73.1.4初始化资源73.1.5资源状况的显示73.1.6申请资源Request83.2本章小结8第4章详细设计94.1开发环境介绍94.2主要功能模块简介94.2.1概述94.2.2程序工作流程104.2.3界面设计简介104.2.4面向对象的思想104.2.5MVS模式114.3主要模块详细设计114.3.1模型类和边缘类114.3.2模型类114.3.3边缘类124.3.4银行家算法核心类safety.java124.3.5算法流程124.3.6safety.java源代码144.3.7简要说明174.4界面174.5本章小结18第5章测试及成果展示195.1测试环境195.1.1硬件环境195.1.2软件运行软件环境195.1.3测试方法和工具195.2测试用例和结果195.2.1测试范围195.2.2界面测试195.2.3软件工作原理模拟过程测试205.3成果展示235.4本章小结23参考文献24第一章 绪论第1章 绪论1.1 课题背景在多道程序系统中,虽可以借助多个进程的并发执行来改善系统的资源利用率,提高系统吞吐量,但可能发生一种危险死锁,即多个进程在运行过程中因争夺资源而造成的一种僵局,若无外力作用,将无法再向前推进。如此,寻求一种避免死锁的方法便显得有为重要。死锁的产生一般的原因有两点:竞争资源和进程间推进顺序非法。因此,我们只需在当前的有限资源下,找到一组合法的执行顺序,便能很好的避免死锁,我们称它为安全序列。而银行家算法起源于银行系统的发放贷款,和计算机操作系统的资源分配完全符合,因此可以借鉴该算法的思想,设计出一种有效的算法程序,解决该问题。1.2 课题目的1. 进一步理解利用银行家算法避免死锁的问题。2. 在了解和掌握银行家算法的基础上,编制银行家算法通用程序,将调试结果显示在计算机屏幕上,再检测和笔算的一致性。3. 理解和掌握安全序列、安全性算法。1.3 课题意义1. 运用软件工程的方法指导设计和实现,即是对这学期刚刚学过的软件工程课的复习,又是一次实战演练,从而提高自己的分析问题,解决问题和动手能力;2. 通过整个算法的设计与实现进一步加深了对算法的理解和多道程序下的计算机系统资源分配现状,为以后进一步的学习打下了良好的基础。1.4 银行家算法我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。为保证资金的安全,银行家规定:1. 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;2. 顾客可以分歧贷款,但贷款的总数不能超过最大需求量;3. 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;4. 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。1.5 死锁死锁是进程死锁的简称,是由Dijkstra于1965年研究银行家算法时首先提出来的。是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面。很显然,如果没有外力的作用,那麽死锁涉及到的各个进程都将永远处于封锁状态。它是计算机操作系统乃至并发程序设计中最难处理的问题之一。实际上,死锁问题不仅在计算机系统中存在,在我们日常生活中它也广泛存在。在计算机系统中,涉及软件,硬件资源都可能发生死锁。例如:系统中只有一台CD-ROM驱动器和一台打印机,某一个进程占有了CD-ROM驱动器,又申请打印机;另一进程占有了打印机,还申请CD-ROM。结果,两个进程都被阻塞,永远也不能自行解除。1.6 安全性序列安全序列的的实际意义在于:系统每次进行资源分配后,如果对于系统中新的资源状况,存在一个安全序列,则至少存在一条确保系统不会进入死锁的路径。按照该序列,银行家可以实施一个有效的分配过程使得所有客户得到满足。银行家算法的核心在于安全序列的产生。安全序列正是一种安全的进程推进顺序。第2章 需求分析第2章 需求分析2.1 环境需求1.硬件:windows操作系统电脑;2.软件:电脑已配置好Java环境,安装有Eclipse软件。2.2 功能需求1.软件能利用安全性算法对T0时刻的资源已分配情况进行分析,判断系统在T0时刻是否存在一个安全序列;2.某一资源发出请求向量,软件按照银行家算法进行检查,判断是否存在一个安全序列,系统是否安全;3.用户能输入初始化设置,设置进程数与资源数;4.用户可初始化资源,对各个资源的总数进行设置;5.用户可对每一进程的各个资源最大需求数量以及已分配数量进行设定;6软件能保存输入的进程与资源信息,并显示出输入的进程信息与资源信息;7.软件能进行资源请求,使某一进程发出请求向量,用户能选择发出请求向量的进程,并输入请求向量的信息;8.软件能保存输入的请求向量信息,并显示出请求向量的信息;9.软件提供重置所有数据功能,用户能够重置所有数据,进行下一轮银行家算法检查。2.3 性能需求1.软件在用户选择完初始化设置中的进程数与资源数并确定后,弹出消息框显示初始化设置的进程数与资源数信息,并给出下一步操作提示;2.软件在初始化资源设定中进行判定,如果资源数与初始化设置中不同则不予通过,相同则弹出消息框给出下一步操作提示;3.用户在输入每个进程的各个资源最大需求数量以及已分配数量时,若资源数与初始化设置中不同则不予通过,相同则弹出消息框设置成功并提示进行下一个进程资源数进行设定;当所有进程的资源数设定完成后,弹出消息框提示用户所有的参数设置已经完成;若输入的某一进程的最大需求超过了资源总数,弹出消息框提示用户设置出错;若输入的某一进程的已分配超过了最大需求,弹出消息框提示用户设置出错;4.软件提供显示T0时刻资源分配表的窗口,显示Available以及各个进程的进程名,Max,Allocation,Need信息;5. 软件可对进程请求资源的资源数进行判定,如果资源数与初始化设置中不同则不予通过,相同则弹出消息框给出下一步操作提示;若请求向量大于需求,则给出提示输入不合理;6. 软件提供显示T0时刻安全序列表的窗口,显示进程名,Work,Need,Allocation,Work + Allocation以及Finish信息。2.4 界面需求1.界面简洁清晰;2.输入输出明确;3.功能实现时条理清晰。2.5 本章小结需求分析是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么。指的是在建立一个新的或改变一个现存的电脑系统时描写新系统的目的、范围、定义和功能时所要做的所有的工作 。操作系统按银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程尚需求的资源量,若是系统现存的资源可以满足它尚需求的资源量,则按当前的申请量来分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程申请的资源量是否超过了它尚需的资源量。若超过则拒绝分配,若没有超过则再测试系统尚存的资源是否满足该进程尚需的资源量,若满足即可按当前的申请量来分配,若不满足亦推迟分配。根据上述银行家算法描述,可以得到本项目的需求,软件应该提供进程数资源数的设定,各个进程的具体资源信息,以及请求向量的数据的输入,以及进程信息的显示和安全序列表的显示。需求分析能够更好的给开发者提供开发的目标,以及对本项目要干什么做什么,使我们理解更加深第3章 概要设计第3章 概要设计3.1 总体设计3.1.1 界面设计使用java写出银行家算法程序的界面,如图3-1所示。左上角为初始化进程个数与资源种类数模块;左下方为初始化资源模块,用于输入每个进程拥有每类资源的数量,以及最大需求(max矩阵)、已分配(allocation矩阵)。每输入一组数据便点击确认键提交一次。右上角显示出该时刻的资源分配情况;右下部分则可以让用户在该时刻对某进程申请资源,并进行安全性检查,显示申请资源后系统是否处于安全状态。图3-1 主要界面3.1.2 功能模块设计3.1.3 初始化进程数与资源数1. 设计进程数下拉菜单,选择0-10个进程。2. 设计资源数下拉菜单,选择0-10个资源种类。3. 确定按钮,点击后弹出消息对话框,提示下一步。3.1.4 初始化资源1. 设计一文本区域,用于用户输入每类资源初始数目,输入数字以空格隔开,确定按钮提交。2. 设计两个文本区域,分别用于用户输入每个进程的Max()矩阵和Allocation()矩阵,输入一次后确定提交,一共输入与进程数相同的次数。3.1.5 资源状况的显示每当输入一次Max()和Allocation()的值确定后,打印出该进程的信息,最后形成一张资源信息表3.1.6 申请资源Request1. 设计安全性检查按钮,点击后执行安全性算法,打印出该时刻系统安全性表格,并输出该时刻系统安全性序列 2. 设计一下拉菜单和一文本域,分别用于选择申请资源的进程以及输入申请资源的数量,输入数字以空格隔开.当申请资源可以分配,则提示成功,并打印安全序列,否则提示无法分配 3.2 本章小结总体设计:即对有关系统全局问题的设计,也就是设计系统总的处理方案,又称系统概要设计。在该部分中,我们初步设想与模拟了程序的模板界面以及一些可能出现的问题,在确定这些之后我们又分析决定了模板与层次的设计方式。之后我们考虑到用户的实验体验等问题,决定优化了用户输入并且增加了重置所有数据按钮,使用户在使用时能够更加方便的多次输入数据,不用重复打开程序。总体设计定义了系统的大概界面需要实现的功能以及用户输入输出的方式,但未确定具体的实现方法,这部分内容将在下一章节的详细设计中确定。第4章 详细设计第4章 详细设计4.1 开发环境介绍l NetBeansNetBeans IDE是一个屡获殊荣的集成开发环境,可以方便的在Windows,Mac,Linux和Solaris中运行。NetBeans包括开源的开发环境和应用平台,NetBeans IDE可以使开发人员利用Java平台能够快速创建Web、企业、桌面以及移动的应用程序,NetBeans IDE目前支持PHP、Ruby、JavaScript、Ajax、Groovy、Grails和C/C+等开发语言。NetBeans项目由一个活跃的开发社区提供支持, NetBean开发环境提供了丰富的产品文档和培训资源以及大量的第三方插件。NetBeans是开源软件开发集成环境,是一个开放框架,可扩展的开发平台,可以用于Java、C/C+,PHP等语言的开发,本身是一个开发平台,可以通过扩展插件来扩展功能。1在 NetBeans Platform 平台中,应用软体是用一系列的软体模组(Modular Software Components)建构出来。而这些模组是一个jar档(Java Archive File)它包含了一组Java程式的类别而它们实作全依据依 NetBeans 定义了的公开介面以及一系列用来区分不同模组的定义描述档(Manifest File)。有赖於模组化带来的好处,用模组来建构的应用程式可只要加上新的模组就能进一步扩充。由於模组可以独立地进行开发,所以由 NetBeans 平台开发出来的应用程式就能利用着第三方软件,非常容易及有效率地进行扩充l Javajava是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, JavaSE)的总称。Java自面世后就非常流行,发展迅速,对C+语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。4.2 主要功能模块简介4.2.1 概述本课程设计的详细设计主要针对主要界面的设计和主要算法的设计。优良的界面设计是本软件设计成功与否的重要因素,也是本次课程设计的两点所在。核心算法:银行家算法,是本程序的灵魂,整个程序都是围绕该算法而构成的。本节主要描述软件编码中的主要类和方法,具体代码参考附件。4.2.2 程序工作流程程序需要完成的工作相对简单,主要包含两大部分:设置和安全性检查。其余部分都是辅助工作,为了给使用者相关提示。如图 4-1所示。图 4-1 程序工作流程图 4.2.3 界面设计简介参照程序工作流程,可将界面主要划分为三个区域:设置区域、显示区域、操作区域。其中,设置区域主要实现进程、资源的初始设置,包括设置进程的数量,资源的种类数量和资源分配情况等;显示区域是以表格形式将设置的信息展示给使用者以及显示安全性检查过程产生的表格;操作区域是为请求资源操作准备的。图 4-2 界面设计4.2.4 面向对象的思想Java是面向对象的语言,面向对象的关键在于“抽象”。银行家算法中主要的两大对象就是进程和资源。对它们进行抽象,就能很快建立好整个模型。4.2.5 MVS模式MVC全名是Model View Controller,是模型(model)视图(view)控制器(controller)的缩写,,采用这种模式能够很清楚给人思路,利于整个软件的开发。所以,我们设计了如图 4-3的工程结构:图 4-3 工程结构l org.bank.model包模型包,主要包含抽象出的模型类,实体类。l org.bank.view包视图包,有关界面设计的类都放在这个包中。l org.bank.util包操作包,需要用到的操作方法函数都放在这个包中。l org.bank.main包该包存放银行家算法核心类。4.3 主要模块详细设计4.3.1 模型类和边缘类4.3.2 模型类该类主要放在org.bank.model包中,是将进程和资源抽象化,分别建立myprocess和myresources类。类图如图 4-4:图 4-4 软件工程类图字段说明:nr:资源种类数目maxNeed:最大资源需求数allocation:已分配资源数need:尚需资源数available:可利用资源4.3.3 边缘类该类存放在org.bank.util包中,主要是操作类,里面包含一些需要常用的方法函数,用来服务整个软件。比如把字符串转化为整型数组等。其主要的方法函数如下:/将整形数组转化为以空格分开的字符串public static String toString(int a)/将字符串转化为n个整形数字public static int toInt(String s , int n) /检查字符串是否符合以空格分开private static boolean cheak(String ss)/得到进程p的各类需求资源,以整形数组返回public static int getNeed(Myprocess p)/比较a1 是否每个数都对应小于 a2public static boolean compare(int a1 ,int a2)4.3.4 银行家算法核心类safety.java该类三个方法:judge(),request()和getAvailable(),分别用于安全性检查,请求资源和得到当前可用资源统计。其中judge()是这个软件的核心,是银行家算法的精髓。教科书上的方法是面向结构化的,并不适用于我们这个软件,所以我们对这个算法进行了改造。4.3.5 算法流程如图 4-5所示图 4-5 银行家核心算法流程4.3.6 safety.java源代码package org.bank.main;import org.bank.model.*;import org.bank.util.OP;/* * 银行家算法类 * auther Chen * */public class Safety public static int np; /进程数和资源数public static int nr;public int available; public String table = new String105; /为界面表格准备public static Myprocess p = new Myprocessnp; /进程public static Myresource r = new Myresourcenr; /资源 public Safety(int np, int nr, Myprocess p, Myresource r) this.np = np;this.nr = nr;this.p = p;this.r = r;/*安全性判断,成功返回安全性序列*/public int judge()int order = new intnp; /存放安全序列boolean finish = new booleannp; /能否分配标志int work = new intnr; /工作向量work = this.getAvailable(); /工作向量开始等于available/*安全性检查核心*/int i=0,k=0,n=0;for( ;i np; )int count = 1;for(int j = 0;j nr; j+)if( inp & !finishi) /进程未分配才进行if( (this.pi.maxNeedj - this.pi.allocationj) = workj )count+; /必须每一个资源项都检查,小于if(count = nr) tablen0 = OP.toString(work);for(int m = 0;m nr; m+)workm = workm + this.pi.allocationm; tablen1 = OP.toString(pi.getNeed(); tablen2 = OP.toString(pi.getAllocation(); tablen3 = OP.toString( work); tablen4 = True; n+;finishi = true;orderk+ = i;i = 0; /从头开始检查else /需求过大,检查下一个i+;continue; /该进程已经分配到资源,检查下一个elsei+;continue;/检查所有finishfor(i = 0;i np; i+)if(!finishi)return null;return order;/请求资源分配public int request(Myprocess p , int req) int r = 0; if( OP.compare( req ,p.getNeed() ) ) /请求小于等于需要 if( OP.compare( req, this.getAvailable() ) ) /可利用资源-请求资源 for(int i = 0;i req.length; i+) /请求小于于可利用 this.availablei -= reqi; p.allocationi += reqi; p.needi -= reqi; else r = -2; /请求小于大于需要,不合理 else r =-1; /请求大于可利用,该进程等待 return r; /得到当前各类可利用资源的总和 public int getAvailable()int available = new intnr;int allocation = new intnr;for(int i = 0;i nr;i+) /获得各进程分配同类资源的总和向量for(int j = 0;j np;j+)allocationi=allocationi+pj.allocationi;for(int i = 0;i nr;i+) /计算剩余资源availablei = ri.available - allocationi;return available;public void setAvailable(int available) this.available = available;4.3.7 简要说明我们将书上结构化的算法进行了改写,变成符合java面向对象的过程。另外对安全性序列的产生过程进行了修改。书上采用了从上到下的顺序,这不符合我们手动求序列的过程,容易让人溜掉。所以我们进行了改写,改变成反复从上到下的顺序,即每一次扫面过程都是从第一个开始,这样符合我们的习惯。4.4 界面界面的代码放在org.bank.view包中,主要运用java.swing相关知识构建一个让人易与操作的界面。由于界面的代码量相当复杂,现主要对重要部分和监听事件说明。详细见附件。public class FrmMain extends javax.swing.JFrame Myprocess p = null; Myresource r = null; Safety s = null; int allres = null; int np,nr;/分别是进程计数、资源计数 int nump=0;/用于控制初始化进程状态计数 javax.swing.table.DefaultTableModel dtm1 = new javax.swing.table.DefaultTableModel();/控制表格格式 java.util.Vector data = new java.util.Vector();/表数据 java.util.Vector title = new java.util.Vector();/表头 public FrmMain() initComponents(); /设置表格初始化 jTa1.setModel(dtm1); title.add(进程);title.add(Max);title.add(Allocation);title.add(Need);title.add(Available); dtm1.setDataVector(data, title);/显示表头,内容暂时为空 private void initComponents() /界面各控件的初始化private void jBtnAck1MouseClicked(java.awt.event.MouseEvent evt)/初始化进程、资源的数目private void jBtnAck3MouseClicked(java.awt.event.MouseEvent evt)/初始化资源状态private void jBtnAck2MouseClicked(java.awt.event.MouseEvent evt)/初始化每个进程的具体状态private void jBtnResetMouseClicked(java.awt.event.MouseEvent evt)/重置按钮的功能private void jBtnJudgeMouseClicked(java.awt.event.MouseEvent evt)/安全性检查按钮private voi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 棉花纤维质量分析工艺考核试卷及答案
- 浆料复卷工艺考核试卷及答案
- 芳烃抽提装置操作工突发故障应对考核试卷及答案
- 聚氨酯弹性层施工规范考核试卷及答案
- 信息技术考试试题及答案
- 信息技术发展试题及答案
- 中医诊断学基础知识点试题测试卷
- 银行债券笔试题库及答案
- DB33-T 1261-2021 全装修住宅室内装修设计标准 附条文说明
- 银行写作试题及答案
- 人力资源知识竞赛题库及答案
- 地铁轨道安全培训报道课件
- 2025年征信题库及答案
- 传染病及其预防(第一课时)课件-2025-2026学年人教版生物八年级上册
- (2025秋新版)二年级上册道德与法治全册教案
- 老挝药品注册管理办法
- 2025年社工工作者考试真题及答案
- 建设工程项目协同作业方案
- 同城理发店转租合同范本
- 问题解决策略:反思 课件 北师大版数学八年级上册
- 2025年国防竞赛题库及答案
评论
0/150
提交评论