重
庆交通大学
《计算机操作系统》课程设计报告
班 级:
姓 名:
学 号:
课程设计题目:
所 属 课 程 :
实验室(中心):
指 导 教 师 :
完 成 时 间 :
计软专业 2013 级 2 班 刘克 631306050224 生产者消费者问题 计算机操作系统 语音楼801 刘洋 年 11 月 25 日
2015 信息科学与工程学院课程设计成绩单
课程名称:计算机操作系统 姓名 性别 男 刘克 综合成绩 学号 631306050224 指导教师:刘洋 班级 软件 1302 程序运行情况 (占总成绩20%) □能正确运行 □基本能正确运行 □能运行但结果不完善 (20分) (15分) (10分) □基本完善 (8 分) □不完善 (5 分) □完善 程序功能完善程度 (10 分) (占总成绩 10%) □合理 程序结构的合理性 (10 分) (占总成绩 10%) □基本合理 (8 分) □不太合理 (5 分) □概念正确有创新 □能正确回答所有问题 □基本能正确回答 (40 分) (35 分) (30 分) 对问题的答辩情况 (占总成绩 40%) □部分问题回答概念不清晰 (20 分) 学生的工作态度与 □工作态度认真能独立完成任务 □工作态度认真但独立性较差 独立工作能力 (10 分) (8 分) (占总成绩 10%) □工作态度基本认真但缺乏独立性 (5 分) 设计报告的规范性 □符合规范 (占总成绩 10%) (10 分) □基本符合规范 (8 分) □规范性较差 (5 分)
重庆交通学院信息科学与工程学院课程设计任务书
课 程 题 目 计算机操作系统 班级 软件2013级 2班 指导教师 完成时间 2015年6月 日 至2015年11月 日 刘洋 生产者消费者问题 主要 内容 利用程序界面模拟生产者消费者进程调度问题 设计报告要求 1.封面; 2.课程设计成绩单、课程设计任务书 3.内容提要; 4.“课程设计报告”正文部分: 主要应包括: ①问题分析和任务定义; ②环境简介; ③设计:主要是指数据结构与核心算法的设计描述;操作界面的设计;主要功能的算法框架;测试用例设计等内容。 ④编译参数与步骤的说明; ⑤上机调试总结与分析; ⑥用户使用说明; ⑦测试数据与测试结果等内容。 ⑧课程设计总结:可以包括课程设计过程的收获、遇到的问题及解决过程的思考、对数据结构这门课程的思考和认识等内容。 ⑨附录程序清单 5.参考文献 5.题目用黑体三号,段后距18磅(或1行),居中对齐; 6.标题用黑体四号,段前、段后距6磅(或0.3行); 7.正文用小四号宋体,行距为1.25倍行距; 8.标题按“一”、“㈠”、“1”、“⑴”顺序编号。 星期 周次 版面要求 指导时间安排 指导 地点
一 二 三 四 五 六 17周 18周
一、 问题分析和任务定义
(1)问题分析
生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。
(2)任务定义
利用java写可视化程序,绘制三个矩形,分别表示生产进程、缓冲区、消费进程。定义一个栈作为缓冲区,栈的大小固定。定义两个线程分别控制生产过程和消费过程。
生产过程:图片向右移动,移动到一定位置,表明生产完成。则向栈中压入一个元素。判断是否可以生产的标准是栈是否已经满,为此要定义一个IsFull函数来判断栈是否已满。如果已满则不可生产。
消费过程:从栈中弹出一个元素放在消费进程矩形之中,图片开始向右移动,移动出矩形则停止移动。
二、 环境简介
开发工具:eclipse 操作系统:win10
三、 设计
(1) 界面设计
如上图所示界面上有3个矩形,上面那个是生产矩形,中间的是缓冲区矩形,下面的是消费矩形。四个按钮分别是“开始生产”、“开始消费”、“停止生产”、“停止生产”、“停止消费”。 (2) 算法设计
定义一个栈来作为缓冲区,用来存储图片,定义一个生产者线程和一个消费者线程。两个线程分别控制图片的移动。生产者线程的图片一旦运动到一定位置,则向栈中压入一个图片元素,与此同时,缓冲区则显示一个产品。开始消费时,消费者线程则从栈中取出一个图片元素,这时缓冲区则减少一个产品,并且开始在消费矩形中开始运动,运动到一定位置停止。
定义update函数来更新界面显示内容:
public void Update() {
int y[]={20,230,440}; if(pictureProduce!=null) {
if(!Id.isEmpty()) {
Id.lastElement().setBounds(20+(Id.size()-1)*125,230,120,120);