ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:142.22KB ,
资源ID:3017649      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3017649.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(进程同步与互斥哲学家进餐问题.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

进程同步与互斥哲学家进餐问题.docx

1、进程同步与互斥哲学家进餐问题 网络教育学院操作系统课 程 设 计 题 目: 进程同步与互斥 哲学家进餐问题 学习中心:层 次: 专 业: 年 级: 年 秋 季 学 号: 学 生: 辅导教师: 完成日期: 1题目要求与开发环境1.1 题目目的与要求题目的目的:通过实现哲学家进餐问题的同步深入了解和掌握进程同步和互斥的原理。题目要求:简单描述哲学家进餐问题。可设计五个哲学家,每人都需要一双筷子。哲学家有两种活动:吃饭和思考,需要成功设计让每个哲学家能够顺利吃饭。1.2 题目开发环境系统平台:Windows 7 旗舰版实现语言:C#开发工具:Microsoft Visual Studio 20101

2、.3开发原型图1.4设计界面截图只是为了体现算法,关键我不会美工,所以界面比较简单2. 总体设计思想以及相关知识2.1总体设计思想哲学家的生活就是思考和吃饭,即思考,饿了就吃,吃饱了再思考,循环往复。要求是:每一个哲学家只有在拿到位于他左右两侧的筷子后,才能够就餐;哲学家不能拿着一只筷子不放手,也不能从其他哲学家手中抢夺筷子;哲学家每次吃饱后必须放下他手中的两只筷子恢复思考,不能强抓住筷子不放。设计一个程序,能够显示当前各哲学家的状态和桌上筷子的使用情况,并能无死锁的推算出下一状态各哲学家的状态和桌上筷子的使用情况。即设计一个能安排哲学家正常生活的程序。开始本来是准备用C+设计的,但是最近开始

3、自学C#,发现微软封装了很多基类,调用十分方便。可以很简单的设计出程序,正好练习一下,所以就用C#设计程序了,同时在XX查找了很多资料。2.2 本程序涉及到的概念2.2.1简介 进程同步是一个操作系统级别的概念,是在多道程序的环境下,存在着不同的制约关系,为了协调这种互相制约的关系,实现资源共享和进程协作,从而避免进程之间的冲突,引入了进程同步。2.2.2临界资源 在操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源)。但对于某些资源来说,其在同一时间只能被一个进程所占用。这些一次只能被一个进程所占用的资源就是所谓的临界资源。

4、典型的临界资源比如物理上的打印机,或是存在硬盘或内存中被多个进程所共享的一些变量和数据等(如果这类资源不被看成临界资源加以保护,那么很有可能造成丢数据的问题)。 对于临界资源的访问,必须是互诉进行。也就是当临界资源被占用时,另一个申请临界资源的进程会被阻塞,直到其所申请的临界资源被释放。而进程内访问临界资源的代码被成为临界区。 对于临界区的访问过程分为四个部分: 1.进入区:查看临界区是否可访问,如果可以访问,则转到步骤二,否则进程会被阻塞 2.临界区:在临界区做操作 3.退出区:清除临界区被占用的标志 4.剩余区:进程与临界区不相关部分的代码2.2.3进程同步进程同步也是进程之间直接的制约关

5、系,是为完成某种任务而建立的两个或多个线程,这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系来源于他们之间的合作。比如说进程A需要从缓冲区读取进程B产生的信息,当缓冲区为空时,进程B因为读取不到信息而被阻塞。而当进程A产生信息放入缓冲区时,进程B才会被唤醒。概念如下图所示。2.2.4进程互斥进程互斥是进程之间的间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待。只有当使用临界资源的进程退出临界区后,这个进程才会解除阻塞状态。 比如进程B需要访问打印机,但此时进程A占有了打印机,进程B会被阻塞,直到进程A释放了打印机资源,进程B才

6、可以继续执行。概念如下图所示。2.2.5实现临界区互斥的基本方法硬件实现方法 通过硬件实现临界区最简单的办法就是关CPU的中断。从计算机原理我们知道,CPU进行进程切换是需要通过中断来进行。如果屏蔽了中断那么就可以保证当前进程顺利的将临界区代码执行完,从而实现了互斥。这个办法的步骤就是:屏蔽中断-执行临界区-开中断。但这样做并不好,这大大限制了处理器交替执行任务的能力。并且将关中断的权限交给用户代码,那么如果用户代码屏蔽了中断后不再开,那系统岂不是跪了? 还有硬件的指令实现方式,这个方式和接下来要说的信号量方式如出一辙。但是通过硬件来实现,这里就不细说了。信号量实现方式 这也是我们比较熟悉P

7、V操作。通过设置一个表示资源个数的信号量S,通过对信号量S的P和V操作来实现进程的的互斥。 P和V操作分别来自荷兰语Passeren和Vrijgeven,分别表示占有和释放。P V操作是操作系统的原语,意味着具有原子性。 P操作首先减少信号量,表示有一个进程将占用或等待资源,然后检测S是否小于0,如果小于0则阻塞,如果大于0则占有资源进行执行。 V操作是和P操作相反的操作,首先增加信号量,表示占用或等待资源的进程减少了1个。然后检测S是否小于0,如果小于0则唤醒等待使用S资源的其它进程。本程序就是用信号量进行实现的。3流程和效果图3.1程序流程图及简介单击“开始进餐”按钮首先初始化哲学家和筷子

8、对象,然后声明五个进程。进程逐一开始后判断当前哲学家两侧的筷子是否无人使用,如果无人使用则当前哲学家开始进餐,并改变程序界面哲学家标签的文字为“哲学家i开始进餐”,同时更改哲学家两侧筷子标签为“哲学家i拿起筷子”,哲学家文字后面的变量i为当前哲学家编号。为了防止长时间谁也拿不到筷子,暂停进程1.5秒。1.5秒后当前哲学家停止进餐开始思考,并释放两侧筷子的资源,更改哲学家标签为“哲学家i在思考”,更改哲学家两侧筷子标签为“无人使用的筷子”。I为哲学家编号变量。当一个哲学家完成吃饭、思考的过程后,重新进去排队,等待两侧的筷子资源被别的哲学家释放,进入下一个循环。如下图所示:3.2流程图各阶段程序界

9、面的变化程序设计界面开始运行程序,并初始化哲学家和筷子对象状态单击开始进餐按钮以后判断哲学家两侧的筷子为无人使用状态时,哲学家开始进餐,并改变标签文字哲学家进餐后进入思考状态,并释放两侧的筷子4程序源代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Threading;namespace PhEatin

10、g / / 进程同步与互斥 哲学家进餐问题 / public partial class MainForm : Form private Mutex m_chopsticksMux; /筷子对象 private Thread m_thread; private Label m_phInfo; /哲学家标签 private Label m_chopInfo; /筷子标签 private SynchronizationContext m_context; private bool m_isRunning = true; / / 哲学家对象 / public class Philospher /哲学

11、家名字 public String m_name; /哲学家拿到手里的筷子 public ChopStick m_left; public ChopStick m_right; /哲学家编号 public int m_index; /释放双手的筷子 public void Release() m_left.Release(); m_right.Release(); / / 筷子对象 / public class ChopStick public Mutex m_mutex; public int m_number; public void Release() m_mutex.ReleaseMu

12、tex(); public MainForm() InitializeComponent(); m_context = SynchronizationContext.Current; m_phInfo = new Label5; m_phInfo0 = label1; m_phInfo1 = label2; m_phInfo2 = label3; m_phInfo3 = label4; m_phInfo4 = label5; /初始化哲学家状态为思考 for (int i = 0; i 5;i+ ) m_phInfoi.Text =哲学家+(i+1)+ : 在思考; m_phInfoi.Bac

13、kColor = Color.Gray; m_chopInfo = new Label5; m_chopInfo0 = label6; m_chopInfo1 = label7; m_chopInfo2 = label8; m_chopInfo3 = label9; m_chopInfo4 = label10; /初始化筷子状态为无人使用 for (int i = 0; i 5; i+) m_chopInfoi.Text = 无人使用的筷子; /单击开始进餐按钮 private void button1_Click(object sender, EventArgs e) m_chopstick

14、sMux = new Mutex5; m_thread = new Thread5; for(int i=0;i5;i+) m_chopsticksMuxi=new Mutex(true,筷子+i.ToString(); ParameterizedThreadStart pts; for (int i = 0; i 5; i+) pts = new ParameterizedThreadStart(Eating); m_threadi = new Thread(pts); Philospher ph = new Philospher(); ph.m_name = 哲学家1; ph.m_index = 0; ChopStick csl = new ChopStick(); csl.m_number = 4; csl.m_mutex = m_chopsticksMux4; ph.m_left = csl; ChopStick csr = new ChopStick(); csr.m_number =

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

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