操作系统实验报告

上传人:汽*** 文档编号:560001583 上传时间:2023-01-19 格式:DOCX 页数:11 大小:52.51KB
返回 下载 相关 举报
操作系统实验报告_第1页
第1页 / 共11页
操作系统实验报告_第2页
第2页 / 共11页
操作系统实验报告_第3页
第3页 / 共11页
操作系统实验报告_第4页
第4页 / 共11页
操作系统实验报告_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《操作系统实验报告》由会员分享,可在线阅读,更多相关《操作系统实验报告(11页珍藏版)》请在金锄头文库上搜索。

1、计算机操作系统实验报告题 目三大经典问题之生产者与消费者问题一、课程设计的性质与任务1、加深对并发协作进程同步与互斥概念的理解。通过编写程序实 现进程同步 和互斥 ,使学生 掌握有 关进程( 线程) 同步与互 斥的原理, 以及解 决进程( 线程) 同步和互 斥的算 法,从而 进一步巩固 进程( 线程)同 步和互 斥等有关 的内容 。2、掌握进程和线程的概念,进程(线程)的控 制原语或系统 调用的使用。3、了解 Windows2000/XP 中多线程 的并发执 行机制 ,线程间 的同步和互斥。学习使用 Windows2000/XP 中基本的 同步对 象,掌握相应的API 函 数 。4、培养学生能

2、够独立进行知识综合,独立开发较大程序的能力。5、培养提高学生软件开发能力和软件的调试技术。6、培养学生开发大型程序的方法和相互合作的精神。7、培养学生的创新意识。8、培养学生的算法设计和算法分析能力。9、培养学生对问题进行文字论述和文字表达的能力。二、课程设计的内容及其要求在 Windows XP 、 Windows 2000 等操作系统 下,使用 的 VC、VB、Java 或 C 等编程语言,采用进程(线程)同步 和互斥的技 术编写 程序实现 生产者 消费者问 题或哲 学家进餐 问题或读者-写者问题或自己设计一个简单进程(线 程)同步 和互斥的实 际问题 。要求:(1)经调试 后程序能够正常

3、运行。(2)采用多进程或多线程方式运行,体现了 进程(线 程)同步互 斥的关 系。3)程序界 面美观。三、实验原理本实验要求利用 PV 操作实现解决生产者消费者问 题中的同步 问题。 此问题描 述的是 一群生产 者进程 在生产产 品 并 将 这些 产 品提 供 给 消费 者 进程 去 消 费, 在 两者 之 间 设置 了一个具有 n 个缓冲区的缓 冲池, 生产者进 程将它 所生产的 产品放入一 个缓冲 区,消费 者进程 可从缓冲 区中取 走产品去 消费,但它 们之间 必须保持 同步, 即不允许 消费者 进程到一 个空缓冲区 去取产 品,也不 允许生 产者进程 向一个 已装满且 尚未取出的 缓冲

4、区 中投放产 品,并 且生产者 消费者 互斥使用 缓冲区。、实验原理五、算法实现(1)有一个生产者线程ProduceThread,有1个消费者进程 CustomerThread ;缓冲区为 shareList。 使用线程同步:用synchonized关键字(加锁)使得一个时间 内只能有一个线程得到执行,另一个线程必须等待当前线程执行完这 个代码块以后才能执行该代码块;wait。让线程进入等待状态;notify ()函数唤醒一个处于等待状态的线程。(3)程序运行流程图如下:(如不在外部中断,程序将一直循环运行)六、源代码package 操作系统;/*产品类*/publicclass Goods

5、int id;String name;public String toString()return id+ +name;package 操作系统;importjava.util.List;/* 消费者线程:有产品时可以取出,无产品时等待*/publicclassCustomerThreadextends Threadprivate 型shareList;CustomerThread(LtshareList)this.shareList=shareList;publicvoid run()System.outprintln(” 消费线程已启动+shareList.size();while(tru

6、e)trysynchronized(shareList) while(shareList.size()=0)/如果没有产品,消费线程则等待shareList.wait();while(shareList.size()0)System.out.println(0)shareList.wait();while(shareList.size()=0)Goods gs = newGoods();count+;gs.id=count;gs.name二产品+countSystem.out.println(-生产线程放入对象:+gs.toString();shareList.add(gs);/通知消费线程,

7、队列中有对象了shareList.notify();catch(Exception ef)ef.printStackTrace();用来标记放入对象的每一个独立ID号privatestaticintcount=0;/与消费者线程或以共同存取的对象列表privateListshareList;package 操作系统;importjava.util.LinkedList;importjava.util.List;public class Manage /主函数public static void main(String args) /生产消费线程交换对象的队列List shareList = n

8、ew java.util.LinkedList();/启动生产线程newProduceThread(shareList).start();/启动消费线程newCustomerThread(shareList).start();七、运行结果/o ro Tr _/ oo oo 9 q nr nn=nn=nQ=nm nQ:nn=nQ= 亠厂亠厂亠厂-I厂亠厂 4厂亠厂-I厂好讎已启动0 糖驟葢动0 1 产品 1 SSmrS: 1 rSl 2 产品2 菊船翱出产窃2产品2 进产黠恥牆:3产即 舗驟黜命:3产知 好豔4R牆;4 rSA 触驟黜胡峠4 琏战翱加擦;5产品5| 4rSiiMi: 9 SSmr

9、S: 9-生产驟緞牆:10 r10 -M:10 皑 10八、实验心得在此次实验中我们模拟PV操作同步机构,来解决消费者与生 产者这两个进程之间的同步协调问题。实验中值得注意的是解决进 程同步需要做哪些工作,如何利用信号量机制来 解决进程同步问题 等等。通过本次实验,我对操作系统的p、v有了进一步认识,深入 了解了 p、v 操作的实质和其重要性,加深了我对操作系统中多线程 机制的理解和认识,更让我认识到知识的掌握,仅靠学习理论知识是 远远不够的,要与实际动手操作相结合才能更好地理解和分析问题。 此外,我也发现自己在编程上仍存在较大的问题,本次实验让我对 java 语言的线程编写水平有了提高。我日后会不断加深各方面知识的 学习,弥补自己的不足。实验给了我们实践的机会,给了我们理论结 合实际的机 会,从实验中可以学到很多东西,不仅仅是书本上的东 西这么简单,更是培养了我们动手能力和自学能力,还有更重要的是 对待事情严谨的态度,我定会以更加严谨认真的态度对待每次实验。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号