《生产者消费者问题操作系统课程设计思路.pptx》由会员分享,可在线阅读,更多相关《生产者消费者问题操作系统课程设计思路.pptx(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、工作总结工作总结 存在问题存在问题改进及讨论改进及讨论 系统演示系统演示 8567目录二目录二第1页/共17页目的及方法 本课程设计通过模拟计算机操作系统中经典的“生产者消费者问题”,巩固在操作系统原理课上所学的知识,加深对操作系统中进程同步和互斥、临界区管理等问题认识和理解,同时又了解了软件设计的流程、方法以及思想,提高分析设计以及编程的能力。第2页/共17页技术路线技术路线生产者生产者消费者消费者多生产者多消费者多生产者多消费者同步同步互斥互斥并发并发可视化可视化P()()/V()()多线程多线程Java Swing和和awtThreadJava中的中的wait()和和notify()管程
2、实现管程实现第3页/共17页核心技术(1)public class Semaphore/信号量(即P V操作的类)private int Value;/信号量值public Semaphore(int semValue)this.Value=semValue;PS:用:用Java中的中的wait()和和notify()模拟模拟操作系统的操作系统的P/V操作操作public synchronized void p(String s)/P操作(即申请资源)操作(即申请资源)Value-;if(Value0)/没有可用资源没有可用资源trySystem.out.print(+s+进入阻塞队列进入阻塞
3、队列n);frame.a1.append(+s+进入阻塞队列进入阻塞队列n);this.wait();/因资源不足而阻塞自己因资源不足而阻塞自己/System.out.print(+this.toString()+is waittingn);/*catch(InterruptedException e)类类Semaphore的定义定义和重要方法方法方法模拟操作系统的模拟操作系统的P操作操作public synchronized void v(String ss)/V操作操作Value+;if(Value0)/判断有否发出signal操作的线程 next.v(s1+释放一个因发出signal操作
4、而阻塞自己的线程n);/若有就释放一个/frame.a1.append(释放一个因发出signal操作而阻塞自己的线程n);else mutex.v(s1+离开管程n+开放管程);/否则开放管程 /frame.a1.append(线程即将要离开管程,在离开之前开放管程n);/System.out.print(n离开管程n);第6页/共17页核心技术(2)续核心函数public void Wait(Semaphore x_sem,Count x_count,String s1)x_count.Cvalue+;/等待资源的线程数加等待资源的线程数加1,初始值为,初始值为0System.out.pr
5、int(Waitn);frame.a1.append(s1+执行执行Wait操作操作 因资源不可用而该线程因资源不可用而该线程 即将即将 阻塞自己!阻塞自己!(缓冲区已满或者已为空)(缓冲区已满或者已为空)n在阻塞自己之前,先判断是否有发出在阻塞自己之前,先判断是否有发出signal操作的线程。若操作的线程。若有,则释放之。否则准备开放管程。之后便阻塞自己有,则释放之。否则准备开放管程。之后便阻塞自己 n);if(next_count0)/判断是否有发出判断是否有发出signal操作的线程。因为发出此操作的线程会阻塞自己。操作的线程。因为发出此操作的线程会阻塞自己。next.v(释放一个因发出
6、释放一个因发出signal操作,唤醒了其他线程而阻塞自己的线程操作,唤醒了其他线程而阻塞自己的线程 现在现在n);/若若有就释放一个有就释放一个System.out.print(释放一个发出释放一个发出signal操作的线程操作的线程n);elsemutex.v(没有因发出没有因发出signal操作而阻塞自己的线程,也没有当前线程的可用资源操作而阻塞自己的线程,也没有当前线程的可用资源 在阻在阻塞当前线程之前先开放管程,让其他线程有机会获得管程塞当前线程之前先开放管程,让其他线程有机会获得管程n);/否则开放管程否则开放管程System.out.print(开放管程开放管程n);x_sem.p
7、(s1+线程因没有可用资源(即缓冲区)而线程因没有可用资源(即缓冲区)而);/等待资源的线程阻塞自己,等待资源的线程阻塞自己,X_sem初始化为初始化为0 x_count.Cvalue-;/等待资源的线程数减等待资源的线程数减1第7页/共17页核心技术(2)续核心函数public void Signal(Semaphore x_sem,Count x_count,String s2)frame.a1.append(s2+执行Signal操作 若当前有等待资源的线程则唤醒该线程并阻塞自己。否则唤醒信号丢失n );if(x_count.Cvalue0)/判断是否有等待资源的线程 System.ou
8、t.print(Signaln);next_count+;/发出signal操作的线程数加1 x_sem.v(“资源可用,唤醒等待资源的线程!(缓冲 区不满或者不空)现在n);/释放一个等待资源的线程next.p(s2+线程因发出Signal操作阻塞自己,等待已唤醒的线程退出管程或其他 事件 n);/发出signal操作的线程阻塞自己,一旦阻塞,以下的next_count-;将不会执行,等待被其他管程内部事件的唤醒。next_count-;/发出signal操作的线程数减1 第8页/共17页核心技术图示核心技术图示入口出口等待进入管程的队列生产者阻塞队列消费者阻塞队列enterwaitsign
9、alleave资源可用具体操作发出signal而阻塞自己的队列YN开关管程唤醒唤醒阻塞阻塞阻塞第9页/共17页测试情况及分析测试情况及分析 第10页/共17页工作总结工作总结寒假期间:小组成员共同选定课题项目,商讨开发语言,确定基本的技术路线,由组长完成程序框架及基本结构和类的设计。2月20日2月27:完成了核心程序并进行基本测试,编写出各类中的方法代码。完成方案幻灯片的制作。2月28日3月4日:完善核心程序。完成用户界面程序的编写。3月6日3月7日:完成将各模块函数的组合,成功将核心程序与界面融合。完成算法汇报PPTPPT3月8日:根据老师的要求改用管程实现,完善整体程序。3月9日现在:完成
10、总结汇报PPTPPT,进行进程跟踪测试分析。开始进行设计报告和提优论文的撰写。第11页/共17页存在的问题存在的问题(1 1)对于进程的追踪和管理尚不到位(2 2)(1 1)对软件开发流程还不熟悉(2 2)从理论到实践还有一定程度的困难第12页/共17页改进及讨论改进及讨论(1 1)因为应用JavaJava封装好的方法来阻塞和唤醒进程,不知道其具体实现的方式和管理方式,已经自定义了一个PCBPCB类尝试跟踪进程,取得一定的效果,但还未完全实现对其管理与控制。(2 2)在课程设计中发现了自身的不足,经过此锻炼,我们逐步熟悉了软件开发流程,也初步学会如何把理论知识转为实际应用。第13页/共17页系统演示系统演示开始界面:开始界面:可设置生产者数目,消费者数目以及缓冲区大小,单击确定即可第14页/共17页系统演示系统演示主界面:主界面:可按需要可按需要调节生产调节生产者和消费者和消费者的速度,者的速度,如需统计如需统计请单击分请单击分析按钮析按钮第15页/共17页系统演示系统演示分析界面:分析界面:可以得到统计数据也可从滚动面板中看出各线程的状态第16页/共17页感谢您的观看!第17页/共17页