版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、重庆交通大学计算机操作系统课程设计报告班 级: 计软专业 2013 级 2 班 姓 名: 学 号: 课程设计题目: 生产者/消费者与fcfs 所 属 课 程 : 计算机操作系统 实验室(中心): 语音大楼801 指 导 教 师 : 刘洋 完 成 时 间 : 2015 年 12 月 5 日信息科学与工程学院课程设计成绩单课程名称:计算机操作系统指导教师:刘洋姓名刘沅良性别男学号631306050202班级软件 1302综合成绩 程序运行情况 (占总成绩20%)能正确运行基本能正确运行能运行但结果不完善(20分) (15分) (10分)程序功能完善程度(占总成绩 10%)完善基本完善不完善(10
2、分)(8 分)(5 分)程序结构的合理性(占总成绩 10%)合理基本合理不太合理(10 分)(8 分)(5 分)对问题的答辩情况(占总成绩 40%) 概念正确有创新 能正确回答所有问题 基本能正确回答(40 分)(35 分)(30 分)部分问题回答概念不清晰(20 分)学生的工作态度与 独立工作能力(占总成绩 10%)工作态度认真能独立完成任务工作态度认真但独立性较差(10 分)(8 分)工作态度基本认真但缺乏独立性(5 分)设计报告的规范性(占总成绩 10%)符合规范基本符合规范规范性较差(10 分)(8 分)(5 分)重庆交通学院信息科学与工程学院课程设计任务书课 程计算机操作系统班级软件
3、2013级 2班指导教师刘洋题 目生产者/消费者与fcfs完成时间2015年6月 30日至2015年12月8 日主要内容1 生产者与消费者问题;2 先来先服务问题。设计报告要求1封面;2课程设计成绩单、课程设计任务书3内容提要;4“课程设计报告”正文部分:主要应包括:问题分析和任务定义;环境简介;设计:主要是指数据结构与核心算法的设计描述;操作界面的设计;主要功能的算法框架;测试用例设计等内容。编译参数与步骤的说明;上机调试总结与分析;用户使用说明;测试数据与测试结果等内容。课程设计总结:可以包括课程设计过程的收获、遇到的问题及解决过程的思考、对数据结构这门课程的思考和认识等内容。附录程序清单
4、5参考文献版面要求1. 题目用黑体三号,段后距18磅(或1行),居中对齐;2. 标题用黑体四号,段前、段后距6磅(或0.3行);3. 正文用小四号宋体,行距为1.25倍行距;4. 标题按“一”、“”、“1”、“”顺序编号。指导时间安排星期周次一二三四五六17周18周指导地点语音大楼801生产者/消费者与fcfs一、内容提要操作系统是计算机的核心软件,是计算机专业学生的专业必修课。进程同步问题是计算机操作系统中的重点内容,而生产者-消费者问题是进程同步问题中的经典,它是计算机中相互合作进程关系的一种抽象,该问题具有很大的代表性和使用价值。在计算机系统中,很多问题都可以归结为生产者与消费者问题,提
5、别是在通讯和控制系统中。因此,对该类问题的研究是非常必要的。一般而言,我们把提供给某种资源的进程(线程)称之为生产者,二吧消耗资源的进程(线程)称之为消费者。在大多数情况下,生产者和消费者的数目都是多于一个的。下面以多个进程(线程)共享一有界缓冲池为例来说明。nn-1n-2 .321如图,左端箭头表示生产者,右端箭头表示消费者,设p1、p2、pk是k个想缓冲池装入数据的进程(线程)(生产者)c1、c2、cm是m个冲缓冲池中取出数据进行处理的进程(线程)(消费者),假设对任何pi每次向缓冲区中申请一空白缓冲区,并把数据装入其中;而对于常见的情况是任何ci每次都从缓冲池中取出一满缓冲区的内容,并进
6、行相应的处理,并把缓冲区清空。而每次生产者装入数据和消费者取出数据都是相同的(这是最常见的情况)。针对以上进程(线程)通信,如不对生产者进程(线程)和消费者(线程)的操作进行限制,则可能破坏数据的完整性。一种情况是一个生产者进程(线程)正在装入数据到缓冲区时,另外的生产者进程(线程)可能同时把数据写入相同区域,造成数据破坏,另一种情况是一个生产者进程(线程)正在装入数据到缓冲区时,另外的消费者进程(线程)可能读入该区域数据,由于数据未写完,从而造成消费者读到的数据是不完整的。对于先来先服务,如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在就绪队列的后面,那么先来先服务总是把当前处于就绪队列
7、之首的那个进程调度到运行状态。也就是说,它只考虑进程进入就绪队列的先后,而不考虑它的下一个cpu的长短及其他因素。二、正文(一)问题分析和任务定义1、生产者/消费者(1)生产者与消费者之间的关系问题。作为消费者(p1、p2、pk)它每次都需要消耗缓冲池中空白缓冲区;而消费者(c1、c2、cm)它每次都需要消耗缓冲池中的满缓冲区,并给缓冲池中提供空白缓冲区。因此,生产者群体和消费者之间首先存在同步问题。为了提高系统的效率,也就是说有生产者正在装入数据到空白数据缓冲区时,消费者可以提取已经装满数据的满缓冲区,因此,生产者和消费者之间可以不应该存在互斥关系。(2)生产者(p1、p2、pk)群体内部的
8、关系问题:当有生产者pi正在装入数据时,如果这时又有生产者pj到达,如允许其也进行装入数据工作,则有可能导致数据装入同一缓冲区,造成数据 丢失,因此,必须让所有生产者以互斥方式对缓冲区进行操作。(3)消费者(c1、c2、cm)群体内部的关系问题。当有消费者ci正在取出数据时,如果这时又有消费者cj到达,如果允许其取出数据工作,则有可可能导致同一缓冲区多次取用,这也是不能允许的,因为一个数据只能使用一次。因此,必须让所有消费者以互斥方式对缓冲池进行操作。2、fcfs先来先服务算法按照作业进入系统后备作业队列的先后次序挑选作业,先进入系统的作业将优先被挑选进入主存,创建用户进程,分配所需资源,然后
9、,移入就绪队列.这是一种非剥夺式调度算法,易于实现,但效率不高.只顾及作业的等候时间,未考虑作业要求服务时间的长短,不利于短作业而优待长作业,不利于i/o繁忙型作业而有利于cpu繁忙型作业.有时为了等待场作业执行结束,短作业的周转时间和带全周转时间将变得很大,从而若干作业的平均周转时间和平均带权周转时间也变得很大。(二)环境简介windows系统电脑一台;jdk环境下用editplus软件编写程序。(三)设计1、生产者/消费者(1)数据结构与核心算法描述storage类模拟缓冲池,包含数据成员如下:private int pnumber;/生产商品数private int cnumber;/消
10、耗商品数private int number;/缓冲区商品数private boolean flag1;/private boolean flag2;/private boolean flag3;/private boolean flag4;/包含的方法如下:public void setpnumber(int pnumber)/获取当前生产的商品数public void setcnumber(int cnumber)/或取当前消耗的商品数public int countnumber()/库存量(生产数量 - 消费数量)public void setstorageballflag()/publ
11、ic boolean getflag1()public boolean getflag2()public boolean getflag3()生产者productor类并实现接口runnable,包含的数据成员如下:private storage storage;/仓库private mycanvas mycanvas;/画图包含的方法如下:public void run()/run方法中调用product()方法进行生产public void product(storage storage,mycanvas mycanvas) throws interruptedexception/生产商品
12、,并进行相应的画图消费者customer类并实现接口runnable,包含的数据成员如下:private storage storage; /仓库private mycanvas mycanvas; /画图包含的方法如下:public void run()/run方法中调用cast()方法进行生产public void cast(storage storage,mycanvas mycanvas) throws interruptedexception/生产商品,并进行相应的画图(2)操作界面的设计myframe类进行界面的搭建,包含的数据成员如下:private jframe myframe
13、;/private button pbutton;/生产者按钮private button cbutton;/消费者按钮private mycanvas mycanvas;/轨道private storage storage;/仓库对象private final int table_width = 400;/界面宽度private final int table_height = 300;/界面长度其中,为按钮添加事件监听器。由构造函数public myframe()完成界面的搭建。界面图如下:(3)主要功能算法描述点击生产按钮,进行模拟生产,若仓库满则停止生产。点击消费按钮,进行模拟消费,若
14、仓库空则停止消费。2、fcfs(1)数据结构与核心算法描述核心算法如下:class tball1 implements runnableclass tball2 implements runnableclass tball3 implements runnableclass tball4 implements runnable以上四个方法对小球进行控制,先到的先进入cpu。(2)操作界面的设计view类进行界面的搭建,包含的数据成员如下:private jframe f = new jframe(先来先服务-631306050202-刘沅良);private final int t = 200
15、;private final int table_width = 400;/宽度private final int table_height = 300; /长度private final int ball_size = 20;/球的直径private mycanvas mc = new mycanvas();/球的轨道控制flowlayout flow = new flowlayout();private button start = new button(开始);queue queue = new linkedlist();private boolean flag1 = true;/控制小
16、球进入cpuprivate boolean flag2 = true;private boolean flag3 = true;private boolean flag4 = true;private int b_v = 10;private int b1_v = 1+(int)(math.random()*10);/小球的速度,用随机数产生private int b2_v = 1+(int)(math.random()*10);private int b3_v = 1+(int)(math.random()*10);private int b4_v = 1+(int)(math.random
17、()*10);private int b1_x = 50;/小球一横坐标private int b2_x = 50;private int b3_x = 50;private int b4_x = 50;private int b1_y = 50;private int b2_y = 100;private int b3_y = 150;private int b4_y = 200; 其中,为按钮添加事件监听器。由构造函数public view()完成界面的搭建。界面图如下: (3)主要功能算法描述点击开始,四个小球以不同的速度向前移动,用队列进行存储,先到的先入队,利用队列先进先出的特点。(
18、四)编译参数与步骤1、生产者/消费者 2、fcfs(五)上机调试总结与分析1、生产者/消费者刚开始时基本语法问题,改了以后出现的问题是仓库满了还可以继续生产,以及仓库空的时候还可以继续消费,这是不允许,分析后发现没有在生产和消费时加以控制。2、fcfs一开始的是并不能实现先来先服务的条件,球到了模拟缓冲区以后没有按照顺序进入cpu,分析之后使用了队列来实现。(六)用户使用说明1、生产者/消费者点击生产按钮,进行模拟生产,若仓库满则停止生产。点击消费按钮,进行模拟消费,若仓库空则停止消费。2、fcfs点击开始,四个小球以不同的速度向前移动,用队列进行存储,先到的先入队,利用队列先进先出的特点。先
19、到缓冲区先进入cpu。(七)测试数据与测试结果1、生产者/消费者(八)课程设计总结通过这次课程设计,让我对资源共享有了更深一步的了解,同时对线程的理解比以前更熟了一些,而且,在fcfs中,让我对进程作业先来先服务调度概念,有了更深入的认识。初步理解了操作系统对于作业处理的基本思想。同时,这次课程设计也是对自己编程能力的一种考验,加深了理论知识的实际应用。但还是暴露出对java语言不熟练的缺点,希望在以后的学习中能够学好,逐步增强自己的编程能力。(九)附录1、生产者/消费者代码/程序功能:生产者消费者模拟import javax.swing.*;import java.awt.*;import
20、java.awt.event.*;class myframe extends jframeprivate jframe myframe;private button pbutton;private button cbutton;private mycanvas mycanvas;private storage storage;private final int table_width = 400;private final int table_height = 300;public myframe()myframe=new jframe(生产者消费者-631306050202-刘沅良);pbu
21、tton=new button(生产);cbutton=new button(消费);storage=new storage();mycanvas=new mycanvas(storage);mycanvas.setpreferredsize(new dimension(table_width,table_height);myframe.add(pbutton,borderlayout.north);myframe.add(cbutton,borderlayout.south);myframe.add(mycanvas);myframe.pack();pbutton.addactionlist
22、ener(new actionlistener()public void actionperformed(actionevent e) new thread(new productor(storage,mycanvas).start(););/按钮事件响应cbutton.addactionlistener(new actionlistener()public void actionperformed(actionevent e) new thread(new customer(storage,mycanvas) ).start(););myframe.setdefaultcloseoperat
23、ion(jframe.exit_on_close);myframe.setvisible(true);class storageprivate int pnumber;/商品数private int cnumber;private int number;private boolean flag1; private boolean flag2; private boolean flag3; private boolean flag4;public storage()pnumber=0;cnumber=0;number=0;flag1=false;flag2=false;flag3=false;f
24、lag4=false;public void setpnumber(int pnumber)this.pnumber=pnumber;public void setcnumber(int cnumber)this. cnumber=cnumber;public int countnumber()this.number=pnumber-cnumber;return number;public void setstorageballflag()if(countnumber()= 0) flag1 = false; flag2 = false; flag3 = false;if(countnumbe
25、r() = 1) flag1 = true; flag2 = false; flag3 = false;if(countnumber() = 2) flag1 = true; flag2 = true; flag3 = false;if(countnumber() = 3) flag1 = true; flag2 = true; flag3 = true;public boolean getflag1()return flag1;public boolean getflag2()return flag2;public boolean getflag3()return flag3;class m
26、ycanvas extends canvasprivate final int ballsize;private int ballx;private int bally;storage storage;public mycanvas(storage storage)ballsize=30;ballx=50;bally=50;this.storage=storage;public void paint(graphics mygraphics)mygraphics.setcolor(color.blue); mygraphics.drawrect(50, 50, 150, 30); mygraph
27、ics.drawrect(200, 200, 150, 30);/定义一个生产道和一个消费道mygraphics.setcolor(color.red);mygraphics.filloval(ballx, bally, ballsize, ballsize);mygraphics.setcolor(color.blue);mygraphics.drawrect(155, 135, 90, 30);storage.setstorageballflag();if(storage.getflag1() = true) mygraphics.setcolor(color.yellow); mygra
28、phics.filloval(155, 135, ballsize, ballsize);if(storage.getflag2() = true) mygraphics.setcolor(color.yellow); mygraphics.filloval(185, 135, ballsize, ballsize);if(storage.getflag3() = true)mygraphics.setcolor(color.yellow); mygraphics.filloval(215, 135, ballsize, ballsize);public void setpballlocus(
29、int ballx, int bally) try thread.sleep(400); catch (interruptedexception e) e.printstacktrace(); this.ballx = ballx; this.bally = bally; this.repaint(); public void setcballlocus(int ballx, int bally) try thread.sleep(400); catch (interruptedexception e)e.printstacktrace(); this.ballx = ballx; this.
30、bally = bally; this.repaint(); class productor implements runnable/private productors productors;private storage storage;private mycanvas mycanvas;public productor(storage storage,mycanvas mycanvas)/ductors=productors;this.storage=storage;this.mycanvas=mycanvas;public void run() tryproduct(s
31、torage,mycanvas);catch (interruptedexception e)e.printstacktrace();public void product(storage storage,mycanvas mycanvas) throws interruptedexception for(int j = 0; j 100; j+) while(storage.countnumber()=3) try storage.wait(); catch (interruptedexception e) e.printstacktrace(); system.out.println(第
32、+ (j+1) + 次生产 ); for(int i = 0; i 9; i+ ) mycanvas.setpballlocus(50 + i * 15, 50); storage.setpnumber(j + 1); storage.notifyall(); class customer implements runnableprivate storage storage;private mycanvas mycanvas;public customer(storage storage,mycanvas mycanvas)this.storage=storage;this.mycanvas=
33、mycanvas; public void run() trycast(storage,mycanvas);catch (interruptedexception e)e.printstacktrace(); public void cast(storage storage,mycanvas mycanvas)throws interruptedexceptionfor(int j = 0; j 100; j+)while(storage.countnumber()=0)trystorage.wait();catch (interruptedexception e) e.printstackt
34、race(); system.out.println(第 + (j+1) +次消费); for(int i = 0; i 9; i+) mycanvas.setcballlocus(200 + i * 15, 200); storage.setcnumber(j + 1); storage.notifyall();public class myprogrampublic static void main(string args)myframe myprogram=new myframe();2、fcfs代码import javax.swing.*;import java.awt.button;
35、import java.awt.canvas;import java.awt.color;import java.awt.dimension;import java.awt.flowlayout;import java.awt.frame;import java.awt.graphics;import java.awt.event.actionevent;import java.awt.event.actionlistener;import java.util.linkedlist;import java.util.queue;class view private jframe f = new
36、 jframe(先来先服务-631306050202-刘沅良);private final int t = 200;private final int table_width = 400;private final int table_height = 300; private final int ball_size = 20;private mycanvas mc = new mycanvas();flowlayout flow = new flowlayout();private button start = new button(开始);queue queue = new linkedl
37、ist();private boolean flag1 = true;private boolean flag2 = true;private boolean flag3 = true;private boolean flag4 = true;/private boolean msg = true;private int b_v = 10;private int b1_v = 1+(int)(math.random()*10);/小球的速度,用随机数产生private int b2_v = 1+(int)(math.random()*10);private int b3_v = 1+(int)
38、(math.random()*10);private int b4_v = 1+(int)(math.random()*10);private int b1_x = 50;/小球一横坐标private int b2_x = 50;private int b3_x = 50;private int b4_x = 50;private int b1_y = 50;private int b2_y = 100;private int b3_y = 150;private int b4_y = 200;public view() mc.setpreferredsize(new dimension(ta
39、ble_width,table_height);f.add(mc);f.setlayout( flow);f.add(start);f.pack();start.addactionlistener(new actionlistener()/按钮事件监听器overridepublic void actionperformed(actionevent e) new thread(new tball1().start();new thread(new tball2().start();new thread(new tball3().start();new thread(new tball4().st
40、art(););f.setdefaultcloseoperation(jframe.exit_on_close); f.setvisible(true);public void setball1(int b1_x, int b1_y)try thread.sleep(200); catch (interruptedexception e) e.printstacktrace();this.b1_x = b1_x;this.b1_y = b1_y;mc.repaint();public void setball2(int b2_x, int b2_y)try thread.sleep(200);
41、 catch (interruptedexception e) e.printstacktrace();this.b2_x = b2_x;this.b2_y = b2_y;mc.repaint();public void setball3(int b3_x, int b3_y)try thread.sleep(200); catch (interruptedexception e) e.printstacktrace();this.b3_x = b3_x;this.b3_y = b3_y;mc.repaint();public void setball4(int b4_x, int b4_y)try thread.sleep(200); catch (interruptedexception e) e.printstacktrace();this.b4_x = b4_x;this.b4_y = b4_y;mc.repaint();class tball1 implements runnableoverridepublic void run() for(int i = 0; i = 190) flag1 = false; queue.add(a); b1_v = 0; if( queue.peek() = a & b1_x = 190) b1_v = 10; b1_y
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年度辅警招聘考试考试历年机考真题集含完整答案详解(有一套)
- 语言障碍患者的安全护理与沟通
- 高血压患者健康教育媒体宣传
- 寻常性痤疮患者的护理方法
- 宠物狗饲养注意事项指南
- 2024-2025学年农村信用社招聘考试高频难、易错点题含答案详解(轻巧夺冠)
- 2024-2025学年医院三基考试综合提升测试卷附完整答案详解【典优】
- 2024-2025学年度公务员考试《常识》考试综合练习【综合题】附答案详解
- 2024-2025学年度冶金工业技能鉴定高频难、易错点题含答案详解(满分必刷)
- 2024-2025学年反射疗法师3级高频难、易错点题附参考答案详解【达标题】
- 2026年及未来5年中国面粉加工行业市场发展现状及投资方向研究报告
- 2026年春季统编版小学道德与法治四年级下册教学计划
- 2026年春季北师大版(2024)小学数学二年级下册教学计划
- 2026年内蒙古建筑职业技术学院单招职业技能考试题库及参考答案详解(新)
- 互联网企业网络安全管理制度(标准版)
- 1.1时代为我搭舞台(课件)-中职思想政治《心理健康与职业生涯》高教版2023基础模块
- 打击诈骗犯罪 警民同心发力 (课件)
- (新教材)2026年春期人教版二年级下册数学教学计划+教学进度表
- 高中实验室安全教育课件
- 2026年甘肃省交通运输厅所属事业单位招聘笔试易考易错模拟试题(共500题)试卷后附参考答案
- 碾压混凝土施工培训课件
评论
0/150
提交评论