操作系统课程设计并发进程的模拟_第1页
操作系统课程设计并发进程的模拟_第2页
操作系统课程设计并发进程的模拟_第3页
操作系统课程设计并发进程的模拟_第4页
操作系统课程设计并发进程的模拟_第5页
已阅读5页,还剩14页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、茨寂厚工大摩课程设计说明书题目:并发进程的模拟院 系: 计算机科学与工程专业班级:学 号:学生姓名:指导教师:2014年11月12日安徽理工大学课程设计(论文)成绩评定表安徽理工大学课程设计(论文)任务书计算机科学与工程院系计算机教研室学号学生姓名专业(班级)设计题目并发进程的模拟设计技术参数(1) 系统作业或进程的数目;(2) 通过P, V操作量实现进程同步的目的;(3) 同步信号灯Sb和Sc的值;(4) 进程的先后顺序。设 计 要 求(1) 编程用信号灯的p、v操作实现这三个进程的同步。(2) 任务启动后pa先执行,当它结束后,pb、pcW以开始执行,pb、pc都 执行完毕后,任务终止。(

2、3) 设两个问步信号灯Sb、Sc分别母进程pb和pc能否开始执行,其初值均 为0。工作量要求设计说明书的字数在 3000字以上。工 作 计 划2014.11.21-2014.11.26根据课程设计的要求,查找相关资料,完成需求分析;2014.11.27-2014.12.02进行系统的概要设计;2014.12.03-2014.12.08进行系统的详细设计和源代码的书写;2014.12.08-2014.12.13对系统进行调试分析,写出课程设计报告。参 考 资 料1 龚沛曾等编.Java程序设计教程.北京:高等教育出版社,2004.2 谭浩强编著.Java程序设计(第二版).北京:清华大学出版社,

3、1999.3 庞丽萍等编著.计算机操作系统教程.北京:清华大学出版社,2011.4 汤晓丹等编.操作系统.北京:电子工业出版社,2009.5 刘腾红等编著.操作系统.北京:中国铁道出版社,2008.6 王国辉等编著.Java项目开发.西安:西安电子科技大学出版社,2011指导教师签字教研室主任签字2014年11月21日指导教师评语:成绩:指导教师:年 月 日II目录1问题描述1.2需求分析1.3概要设计2.1. P 操作2.2. V 操作3.3. P, V操作实现进程同步4.4. 功能模块设计 5.4详细设计7.1. 主界面的设计程序 7.2. 进程Pa的执行8.3. 进程Pb的执行9.4.

4、进程Pc的执行9.5. 按钮的执行1.05调试的分析与运行结果 1.16设计体会13参考文献14iii1问题描述在进程并发执行的过程中,进程之间存在协作的关系,例如,有互斥、同步 的关系。该课程设计的是了解进程同步的概念, 理解信号量机制的原理,掌握运 用信号量解决进程并发控制问题的方法,进而学会运用进程的同步,利用信号灯的P, V操作实现三个进程的同步。这三个进程的同步关系如下:PbPc从上图中可以看出:任务启动后 pa先执行,当它结束后,pb、pc可以开始 执行,pb、pc都执行完毕后,任务终土;设两个同步信号灯 sb、sc分别表示 进程pb和pc能否开始执行,其初值均为0。在现代操作系统

5、中,有大量的并发进程在活动,它们都处在不断的申请资源, 使用资源以及其它进程的相互制约的活动中,这些进程什么时候停止运行,什么 时候该继续向前推进,应根据事先的约定来规范它们的行为, 这时我们可以根据 同步信号灯来实现进程的同步协调工作。例如本题中,只有pa进程顺利的进行完,Pb, Pc这两个进程才能正常的进行。如果进程Pa在进行中出现停止或中断, 则Pb和Pc是不会顺利的完成的;而进程 Pb, Pc这两个进程是并行执行的,两 个进程的进行是互不干扰的,只要进程Pa完成后,进程Pb和Pc才会正常执行, 否则只有处在等待就绪中。2需求分析进程执行的并发性的意义是关丁一组进程的执行在是时间上是重叠

6、的,从宏观上看,并发性反应的是一个时间段中几个进程都在同一个处理器上,处丁运行还未运行结束状态。从微观上看,任何一个时刻仅有一个进程在处理器上运行。 并发的实质是一个处理器在几个进程之间的多路复用,并发是对有限的物理资源 强制行驶多用户共享,消除计算机部件之间的乎等现象,以提高系统资源利用率。并发进程分为无关的和交往的,无关的并发进程是一组并发进程分别在不同 的变量集合上操作,一个进程的执行与其他并发进程的进展无关。引入进程是为 了更好的解决实际中存在的竟态问题,进程同步的主要任务是对多个相关的进程 在执行次序上进行协调,以便并发执行的诸进程之间能有效的共享资源和相互合 作,从而使执行更具有可

7、再现性。利用进程同步可以更好地解决生活中有先后执 行顺序的问题,进程的交往包括金正与写作,多个进程之间彼此相关或者是无关, 二资源金正的两个控制问题一个是死锁 (Deadlock)问题,一个是饥饿(Starvation) 问题,系统中既要解决饥饿问题,乂要解决死锁问题。解决进程问的竞争关系(简 介制约关系)的手段是进程互斥,进程互斥指的的就是资源的共享问题,以往内 在同一时刻最多允许一个进程使用,其他进程必须等待,我们这个任务所需要的 就是先执行其中的一个任务,在结束之后进行另外的进程。所以我们解决这个问 题的同时学习并发进程。3概要设计1. P操作对信号灯的P操作记为P(s)。P(s)是一个

8、不可分割的原语操作,即取信号灯 值减一,若相减结果为负,则调用 P(s)的进程被阻,并插入到信号灯的等待队列 中,否则可以继续执行。P操作的主要动作:a) s值减一;b) 若相减结果大丁或等丁 0,则进程继续执行;c) 若相减结果小丁 0,则进程被封锁,并将它插入到该信号灯的等待队列 中,然后转进进程调度程序。P操作的流程图:2. V操作对信号灯的V操作记为V(s)。V(s)一个不可分割的原语操作,即取信号灯值加1,若相加结果大于0,进程继续执行,否则,唤醒在信号灯等待队列上的一个进程。V操作的主要动作a) s值加一;b) 若相减结果大丁 0,则进程继续执行;c) 若相减结果小丁或等丁 0,则

9、从该信号灯的等待队列中移出一个进程,解除 它的等待状态,然后返回本进程继续执行。V操作的流程图:3. P, V操作实现进程同步(1) 编程用信号灯的p、v操作实现这三个进程的同步。任务启动后pa先执行,当它结束后,pb、pc可以开始执行,pb、pc都执行 完毕后,任务终止。(3)设两个同步信号灯sb、sc分别表示进程pb和pc能否开始执行,其初值均为0。 其题目的算法描述如下:14main ()(mt Sb=Oj,表示Pc进程是否开始执行* :im Sc-Oj,表示Pc进程是否开始执行七cobeginPM);PbQjPc0;coendPbOP(皿PcO P(SC)JPa()V(Sb)jV(曲4

10、. 功能模块设计本实验用JAVA语言实现(1) 在Frame工程中新建一个 ThreadProcess类,定义一些静态变量;主函 数main()中定义一个ThreadFrame类,并构造一个对象thFrame,通过调用函数将 界面,窗口展示出来;创建三个线程 threadPa, threadPb, threadPc 。(2) ThreadFrame类继承JFrame类,设置每个界面的长宽,调用类方法 ThreadFrame()显示一些信息。(3) threadPanel类继承JPanel类,调用paintComponent()方法设置进程长 宽以及字体等,还有threadPanel()类方法设

11、置进程前景与背景颜色,从而展示 出进程动态变化,重要一点是开始 Start和暂停Stop按钮设置,控制进程开始 与暂停效果。(4)在类外分别添加三个进程类 threadPa, threadPb, threadPc,都继承线程Thread类,其中各自有的控制函数run()。程序执行能够达到实验的要求效果, 程序运行后,点击Start按钮进程执行,首 先进程Pa先执行,Pa结束后进程Pb和进程Pc启动开始执行,而且能够达到系 统资源共享的效果,最后所有结束后告知程序结束。如果一开始点击Stop按钮, 那么进程没响应,等待点击 Start按钮,这是并发进程的模拟过程并发进程的模拟中定义四个模块,实现

12、界面进程运行过程。程序执行能够达 到实验的要求效果,程序运行后,点击 Start按钮进程执行,首先进程Pa先执 行,Pa结束后进程Pb和进程Pc启动开始执行,而且能够达到系统资源共享的 效果,最后所有结束后告知程序结束。并发进程的模拟功能模块流程图如图5所示。4详细设计1. 主界面的设计程序class ThreadFrame extends JFrame (public int WIDTH = 820;public int HEIGHT = 500;public threadPanel threadPanel = new threadPanel();public Container conta

13、iner;public ThreadFrame() (this.setTitle("模拟进程并发的过程图");this.setSize(WIDTH, HEIGHT);this.setLocation(250, 150);this.setResizable(false);container = getContentPane();container.add(threadPanel);setVisible(true);2. 进程Pa的执行class threadPa extends Thread public static boolean flag = true;/ JProgr

14、essBar progressBar;private static int i = 0;/* public threadPa(JProgressBar progressBar) ThreadPgressBar1 =* progressBar; */Overridepublic void run() ThreadProcess.sb-;ThreadProcess.sc-;while (i <= 100) i += 1;ThreadPgressBar1.setValue(i);/System.out.println(i);try Thread.slee

15、p(30);/ threadPerrupted(); catch (InterruptedException e) e.printStackTrace();ThreadProcess.sb+;ThreadProcess.sc+;if (ThreadProcess.sb >= 0 && ThreadProcess.sc >= 0 ) ThreadProcess.threadPb.start();ThreadProcess.threadPc.start();/System.out.println(ThreadPgressBar1.getVa

16、lue();/System.out.println(ThreadProcess.sb);3. 进程Pb的执行class threadPb extends Thread (public static boolean flag = true;/ JProgressBar progressBar;private static int i = 0;/* public threadPb(JProgressBar progressBar) ( gressBar =* progressBar; */Overridepublic void run() (while (i <= 100)

17、i += 1;ThreadPgressBar2.setValue(i);try Thread.currentThread().sleep(30); catch (InterruptedException e) e.printStackTrace();4. 进程Pc的执行class threadPc extends Thread public static boolean flag = true;/ JProgressBar progressBar;private static int i = 0;/* public threadPc(JProgressBar progres

18、sBar) gressBar =* progressBar; */Overridepublic void run() while (i <= 100) i += 1;ThreadPgressBar3.setValue(i);try Thread.currentThread().sleep(30); catch (InterruptedException e) e.printStackTrace();5. 按钮的执行public threadPanel() (setLayout(null);/设置边框按钮的起始左上点的坐标setSize(800, 400

19、);ThreadPgressBar1 = new JProgressBar();ThreadPgressBar2 = new JProgressBar();ThreadPgressBar3 = new JProgressBar();/设置start与stop按钮buttonstart1 = new JButton("Start");buttonstop1 = new JButton("Stop");ThreadPgressBar1.setBackground(new Colo

20、r(255, 50, 255);ThreadPgressBar1.setForeground(new Color(10, 90, 90);ThreadPgressBar1.setBounds(100, 70, 480, 40);buttonstart1.setBounds(600, 10, 80, 40);buttonstop1.setBounds(700, 10, 80, 40);add(ThreadPgressBar1);add(buttonstart1);add(buttonstop1);buttonstart1.addActi

21、onListener(new ActionListener() (Overridepublic void actionPerformed(ActionEvent arg0) (/ ThreadProcess.pa();ThreadProcess.threadPa.start();/*try (ThreadProcess.threadPa.join(); catch (InterruptedException e) (/ TODO Auto-generated catch blocke.printStackTrace();*/System.out.println(ThreadProcess.sb

22、+"kl");/*boolean t1=ThreadProcess.threadPa.isAlive();int t2=ThreadProcess.sb;int t3=ThreadProcess.sc;int t4=ThreadPgressBar1.getValue();*/*System.out.println(t1);System.out.println(t2);System.out.println(t3);*/System.out.println(ThreadProcess.temp);/if(!ThreadProcess.threadPa.isA

23、live();/ threadPa.flag = true;);buttonstop1.addActionListener(new ActionListener() (Overridepublic void actionPerformed(ActionEvent arg0) ( threadPa.flag = false;);ThreadPgressBar2.setBackground(new Color(255, 90, 100);ThreadPgressBar2.setForeground(new Color(90, 50, 90);ThreadPr

24、gressBar2.setBounds(100, 190, 480, 40);add(ThreadPgressBar2);ThreadPgressBar3.setBackground(new Color(100, 100, 255);ThreadPgressBar3.setForeground(new Color(100, 90, 90);ThreadPgressBar3.setBounds(100, 300, 480, 40);add(ThreadPgressBar3);5调试的分析与运行结果1.初次运行程序界面运行并发进程模拟程序出现初次界面,如图6所示。图6并发进程模拟初次界面2.进程Pa运行点击Start按钮,程序执行进程Pa,而进程Pb和Pc等待,如图7所示图6 Pa执行过程3. 进程Pb和Pc运行当进程Pa执行完毕,进程Pb和Pc开始执行,如图8所示图8 Pa完毕后Pb和Pc执行界面4. 并发进程的模拟程序结束Pb和Pc执行完毕,并发进程模拟程序结束,如图 9所示。图9并发进程模拟结束6设计体会通过本次试验,更加深入的了解了平时上课所学的知识, 在平时学习中没有认真学习,在实际中就反应了出来,所以我这次试验,可以

温馨提示

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

评论

0/150

提交评论