操作系统课程设计生产者消费者
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统课程设计报告
题目:生产这消费者问题
班级:
小组成员:
2010年1月8日-2010年1月12日
一:概述
1.1 基本功能:
演示生产者消费者程序,多线程并发执行的过程;可以控制生产者消费者的个数及生产者生产的速度和消费者的速度,进度条中显示Buffer 中数据的个数,有五个按钮,分别为:开始、继续,暂停、结束、退出,点击开始按钮,程序开始执行,点击暂停按钮,所有线程暂停执行,点击继续按钮,线程继续执行,结束按钮使得所有线程结束执行,点击退出按钮,退出系统,统计按钮按下时显示此时的Buffer1,buffer2的生产者生产的次数和Buffer3的消费者消费的次数,及Move的次数,和开始时间及结束时间。
1.2开发计划:
第一天:完成整体的规划工作,设计几个类,各个类有什么方法,能完成什么工作,如何设计构造方法
第二天:完成操作界面的设计与编码,设计一个美观,易于操作的界面
第三天:完成并发设计内核的结构与实现工作
第四天:把内核与界面整合在一起,用事件把按钮实现的功能和文本框显示的文字与内核结合起来,基本完成程序设计工作
第五天:完成代码的优化工作,添加一些功能,及完成实验报告。
1.3 人员分工
蔡春龙负责整体的规划,褚江负责主界面的规划,具体的实现由两人共同完成。
1.4 开发环境工具和方法:
开发环境Windows XP操作系统:JDK1.6 JCreater
开发工具:Java
开发方法:小组共同开发
二:需求分析
用户需要看到看到并发程序的运行过程,以及能对过程进行控制,
可以设计几个按钮控制开始,暂停、结束等功能,并可以让用户自定义生产者消费者数量及生产者消费者线程并发执行的速度,并能以用户能够明白的形式表示出来,可以设计一个进度条显示各个Buffer中的物品数量,并用数字显示出来,看的就清楚了,设置一个统计按钮,当用户点击按钮时,就可以获取当前各个线程的情况,有几个线程在执行,Buffer1的线程个数,Buffer2的线程个数,Buffer3的线程个数及从开始到结束所用的时间,从而了解线程运行的情况。
三:软件设计
设计了6个类,分别为:信号量类Semaphore、生产者类Producer、消费者类Consumer、缓冲池类Buffer、转移类Mover、主界面类MainFrame,下面详细介绍各个类的功能。
信号量类Semaphore:
信号量类Semaphore把操作系统课本上的P、V操作用Java实现了,使得在别的类中就可以直接使用P、V操作来实现,就大大降低了编写代码的难度。
生产者类Producer有六个成员变量mutex ,full,empty; buf; name;frame;timesOfProducer;信号量mutex实现互斥功能,使得各个线程互斥的进入临界区,buf表示的生产者是哪个缓冲池的生产者(Buffer1还是Buffer2),empty表示缓冲池可用的空间大小,full表示缓冲池中数据的个数,name即为该线程的名字,frame是MainFrame类型的对象,在后面会用到,timeOfProducer表示生产者生产的次数,初值设为0,每执行一次生产,timeOfProducer自动加1,就完成了计数功能。
消费者Consumer类类似生产者类,成员变量不同的是timesOfConsumer,记录生产者生产的次数,实现与生产者的timeOfProducer 类似,都是没执行依次消费,timeOfProducer自动加1;
Buffer类可以存放生产者生产的物品,有三个参数number; size ;value;,number标识是Buffer1、Buffer2还是Buffer3,size标识Buffer的最大容量,在此设为10;value标识Buffer某时中的物品数量。
Mover 类实现吧Buffer1或Buffer2中的数据转入Buffer3,当Buffer1或Buffer2不为空时,就把它们中的数据转移到Buffer3中,并设置Buffer3的empty-1,full+1;
主类MainFrame做了一个界面,主函数Main也包含在这个类中,界面左边可以设置Buffer1,Buffer2,的生产者个数,Buffer3 的消费者个数,以及Buffer1,Buffer2,Buffer3的生产者消费者速度,中间的文本域显示的是各线程并发执行的信息,下方是控制按钮,可以控制开始,结束,暂停,继续,退出,统计信息,右方设计的是进度条显示的Buffer,Buffer2、Buffer3中物品的个数,用图形化的方式显示出来,看的更清晰。
四:.编码设计
信号量类:
public class Semaphore {
private int semV alue;
public Semaphore(int semV alue){
this.semV alue=semV alue;
}
public synchronized void p(){ //实现P操作
semV alue--;
if(semV alue<0){//没有可用资源
try{
this.wait(); //等待
}catch(InterruptedException e){}
}
}
public synchronized void v(){、、实现V操作
semV alue++;
if(semV alue<=0){
this.notify(); //唤醒等待的线程
}
}
}