操作系统原理课程设计

更新时间:2023-08-24 04:50:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

经常论文资料 免费奉献

操作系统原理课程设计

题 目: 姓 名: 学 院: 专 业: 班 级: 学 号: 指导教师:

“哲学家就餐问题”模拟系统

尹岩,刘宇凡,丁磊

信息科技学院 计算机科学技术系

计科61

1926103、1926110、1926101 姜海燕 职称: 副教授 2009 年3月 12 日

提优论文

经常论文资料 免费奉献

“哲学家就餐问题”模拟系统

计科61 丁磊,尹岩,刘宇凡

指导教师:姜海燕

摘要:

现代操作系统引入并发程序设计技术之后,程序的执行不再是顺序的。在多个进程并发运行的过程中,进程之间可能产生相互制约的关系,即竞争和协作。而如果一个进程集合中的每个进程都在等待只能由此集合中的其他进程才能引发的事件,就会出现死锁。操作系统中经典的5位哲学家吃面问题正反映了进程并发执行这一情况。在问题中,哲学家思考就餐等待的过程正体现了进程在并发执行中对临界资源的互斥访问,同时也因此可能出现死锁现象。本课程设计所完成的正是对“哲学家就餐问题”的模拟。此系统根据操作系统中并发进程、临界区、同步等基本概念及理论进行设计,用C#语言实现,在模拟实现“哲学家就餐问题”的基础上还提供了解决死锁的三种基本方法。本系统较好的模拟了“哲学家就餐问题”,对于进程互斥、临界区、死锁等问题的深入理解有重要意义。

关键字:操作系统 哲学家就餐问题 模拟 c#

The Simulation System of The Philosophers Eating Problem

Yin Yan Liu Yufan Ding Lei

Abstract: Programs have executed with not orders since concurrent programming was used in OS. Concurrent processes should have two relationships during a program is running: competing and cooperation. If each process is waiting for a event which must be called by other processes, then deadlock appears. The Five Philosophers Eating Problem conducts the concurrent conditions. Philosophers refer to the processes and chopsticks refer to the critical resources. This course emulates the problem. There is the conception of synchronism, concurrent processes and critical region in this system. At the same time, we provide three methods to prevent deadlock. Our program is accomplished with C#. Our course helps us to improve the apprehension of critical region, deadlock and other problems in OS.

一、 研究目的与意义:

本课程设计通过模拟计算机操作系统中经典的“哲学家就餐问题”,巩固在操作系统原理课上所学的知识,加深对操作系统中进程互斥、临界区、死锁等问题的认识和理解,同时又了解了软件生成的流程、方法以及思想,提高了分析设计以及编程的能力,最后将此作品用于课堂理论教学的演示之用,增强课堂教学的趣味性。

二、 理论分析:

现代操作系统引入并发程序设计技术之后,程序的执行不再是顺序的,一个程序为执行完而另一个程序就已经开始执行,程序外部的顺序特性消失,程序与计算不再一一对应。于是人们引入进程来描述这种变化。

一组进程在执行时间上是重叠的,进程即并发执行。在多个进程并发运行的过程中,进程之间可能是无关的,也可能是交互的。交互进程之间可能产生的关系,包括竞争和协作。

经常论文资料 免费奉献

并发进程中与共享变量有关的程序段成为临界区,共享变量所代表的资源成为临界资源。

有多种方法可以实现对临界区、临界资源的管理。其中最基本的方法是设置相应的信号量和P、V操作。

在并发进程执行的过程中,对共享资源的竞争可能产生死锁问题,既一个进程集合中的每个进程都在等待只能由此集合中的其他进程才能引发的事件,而无限期陷入僵持的局面。

解决死锁问题的方法包括:通过指定资源申请占有及释放的策略来彻底防止死锁的发生;根据特殊算法决定资源分配和去配策略,避免死锁的发生;对死锁情况进行检测并解除。

综上,本模拟程序应当模拟进程的并发执行,对临界资源的互斥访问和死锁情况的发生和防止。

三、 核心技术:

本模拟程序的核心技术是模拟进程的并发执行和对临界资源的互斥访问。 模拟程序的编写过程所使用的技术路线为:

由于算法简单,不定义独立的P、V操作,而是将之融入对资源的申请及释放操作之中。对于进程的模拟对象即“哲学家”只定义必要的状态包括“思考”(不申请资源的状态)、“等待”(申请资源但无法获得全部资源的等待状态)和“吃面”(获得所申请的所有资源的运行状态)以及占有资源的数量。而对于资源即“筷子”,除了确定资源是否被利用的状态之外定义了资源是否有其他的申请者这一状态值。所有状态值都是用枚举表示。

防止死锁产生的策略采用方法为:如果不能申请并占有到两支“筷子”(所有的资源),那么就不占有任何一支。这个方法实际上是破坏了产生死锁的第二个条件即“占有和等待条件”。

对于Windows界面应用程序中的绘图(及重绘),采用了根据“哲学家”和“筷子”的状态信息进行操作的方法。

四、

功能设计及结构设计:

1) 功能设计:

在这个模拟程序中,使用者需要的功能非常简单:根据使用者控制“哲学家拿筷子”和“哲学家放下筷子”这两个动作,实现五位“哲学家”和五支“筷子”状态的变化。同时,使用者可以选择改变资源分配策略,防止死锁或不防止死锁。最后,使用者还可以退出程序或重置“哲学家”及“筷子”的状态。 下图为模拟系统(程序)的用例图:

经常论文资料 免费奉献

2) 结构设计:

A. 基本数据结构、枚举类型及类的定义: 哲学家结构体以及筷子结构体。

public struct Phi//哲学家:状态和持有资源状态 {

status Phi_status;//哲学家所处的状态 R_status Phi_resource;//拥有筷子的数量

public status Phi_Status//取得或设置对应属性值的方法 { get {

return Phi_status; } set {

Phi_status = value; } }

public R_status Phi_Resource { get {

return Phi_resource;

经常论文资料 免费奉献

} set {

Phi_resource = value; } } }

public struct KuaiZi//筷子 {

K_status exist;//存在状态 K_status ordered;//预约状态

public K_status Exist { get {

return exist; } set {

exist = value; } }

public K_status Ordered { get {

return ordered; } set {

ordered = value; } }

}

相关枚举类型。

/*枚举类型定义*/

public enum status//哲学家所处的状态 {

Thinking=1, Eatting=2,

经常论文资料 免费奉献

Waiting=3 }

public enum R_status//哲学家又有筷子的数量 {

None=0, One=1, Two=2 }

public enum K_status//筷子的预约/存在状态 {

Yes=1, No=0 }

public enum W_status//工作方式选择状态,这个数字排列不太整齐 {

SS = 1, USS01 = 0, USS02=2, USS03=3 }

哲学家类定义(核心程序)。

/*哲学家类定义*/ class PHI//哲学家类 {

private static KuaiZi[] Resource =new KuaiZi[5];//资源数组 private static Phi[] Phis=new Phi[5];//哲学家

int Max;//第三种不允许死锁方法所用的计数器

public static void FirstMenu() {

//显示菜单函数。用于核心程序。 }

public PHI() {

//构造函数。 }

public void Init()

{

//初始化函数。和构造函数是一样的。 }

// 调度方法一:

经常论文资料 免费奉献

public void a_Process(int input) {

//过程函数。根据输入的数字进行操作。允许死锁。 }

//调度方法二:

public void b_Process(int input) {

//过程函数。“如果不能得到所有资源就不占有任何资源”的分配方法。不允许死锁。 }

//调度方法三:

public void c_Process(int input) {

//过程函数。“偶数号先取左筷子,奇数号先取右筷子”的分配方法。 // 调度方法四:

public void d_Process(int input)

{

//过程函数。“最多只有4个人申请吃面”的分配方法。 }

public bool Print() {

//显示函数。用于核心程序。 }

static void Main(string[] args) {

//主函数。

}

}

之后对核心程序进行修改,完成了用户界面程序。主要添加了以下方法:

protected override void OnPaint(PaintEventArgs e) //重载的OnPaint方法,用于绘图 private void NumberCheck(object sender, KeyEventArgs e)//相应键盘事件的函数。 private void DoWorkPaint(object sender, DoWorkEventArgs e) //backgroundworker的工作函数。负责提供重绘事件。 private void SS(object sender, EventArgs e) private void USS01(object sender, EventArgs e) private void USS02(object sender, EventArgs e) private void USS03(object sender, EventArgs e) //对于改变判断方式的事件响应方法。

最后为了方便图片信息的载入,定义了一个相关的索引器。

经常论文资料 免费奉献

/*声明索引器的类*/ public class ImageIndex {

public Image[] picture = new Image[5];

public Image this[int index]//要使用this关键字 {

get { return picture[index]; } set { picture[index] = value; } } }

B. 相关算法设计:

由于算法相对简单,所以这里只给出流程图。

经常论文资料 免费奉献

申请资源(处在“思考”或“等待”状态)

是否标号超出范围或已拥有两个资源

是无意义操作

未拥有资源进程拥有资源的情况

已拥有一个资源

左边是否有空闲资源是否

右边是否有空闲资源是否

分配资源并修改进程和资源的状态

把哲学家设成“等待”状态,并设置资源“预约”

分配资源并修改进程和资源的状态,并把哲学家设成“进食”状态

结束操作

经常论文资料 免费奉献

释放资源(处于“进食”状态)

是否标号超出范围

是无意义操作

进程已占有资源的状态

右边是否处于“等待”

右边是否处于“等待”是

否否释放资源,并把哲学家设成“进食”状态

释放资源并修改等待进程拥有资源量和资源的预约状态

释放资源。设置资源状态为“未预约”。

释放资源并把哲学家设成“思考”状态

结束操作

经常论文资料 免费奉献

C. 程序执行流程:

对于核心程序和用户界面程序,程序执行的流程基本相同,只是核心程序为命令行显示,而用户界面程序为图形动画演示。

D. 用户界面设计及操作方法的指定:

请参考附件中的使用说明。

五、 调试分析:

1) 编程平台使用:Microsoft Visual Studio 2008

环境为:Microsoft .NET Framework 3.5

2) 调试未出现问题。这里附上Windows用户界面程序调试截图:

经常论文资料 免费奉献

(此为进入程序后的初始界面)

(死锁情况发生)

(哲学家状态的变化)

(工作方式设置按钮(菜单))

六、 结语:

由于时间紧促以及个人能力的不足,模拟系统在功能上尚存在一些问题,在很多方面都有改进的空间。主要表现在:程序健壮性不强,对于不少异常情况缺乏对应的解决手段; 图形重绘过程过于简单,算法效率低下,直接导致程序运行所占资源较多;没有使用专用的软件,程序的结构框架设计较为粗糙。不过总的来说,本模拟系统还是较好的实现了它应有的

经常论文资料 免费奉献

功能。

参考文献:

【1】汤子瀛等 计算机操作系统【m】.修订版.西安:西安电子科技大学出版社,2001:8. 【2】Bill Evjen (美)等著 李铭 译 黄静 校 c#高级编程(第六版).北京:清华大学出版社,2008:10.

【3】何炎祥 计算机操作系统【m】. 北京:清华大学出版社,2004:1. 【4】黄干平,陈洛资等. 计算机操作系统【m】. 北京:科学出版社,1989. 【5】黄祥喜 计算机操作系统实验教程【m】. 广州:中山大学出版社,1994. 【6】冯耀霖,杜瞬国. 操作系统【m】. 西安:西安电子科技大学出版社,1992.

本文来源:https://www.bwwdw.com/article/lpki.html

Top