管程等解决生产者消费者问题——操作系统课程设计论.doc
《管程等解决生产者消费者问题——操作系统课程设计论.doc》由会员分享,可在线阅读,更多相关《管程等解决生产者消费者问题——操作系统课程设计论.doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 操作系统原理课程设计提优论文题 目: 利用管程解决“生产者消费者”问题 姓 名: 学 院: 信息科技学院 专 业: 网络工程 班 级: 网工81班 学 号: 指导教师: 2011年3月 20日利用管程解决“生产者消费者”问题摘要:现代操作系统引入并发程序设计技术之后,程序的执行不再是顺序的,封闭的。在多个进程并发运行的过程中,进程之间可能产生相互制约的关系,即竞争和协作。为了协调各进程有序正确的进行,就需要各进程间能相互通信。如果各进程之间不加以来控制,就会产生错误,如与时间有关的错误等。这就需要考虑进程之间的同步和互斥等问题。操作系统中经典的“生产者消费者”问题正反映了进程并发执行的这种关
2、系。本课程设计所完成的就是对“生产者消费者”问题的模拟,本系统根据操作系统中并发进程、临界区、同步和互斥等基本概念及理论进行设计,采用Java语言实现,用管程来对进程进行模拟同步和互斥的控制。本系统可按照用户设定的生产者消费者数目及缓冲区大小来进行模拟演示。这对深入理解操作系统中进程的同步和互斥问题,探求对进程控制方法的学习上有重大意义。关键字:管程;进程同步;进程互斥;临界资源1.研究目的及意义本课程设计通过模拟计算机操作系统中经典的“生产者消费者问题”,巩固在操作系统原理课上所学的知识,加深对操作系统中进程同步和互斥、临界区管理,管程等问题的认识和理解。前期主要利用P、V信号量来控制各进程
3、间的同步于互斥关系,确保各进程有序正确的进行。然而,我们也知道,使用信号量和P、V操作在实现进程同步时,对共享资源的管理分散于各个进程中,进程能够直接对共享变量进行处理,不利于系统对系统资源的管理,容易造成程序设计错误。因此,在后期我们改用管程来实现,目的是想把资源集中起来统一管理,即把相关的共享变量及其操作集中在一起统一的控制和管理,使各并发进程间的相互作用更为清晰。当然,我们本次课程设计也为我们了解软件设计的流程、方法以及思想,提高分析设计以及编程的能力提供了基础。2.理论基础及分析2.1问题的引入在操作系统引入并发程序设计技术之后,程序的执行不再是顺序和封闭的,程序外部的顺序特性消失,程
4、序与计算不再一一对应。于是人们引入进程来描述这种变化。而一组进程在执行的时间上是重叠的,即进程并发执行。在多个进程并发运行的过程中,进程之间可能是无关的,也可能是交互的。交互进程之间可能产生的关系,包括竞争和协作。竞争和协作就会出现对统一资源进行操作,进而引入临界区的概念并发进程中与共享变量有关的程序段称为临界区,共享变量所代表的资源成为临界资源。如不对临界区进行管理就会产生一些与时间有关的错误。在操作系统有多种方法可以实现对临界区、临界资源的管理。其中最基本的方法是设置相应的信号量和P、V操作。2.2信号量和P、V操作为了能让多个进程通过特殊变量展开交互,一个进程在某一关键点上被迫停止执行直
5、至收到对应的特殊变量,通过这一措施,来达到复杂进程间的交互,这种特殊变量就是信号量。为了能够用信号量传送信号,进程可用P、V两个特殊操作来发送和接收信号,如果协作进程的相应信号仍未送到,则进程被挂起直至信号达到为止。P、V操作的实现,是本次课程设计的基础,也是一个重点。本次设计能够成功,有一定的偶然性。即充分的借助于JAVA虚拟机提供的两个与线程有关的最重要的两个函数,即wait()和notify()。我们都知道,实现P、V操作的重点是如何将进程阻塞在相应的阻塞队列,以及如何唤醒相应的阻塞进程,而不会出现错误。要实现这一点,有一定的难度。前期,我们做过尝试,但最终以失败而告终。最后,我们找到了
6、JAVA虚拟机提供两个函数来实现我们的目的。函数如下:wait() 执行该方法的线程释放对象的锁,Java虚拟机把该线程放到该对象的等待池中。notify() 执行该方法的线程唤醒在该对象等待池中等待的一个线程。因为是面向对象的一门编程语言,一切属性与方法都与对象绑定,而这一点正是我们要解决的难点:如何将进程阻塞在相应的阻塞队列,以及如何唤醒相应的阻塞进程。可以说,我们是把这个难题交给了虚拟机来处理。但此种方法把资源交给各进程进行管理,容易出现进程有意或无意的破坏,所以我们才用管程来控制。2.3管程的基本概念代表共享资源的数据结构,以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序,
7、共同构成了一个操作系统的资源管理模块,我们称之为管程。管程的四个组成部分: 1.管程内部的共享变量; 2.管程内部的条件变量; 3.管程内部并行执行的进程; 4.对局部于管程内部的共享数据设置初始值的语句。2.4用管程实现进程和互斥: (1)用管程实现互斥:当几个进程调用某个管程的时候,在一个时刻仅允许一个进程进入管程。管程中仅允许一个进程处于活跃状态,但不表示管程中只有一个进程,可能存在因资源不足而阻塞的进程等。当一个进程调用管程中的过程时,首先检查管程中是否有进程处于活跃态,如果有,则阻塞调用进程,直到管程内部的进程离开管程或其他操作。管程的互斥操作是由管程内部的互斥信号量实现的,其初值为
8、1。(2)用管程实现同步:在管程中要设置一对同步操作原语,Wait()和Signal()操作,注意这里操作作用于条件变量,不具有累加功能,如果管程中的进程发出了一个信号量,而在对应的条件变量上没有阻塞等待的进程,则该信号量没有作用,会被丢失。为了区别阻塞等待进程和不同阻塞对应,设置了不同条件变量。 当一个进程申请资源未能满足时,将调用Wait()阻塞自己,并进入相应的阻塞队列。当某进程释放出一个临界资源以后,将用Signal()唤醒等待在该临界区资源上的一个阻塞进程。3.系统设计3.1核心技术及技术路线 a. 模拟生产者消费者之间的同步和互斥关系 b. 模拟操作系统中进程的并发与共享环境 关键
9、技术: c. 模拟控制各线程对临界资源有序的访问 d. 可视化技术路线:(如下图示)多生产者多消费者多缓冲区核心技术路线图:生产者消费者同步互斥并发可视化P()/ V()多线程Java Swing和awtThreadJava中的wait()和notify()wait()和notify()管程实现3.2功能设计 简注:本系统模拟了多生产者多消费者及多缓冲区的情况,并且可由使用者自行设置。 设置完毕进入主界面后,单击开始按钮即可开始,用户可以通过滑动杆来根据具体要求随时改变生产者及消费者的相对速度,并可以看到输出的进程跟踪信息。 模拟完成或途中,用户可以单击分析按钮查看统计信息。 确定结束可以单击
10、退出以退出系统。观察模拟情况,按需要调整生产或消费速度开始界面设置生产者、消费者数目,及缓冲区大小点击开始模拟点击分析按钮查看统计分析数据退出系统3.3数据结构设计注:以下各函数中的字符串形式参数,以及调用函数的实际字符串参数,如,1等,均是设计后期用于跟踪和分析进程,以及跟踪和分析进程调用管程的整个过程而引入的。主要数据结构(1):信号量类(模拟操作系统中的P,V操作): public class Semaphore /信号量(即P V操作的类)private int Value;/信号量值public Semaphore(int semValue)this.Value=semValue;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 管程 解决 生产者 消费者 问题 操作系统 课程设计
限制150内