计算机操作系统课程设计报告.docx
- 文档编号:2736066
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:14
- 大小:190.06KB
计算机操作系统课程设计报告.docx
《计算机操作系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《计算机操作系统课程设计报告.docx(14页珍藏版)》请在冰点文库上搜索。
计算机操作系统课程设计报告
课程设计
课程名称
计算机操作系统
题目名称
生产者消费者同步算法
专业班级
学生姓名
学号
指导教师
二○一五年十二月一日
蚌埠学院计算机科学与技术系课程设计任务书
课程
操作系统
班级
指导教师
题目
生产者消费者同步算法
完成时间
2015年5月25日
至
2015年11月20日
主要内容
要求完成以下功能:
1.在系统中用一个文件来模拟一个磁盘;
2.此系统至少有:
Create、delete、open、close、read、write等和部分文件属性的功能。
3.实现这个文件系统。
4.能实际演示这个文件系统。
基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。
设计报告要求
1.封面:
(格式附后)
2.课程设计任务书
3.课程设计报告:
⑴系统总体方案
⑵设计思路和主要步骤
⑶各功能模块和流程图
⑷设计代码
⑸心得体会和参考资料
说明:
学生完成课程设计后,提交课程设计报告及软件,要求文字通畅、字迹工整(也可用以打印),文字不少于5000字,并装订成册。
版面要求
1.题目用黑体三号,段后距18磅(或1行),居中对齐;
2.标题用黑体四号,段前、段后距6磅(或0.3行);
3.正文用小四号宋体,行距为1.25倍行距;
4.标题按“一”、“㈠”、“1”、“⑴”顺序编号。
5.本文档材料A4纸双面打印。
上机时间安排
星期
周次
一
二
三
四
五
六
日
第14周-第17周
15计科1、2节
15计科3、4节
指导时间地点
上机时间,多媒体技术实验室(A505)
一、系统总体方案
(一)目的
根据进程同步机制,编写一个解决下述问题的程序,可显示缓冲池状态、放数据、取数据等过程。
(二)问题
一组生产者向一组消费者提供消息,它们共享一个有界缓冲池,生产者向其中投放消息,消费者从中取得消息。
假定这些生产者和消费者互相等效,只要缓冲池未满,生产者可将消息送入缓冲池;只要缓冲池未空,消费者可从缓冲池取走一个消息。
(三)主要完成的任务
通过多线程编程实现生产者消费者同步算法。
(四)使用的开发工具
Eclipse,语言Java
(五)解决的主要问题
上述
(二)中问题。
二、设计思路和主要步骤
(一)多道程序
多道程序设计是指在主存中同时存放多道用户作业,使它们都处于执行的开始点和开始点之间,这些程序共享计算机系统资源。
多道程序设计的主要优点有:
提高CPU的利用率。
在多道程序环境下,多个程序共享计算机资源当某个程序等待I/O操作时,CPU可以执行其他程序,大大提高CPU的利用率。
提高设备的利用率。
在多道程序环境下,多个程序共享系统的设备,大大提高系统设备的利用率。
提高系统的吞吐量。
在多道程序环境下,减少了程序的等待时间,提高了系统的吞吐量。
(二)进程
进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。
它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
(三)线程
线程,有时被称为轻量级进程(LightweightProcess,LWP),是程序执行流的最小单元。
一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。
另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
由于线程之间的相互制约,致使线程在运行中呈现出间断性。
线程也有就绪、阻塞和运行三种基本状态。
每一个程序都至少有一个线程,那就是程序本身。
(四)同步和互斥的概念
进程互斥是进程之间发生的一种间接性作用,一般是程序不希望的。
通常的情况是两个或两个以上的进程需要同时访问某个共享变量。
我们一般将发生能够问共享变量的程序段成为临界区。
两个进程不能同时进入临界区,否则就会导致数据的不一致,产生与时间有关的错误。
解决互斥问题应该满足互斥和公平两个原则,即任意时刻只能允许一个进程处于同一共享变量的临界区,而且不能让任一进程无限期地等待。
互斥问题可以用硬件方法解决,我们不作展开;也可以用软件方法,这将会在本讲详细介绍。
同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。
在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。
少数情况是指可以允许多个访问者同时访问资源。
三、各功能模块和流程图
基本的技术路线:
面向对象
软件的总体结构、模块关系、总体流程;
(一)功能模块
总体分为4个模块:
●用户图形界面模块UI.java
●消费者Consumer.java
●生产者Producer.java
●管程Pool.java
(二)流程图
四、设计代码
总体执行过程是:
输入参数、点击设置使之生效、然后点击开始
(一)UI界面主线程
里面有几个重要的属性;
privateintCustomerSize;//消费者的数量
privateintProducerSize;//生产者的数量
privateintPoolSize;//缓冲区大小
publicPoolpool;//管城对象
publicintbuySpeed;//消费间隔,控制消费速度
publicintproduceSpeed;//生产间隔,控制生产速度
publiclonginProductCount=0;//已经生产产品的数量
publiclongoutProductCount=0;//已经消费的产品数量
publiclongcurrentProductCount=0;//当前的产品数量
publicbooleanisStop=false;//强制线程退出的信号量
这些属性是在点击界面的设置按钮后把用户输入的参数进行相应的赋值。
当点击开始按钮后执行下面的主要代码:
//一些必要的初始化
isStop=false;
inProductCount=0;
outProductCount=0;
currentProductCount=0;
this.pool=newPool(this);//初始化管程
this.pool.MAX_SIZE=this.PoolSize;//设置仓库大小
//开启消费者线程和生产者线程
//启动线程同时把ui界面对象传递到线程中,使线程获得必要的设置信息
for(inti=0;i newThread(newCustomer(this)).start(); } for(inti=0;i newThread(newProducer(this)).start(); } 消费者和生产者的同步和他们各自之间的互斥都是在管程里面实现的. (二)管程类 importjava.util.Date; importjava.util.Stack; publicclassPool{ privateStack publicintMAX_SIZE;//栈能到达的最大值 privateUIui;//接收转递进来的ui对象,以实现操作界面显示相关信息 publicPool(UIui){ this.ui=ui; this.products=newStack } publicsynchronizedvoidgetProduct(){ //synchronized实现了消费者线程间的互斥保证同一时刻只能有一个线程调用该方法 while(this.products.isEmpty()){ //products是一个栈结构通过判断它的空实现消费者线程和生产者线程之间的同步try{ wait();//栈是空的,不能取数据,线程等待 }catch(InterruptedExceptione){ e.printStackTrace();}} intproduct; product=products.pop();//栈没有空,取数据 ui.addInfo("消费者【"+Thread.currentThread().getId()+"】从仓库取出产品【"+product+"】成功。 当前库存量【"+products.size()+"】"+"---当前时间戳: "+newDate().getTime()); ui.outProductCount++; ui.currentProductCount=products.size(); ui.refreshStatus(); notifyAll();//取完数据同时生产线程生产产品 } publicsynchronizedvoidsetProduct(){ //synchronized实现了生产者线程间的互斥保证同一时刻只能有一个线程调用该方法 intproduct=(int)(Math.random()*10000); while(this.products.size()==MAX_SIZE){ //products是一个栈结构通过判断它的满实现消费者线程和生产者线程之间的同步 try{ wait();//栈满了,不能继续生产,线程等待 }catch(InterruptedExceptione){ e.printStackTrace();} } this.products.push(product);//栈没有满,继续生产 ui.addInfo("生产者【"+Thread.currentThread().getId()+"】将产品【"+product+"】放入仓库。 当前库存量【"+products.size()+"】"+"---当前时间戳: "+newDate().getTime()); ui.inProductCount++; ui.currentProductCount=products.size(); ui.refreshStatus(); notifyAll();//生产完毕,通知消费者消费 }} (三)生产者类 importjava.util.Date; publicclassProducerimplementsRunnable{ UIui; publicProducer(UIui){ this.ui=ui;//接收传递进来的界面对象,以实现在线程中操作界面显示信息 } publicvoidrun(){ while(! ui.isStop){ //如果信号量ui.isStop是false则一直消费下去,否则退出循环线程自然消亡 ui.pool.setProduct();//调用管程生产方法生产产品 try{ Thread.currentThread().sleep(ui.produceSpeed); }catch(InterruptedExceptione){ e.printStackTrace(); } } //线程退出前在界面中提示本线程退出 ui.addInfo("生产者【"+Thread.currentThread().getId()+"】停止生产成功."+"---当前时间戳: "+newDate().getTime());}} (四)消费者类 importjava.util.Date; publicclassCustomerimplementsRunnable{ UIui; publicCustomer(UIui){ this.ui=ui; } publicvoidrun(){ while(! ui.isStop){ ui.pool.getProduct();//调用管程的消费方法消费产品 try{ Thread.currentThread().sleep(ui.buySpeed); }catch(InterruptedExceptione){ e.printStackTrace(); } } ui.addInfo("消费者"+Thread.currentThread().getId()+"停止购物成功."+"---当前时间戳: "+newDate().getTime()); }} 五、运行效果截图 六、心得体会和参考资料 (一)心得体会 通过本次课程设,使我对线程(进程)之间的同步和互斥有了非常直观的理解,学会了通过信号量去解决类似的互斥和同步问题,提高了我的编程解决问题的能力,在代码设计阶段我学到了很多控制线程的技巧,以及线程之间的简单通信。 总之学无止境,这只是个开端,等待自己去发掘和学习的还有更多。 (二)参考资料 1.李勇,刘恩林.计算机体系结构.长沙: 国防科技大学出版社,1987 2.周凡,潘福美.32位微型计算机原理与应用.北京: 气象出版社,1992 3.黄祥喜.计算机操作系统实验教程.广州: 中山大学出版社,1994 4.苏开根,何炎祥.计算机操作系统原理及其习题答案.北京: 海洋出版社,1993 5.尤晋元,UNIN操作系统教程.西安: 清华大学出版社,1994 6.毛德操,胡希明.Linux内核源代码情景分析.杭州: 浙江大学出版社,1994
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 操作系统 课程设计 报告
文档标签
- 计算机操作系统报告
- 计算机操作系统教程计算机操作系统教程
- 简单计算机系统课程设计计算机
- 计算机操作系统教程第三版计算机操作系统教程
- 计算操作系统调研报告
- 计算机操作系统课程教案
- 计算机操作系统课程设计windowsserver系统计算机
- ARM课程设计计算机系统设计
- 机房操作流程报告
- 计算机操作系统课程设计报告
- 操作系统课程设计报告处理机
- 计算机系统综合课程设计
- 操作系统课程设计银行家算法报告操作系统课程设计
- 操作系统课程设计信号机制
- 计算机操作系统进程调度实验报告计算机操作系统
- 计算机操作系统论文设计计算机操作系统论文
- 计算机操作系统计算机操作系统课程设计
- 计算机操作系统PV操作
- 计算机操作系统动态分区计算机操作系统
- 计算机操作系统
- 计算机操作系统
- 计算机操作系统封装
- MSE计算机操作系统23
- 计算机操作系统实验报告