操作系统课程设计.docx

上传人:b****5 文档编号:7446062 上传时间:2023-01-24 格式:DOCX 页数:12 大小:5.03MB
下载 相关 举报
操作系统课程设计.docx_第1页
第1页 / 共12页
操作系统课程设计.docx_第2页
第2页 / 共12页
操作系统课程设计.docx_第3页
第3页 / 共12页
操作系统课程设计.docx_第4页
第4页 / 共12页
操作系统课程设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

操作系统课程设计.docx

《操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计.docx(12页珍藏版)》请在冰豆网上搜索。

操作系统课程设计.docx

操作系统课程设计

《操作系统原理及应用》课程设计报告

 

银行家算法对死锁的避免

学院(系):

计算机科学与工程学院

班级:

学号

学生姓名:

指导教师:

向南

时间:

从2014年01月06日到2014年01月10日

 

1.课程设计的目的

《操作系统》是一门重要的专业基础课,是涉及较多硬件知识的计算机系统软件课程。

在计算机软硬件课程的设置上,它起着承上启下的作用。

操作系统对计算机系统资源实施管理,是所有其他软件与计算机硬件的唯一接口,所有用户在使用计算机时都要得到操作系统提供的服务。

操作系统课程设计的主要任务是研究计算机操作系统的基本原理和算法,掌握操作系统的进程管理、存储管理、文件管理和设备管理的基本原理与主要算法。

目的是使学生掌握常用操作系统(如DOS、Windows或Linux)的一般管理方法,了解它是如何组织和运作的,对操作系统的核心概念和算法有一个透彻的理解,并对系统运行的机制有一个全面的掌握,从而充分理解系统调用与程序设计之间的关系

2.课程设计的内容及要求

仿真模拟银行家算法对死锁的避免。

对于进程死锁的避免问题,分为两种状态:

安全状态和非安全状态。

在避免死锁的方法中,允许进程动态地申请资源分配之前,应先计算此次资源分配的安全性。

若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,令进程等待。

所谓安全状态是指系统能按某种进程顺序,来为每个进程pi分配所需的资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。

如果系统无法找到这样一个序列,则系统处于不安全状态。

只要系统处于安全状态,系统便可避免进入死锁状态。

因此避免死锁的实质在于:

系统在进行资源分配时,如何使系统不进入不安全状态。

银行家算法就是一种最有代表性的避免死锁的算法。

3.实现原理

我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。

  为保证资金的安全,银行家规定:

  

(1)当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;  

(2)顾客可以分期贷款,但贷款的总数不能超过最大需求量;  (3)当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;  (4)当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金.  操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。

当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。

若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。

4.程序中使用的数据结构及使用的变量说明和作用

程序分为两个模块,其中第一个模块涉及到添加进程、清空进程、设置Allocation、申请资源等等。

第二个模块涉及到将申请资源的结果显示、执行银行家算法。

对于这两个模块的实现主要通过两个类来实现的。

(1)第一个模块是类publicclassMyJlist来实现的,因为用的编程语言是JAVA,所以程序对于各种功能是显示是通过给按钮添加事件监听器来实现的,即add_button.addActionListener(this);//用来实现添加进程

allocation_button.addActionListener(this);

//用来设置对应进程的当前各类资源的占有情况

request_button.addActionListener(this);//用来实现进程对资源的申请

available_button.addActionListener(this);//用来设置当前各类资源的当前的数

clear_button.addActionListener(this);//清空各个进程的记录

example1_button.addActionListener(this);//实例1

example2_button.addActionListener(this);//实例2

check_safe_arry.addActionListener(this);//执行算法,弹出对话框

(2)第二个模块的实现通过一个内部类:

classComputeDialogextendsJDialogimplementsActionListener,与第一模块类似,该模块的功能的实现也是通过按钮添加事件监听器来实现的。

check_safe_button.addActionListener(this);//实现银行算法,查找到安全序列。

查//不到的时候,显示安全序列不存在。

safe_arry.setText("安全序列不存在!

");//安全序列不存在的时候,设置为此文本

对于模块在程序中的作用,第一个模块是主体,第二个模块是在第一个模块的基础上实现的。

5.关键算法实现流程图

1、第一个模块中涉及添加、清空、设置Allocation、设置Available。

(1)主程序初始化。

(2)添加功能

(3)清空功能

 

(4)设置Allocation

 

(5)设置Available。

 

 

(6)设置Request

 

2、第二模块主要是实现银行家算法:

loop控制循环次数,超过指定次数,说明没有安全序列

 

6.结果输出及分析

1.、本程序的运行环境是MyEclipse环境,使用的编程语言是Java语言,操作系统是

WindowsXp操作系统。

2、程序无需安装,只需要安装了MyEclipse即可。

3、程序使用之前,在MyEclipse中建立一个Java工程,在工程中建立一个MyJlist类,将代码粘贴到其中,直接运行即可。

点击编译器中运行按钮,程序中出现如下情况:

(1)程序运行

从截图中可以看出,目前系统的进程数目是0,即没有进程。

当前各个控件的情况是空,

这是一个初始化状态。

当前程序中有三类资源,默认数值为10、5、7

(2)在标签“添加进程:

”所对应的这一列中进行添加进程。

在“进程名:

”右面的编辑框中输入进程的名字,如p1。

在往下,选择每一类资源的该进程所用到的资源的最大数目。

如可以选择进程所需要的三类资源的数目都为5。

这样方便一些。

设置完之后,直接点击下面的按钮“添加”即可。

这样进程p1就直接添加到了系统中。

此时后,“目前系统中的进程数目为:

”后面显示为1。

具体的操作如下图所示:

依照以上的过程,再添加一些进程到系统中。

(3)在标签“Allocation”所对应的这一列中,是用来设置每个进程的当前所占有的资源的数目的。

同样的,在标签“选择进程:

”标签后面的文本框中填写所要设置的进程的名字。

在往下,选择资源的进程的所占有的数量,例如可以设置进程p1当前拥有的三类资源的数目为1,2,3。

过程如下图所示:

同样,根据上述过程,设置其他的进程的数值。

(4)在标签“Request”这一类是用来设置某一个进程是否申请了资源的,进程在执行的过程可以申请资源。

例如进程p1可以申请资源的数目为Request(2,2,2)。

结果如下图所示:

(5)在标签“Available”这一列,设置当前三类资源的剩余数目。

可设置为(2,2,2)

(6)点击“清空”按钮,结果与程序开始运行的结果是一样的。

点击实例1,实例2按钮会出现两个实例。

点击执行算法按钮,会出现如下对话框,接着点击对话框中的“检查安全性”按钮就可求出安全序列。

7.心得体会

通过操作系统的课程设计使我对于操作系统有了一个新的认识和深入的了解学习。

在这之前的所有的操作系统的学习一直是一个比较抽象的概念,一直觉得距离现实很远。

虽然每一天都在用电脑,一直在用操作系统,但是对操作系统的了解很少,对于其内部的运行过程更是无从了解。

学习的过程只是一个抽象的过程,无法将其运用到实践中来。

此次课程设计提供了一个有理论转向实践的过程。

由于这学期也学习了JAVA编程,所以程序是利用JAVA语言编写的。

程序的整个实现过程还是比较简单的,但是对于JAVA语言实现界面的过程是比较困难的。

Java的布局非常难调,但是最终还是搞定了。

对于程序中编写遇到的困难,解决的主要路径是通过网络解决问题。

特别是对于控件的添加及其图形结果的现实,在向容器中添加控件主要用到了一个

类JscrollPane,用控件的对象来初始化该类,再将该类的对象添加到容器中。

程序的主要部分是银行家算法德实现,这个算法的实现还是比较容易的。

银行家算法放在了对话框中实现。

利用几个数组,执行算法后得出的结果在将其转化为字符串。

利用

Jlist的一个方法将结果显示在对话框。

在实现算法的过程中遇到了一些困难,首先就是以前对银行家算法的理解不是多深,一开始程序的编写完全是想当然的实现的,当然产生了错误。

其次就是对Java语言的应用不是很熟练。

为此还专门查找写资料,将以前看的一些Java视频又重新搬出来看了看。

Java编程有了很深的认识。

总之,通过此次课程设计使我对操作系统中的进程执行有了很深的理解,对系统中资源的分配也有了比较好的认识。

银行家算法是避免进程死锁的最好方法,程序对银行家算法的实现主要是将字符串转化为数字存储在三个数组中实现的。

整体来说还是比较容易的,Java是一种网络编程语言,虽然实现界面比较困难。

但是学了就想用一用,所以对与界面的实现还是比较愿意做的。

课程设计使我的学习能力有了很大提高,程序的实现过程中不懂的地可以去问一问同学,使我提高了自己的交际能力。

为了做程序,从新看了操作系统的这部分的知识,对于将来考研还是有很大提高的。

8.参考文献

[1]汤子瀛编著,《计算机操作系统(修订版)》,西安电子科技大学出版社,2001年

[2]张尧学、史美林编著,《计算机操作系统教程》,清华大学出版社,2001年

[3]叶核亚编著,《Java程序设计使用教程(第三版)》,电子工业出版社,2010年

[4]刘长炯编著,《MyEclipse6Java开发中文教程》,西安电子科技大学出版社,2007年

[5]《Java图形设计卷》下载网址:

[6]李竞超编著,《操作系统教材辅导》,科学技术文献出版社,2008年

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1