- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE 3
课程设计目的
进行操作系统课程设计主要是在学习操作系统课程的基础上,在完成操作系统各部分实验的基础上,对操作系统的整体进行一个模拟,通过实践加深对各个部分的管理功能的认识,还能进一步分析各个部分之间的联系,最后达到对完整系统的理解。同时,可以提高运用操作系统知识解决实际问题的能力;锻炼实际的编程能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。
课程设计内容与要求
模拟仿真“生产者-消费者”问题的解决过程及方法。
通过研究Linux的进程机制和信号量,实现生产者消费者问题的并发控制。
设计要求:
生产者与消费者均有二个以上。
生产者和消费者进程的数目在程序界面上可调,在运行时可随时单个增加与减少生产者与消费者。
3) 生产者的生产速度与消费者的消费速度均可在程序界面调节,在运行中,该值调整后立即生效。
4) 多个生产者或多个消费者之间必须有共享对缓冲区进行操作的函数代码。
5) 每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、当前生产者与消费者的指针位置,以及生产者和消费者线程标识符。
6) 采用可视化界面,可在运行过程中随时暂停,查看当前生产者、消费者以及有界缓冲区的状态。
生产者与消费者问题是经典进程同步问题的典型代表之一。该课程设计通过了解进程间的两种制约关系,从而理解信号量机制;通过对实例的分析和讨论,理解信号量机制实现进程的同步及互斥的方法;通过对经典进程同步问题的剖析,初步掌握运用信号量解决进程同步问题的方法。
本系统的功能是根据输入的生产者进程和消费者进程(缓冲区设为了固定大小20),动态显示生产者进程从生产“产品”到放入缓冲区,消费者进程从缓冲区中取“产品”的整个过程,同时,系统也显示了整个过程中缓冲池中临界资源的变化情况。
系统分析与设计
系统分析
在操作系统中, 线程有时被称为轻量级进程, 是CPU 使用的基本单位, 它与属于同一进程的其他进程共享其他代码段、数据段和其他操作系统资源。在Java 中, 线程的建立有两种方法: 继承Thread 类和实现Runnable 接口。其中, 采用实现Runnable 接口建立线程的好处是允许同时继承其他类从而实现多继承,并且在Java 中, 可采用synchronized 或Object 类的方法wait( ), notify( ), notifyAll( )来实现多线程同步。Java 多线程同步机制的实现是基于管程(Monitor)机制,在Java 中每个对象都包含一把同步锁( 管程对象) 和一个线程等待集合, 当对象生成时它们随之自动生成。线程等待集的初值为空, 同步锁的初始状态为开锁状态。
只有当对象object 的同步锁处于开锁状态时, 对象object 的synchronized 方法或以对象为同步参数的synchronized 块( 以下简称synchronized 方法( 块) ) 才允许访问对象object。当线程thread1 运行对象object 的synchronized方法( 块) 时, 首先需object
的同步锁锁上, thread1将object 上锁成功后才继续执行synchronized 方法( 块) 内语
句。当synchronized 方法( 块) 正常结束或异常退出时, 同步锁解锁动作自动执行。Object 类的方法wait( ), notify( )和notifyAll( )可实现线程间的通信。当线程thread1 调用object.wait( )时, 则thread1 停止执行, 将thread1 加入object 的线程等待集, 并解锁其上锁的所有对象同步锁; 当线程thread2 调用object.notify( )时, 从object 的线程等待集中随机移出一个线程thread3 ( 在Java 语言规范中没有规定选择移出线程的算法, 由JVM实现时决定) 去参与线程调度。
多个生产者进程在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有20个存储单元的缓冲区,生产者进程将它所生产的产品放入缓冲区中;消费者进程可从缓冲区中取走产品去消费。
利用信号量机制来实现多进程(生产者进程和消费者进程)对缓冲区(临界资源)的互斥访问。设置多进程的共享变量为临界资源,同时给它设置一个互斥信号量,多进程利用互斥信号量来完成对临界资源的互斥访问(当信号量为某个值是允许进程访问,否则则不允许进程访问),从而确保共享数据的正确性。
系统设计:
1) 生产者- 消费者问题的提出
并发程序在设计上是有困难, 其中最大的问题是进程或者线程间的同步问题, 而生产者—消费者问题是最经典的问题之一, 其描述如
您可能关注的文档
最近下载
- 研究生学术表达能力培养知到智慧树期末考试答案题库2024年秋西安建筑科技大学、清华大学、同济大学、山东大学、河北工程大学、《环境工程》英文版和《环境工程》编辑部.docx
- 肋骨骨折的急救与护理ppt.pptx
- 先瑞达医疗~B-市场前景及投资研究报告-药物球囊.pdf
- 电话销售的拒绝处理.pptx
- 2023年台州玉环农商银行寒假生招聘笔试真题.docx VIP
- 人工智能在体育教学中的应用与研究教学研究课题报告.docx
- ABAP将内表行列转换实例(动态内表).pdf
- 部编版小学六年级下册语文教材解读.pdf VIP
- 浙江省宁波五校联考2024年中考科学适应性考试试卷.docx VIP
- 先瑞达医疗-B上市招股说明书 港股.pdf
文档评论(0)