实验报告(学生打印后提交)实验名称: 生产者和消费者问题 实验时间: 2013 年 5 月 5 日实验人员: 实验目的:掌握基本的同步互斥算法,理解生产者和消费者模型。 了解 Windows 2000/XP 中多线程的并发执行机制,线程间的同步和互斥。 学习使用 Windows 2000/XP 中基
操作系统课程设计-管程的实现生产者消费者问题Tag内容描述:
1、境:WindowsXP VC+6.0 利用 Windows SDK 提供的系统接口(API,应用程序接口)完成程序的功能。
API 是操作系统提供的用来进行应用程序设计的系统功能接口。
使用 API,需要包含对 API 函数进行说明的 SDK 头文件,最常见的就是 windows.h实验步骤:1.读懂源程序 2. 编辑修改源程序 实验陈述:1、基础知识:本实验用到几个 API 函数: CreateThreadCreateMutex,WaitForSingleObject,ReleaseMutexCreateSemaphore,WaitForSingleObject,ReleaseSemaphore, ReleaseMutex, nitializeCriticalSection, EnterCriticalSection, LeaveCriticalSection。
这些函数的作用:CreateThread,功能:创建一个线程,该。
2、总体设计思想概述: 3四、说明: 3五、设计要求: 3六、设计方案: 3七、流程图: 5八、运行结果 7九、源程序 11十、总结 19十一、参考文献 203一、题目:用多进程同步方法解决生产者-消费者问题。
二、设计目的:通过研究 Linux 的进程机制和信号量实现生产者消费者问题的并发控制。
三、总体设计思想概述:1、 生产者消费者问题是一种同步问题的抽象描述。
2、 计算机系统中的每个进程都可以消费或生产某类资源。
当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。
3、 而当某个进程释放资源时,则它就相当一个生产者。
四、说明:有界缓冲区内设有 20个存储单元,放入/取出的数据项设定为 1-20这 20个整型数。
五、设计要求:1、每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者线程的标识符。
2、生产者和消费者各有两个以上。
3、多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码。
六、设计方案:通过一个有界缓冲区(用数组来实现,类似循环队列)把生产者和消费者联系起来。
假定生产者和消费者的优先级是相同的,只要缓冲区未。
3、0 日利用管程解决“生产者消费者”问题摘要:现代操作系统引入并发程序设计技术之后,程序的执行不再是顺序的,封闭的。
在多个进程并发运行的过程中,进程之间可能产生相互制约的关系,即竞争和协作。
为了协调各进程有序正确的进行,就需要各进程间能相互通信。
如果各进程之间不加以来控制,就会产生错误,如与时间有关的错误等。
这就需要考虑进程之间的同步和互斥等问题。
操作系统中经典的“生产者消费者”问题正反映了进程并发执行的这种关系。
本课程设计所完成的就是对“生产者消费者”问题的模拟,本系统根据操作系统中并发进程、临界区、同步和互斥等基本概念及理论进行设计,采用 Java 语言实现,用管程来对进程进行模拟同步和互斥的控制。
本系统可按照用户设定的生产者消费者数目及缓冲区大小来进行模拟演示。
这对深入理解操作系统中进程的同步和互斥问题,探求对进程控制方法的学习上有重大意义。
关键字:管程;进程同步;进程互斥;临界资源1.研究目的及意义本课程设计通过模拟计算机操作系统中经典的“生产者消费者问题” ,巩固在操作系统原理课上所学的知识,加深对操作系统中进程同步和互斥、临界区管理,管程等问题的认识和理解。
前期主要利。
4、商品,消费者若不取走商品则当缓冲区用完之后生产者则不能再向缓冲区中添加新的商品。
思考问题:(1)对于生产者进程:每产生一个数据,则需去访问共用缓冲区是否有已满,未满则可以将该数据存入并通知消费者进程,否则不能。
(2)对于消费者进程:每当想去消费(取出数据)时,则需访问缓冲区是否为空,为空则不能消费(取出数据) ,否则可以取,并通知生产者。
(3)缓冲区是个临界资源,所有的进程对于该空间都是共享的,所以,还有互斥问题存在。
2、课程设计目的通过实验模拟生产者与消费者之间的关系,了解并掌握他们之间的关系及原理。
由此增加对进程同步问题的了解:(1)掌握基本的同步互斥算法,理解生产者与消费者模型(2)了解 windows 中多线程(多进程)的并发执行机制,线程(进程)间的同步于互斥(3)学习使用 windows 中基本的同步对象,掌握相应的 API。
3、 课程设计内容有 n 个生产者和 m 个消费者,连接在具有 k 个单位缓冲区的有界环转缓冲上,故又称有界缓冲问题。
其中 Pi和 Cj都是并发进程,只要缓冲区未满,生产者进程 Pi所生产的产品就可投入缓冲区;类似地,只要缓冲区非空,消费者进程 Cj就。
5、执行的这种关系。
本课程设计所完成的就是对“生产者消费者”问题的模拟,本系统根据操作系统中并发进程、临界区、同步和互斥等基本概念及理论进行设计,采用 Java 语言实现,用管程来对进程进行模拟同步和互斥的控制。
本系统可按照用户设定的生产者消费者数目及缓冲区大小来进行模拟演示。
这对深入理解操作系统中进程的同步和互斥问题,探求对进程控制方法的学习上有重大意义。
关键字:管程;进程同步;进程互斥;临界资源1.研究目的及意义本课程设计通过模拟计算机操作系统中经典的“生产者消费者问题” ,巩固在操作系统原理课上所学的知识,加深对操作系统中进程同步和互斥、临界区管理,管程等问题的认识和理解。
前期主要利用 P、V 信号量来控制各进程间的同步于互斥关系,确保各进程有序正确的进行。
然而,我们也知道,使用信号量和 P、V 操作在实现进程同步时,对共享资源的管理分散于各个进程中,进程能够直接对共享变量进行处理,不利于系统对系统资源的管理,容易造成程序设计错误。
因此,在后期我们改用管程来实现,目的是想把资源集中起来统一管理,即把相关的共享变量及其操作集中在一起统一的控制和管理,使各并发进程间的相互作用更为清晰。
6、者问题是一个经典的进程同步问题,该问题最早由 Dijkstra 提出,用以演示他提出的信号量机制。
模拟实现用同步机构避免发生进程执行时可能出现的与时间有关的错误。
进程是程序在一个数据集合上运行的过程,进程是并发执行的,也即系统中的多个进程轮流地占用处理器运行。
我们把若干个进程都能进行访问和修改的那些变量称为公共变量。
由于进程是并发地执行的,所以,如果对进程访问公共变量不加限制,那么就会产生“与时间有关”的错误,即进程执行后所得到的结果与访问公共变量的时间有关。
为了防止这类错误,系统必须要用同步机构来控制进程对公共变量的访问。
一般说,同步机构是由若干条原语同步原语所组成。
本实习要求学生模拟 PV 操作同步机构的实现,模拟进程的并发执行,了解进程并发执行时同步机构的作用。
1.1 实现的功能生产者-消费者问题是一个经典的进程同步问题,有 m 个生产者和 n 个消费者,它们共享可存放 k 件产品的缓冲区。
生产者进程生产物品,然后将物品放置在一个空缓冲区中,供消费者进程消费。
消费者进程从缓冲区中获得物品,然后释放缓冲区。
当生产者进程生产物品时,如果没有空缓冲区可用,那么生产者进程必须等待。
7、隐含的具有锁或二值信号量。
如果没有条件变量,管程就不会有很有用,条件变量提供了一种对管程内并发协作进程的同步机制。
条件变量代表了管程中一些并发进程或线程可能要等待的条件。
一个条件变量管理着管程内的一个等待队列。
如果管程内某个进程或线程发现其执行条件为假,则该进程或线程就会被条件变量挂入管程内等待该条件的队列。
如果管程内另外的进程或线程满足了这个条件,则它会通过条件变量再次唤醒等待该条件的进程或线程,从而避免了死锁的产生。
所以,一个条件变量 C 应具有两种操作 C.wait()和C.signal()。
当管程内同时出现唤醒者和被唤醒者时,由于要求管程内的进程或线程必须互斥执行,因此就出现了两种样式的条件变量:Mesa Style(signal-and-continue): 唤醒者进程或线程继续执行,被唤醒者进程或线程等到唤醒者进程或线程阻塞或离开管程后再执行。
Hoare Style(signal-and-wait): 被唤醒者进程或线程立即执行,唤醒者进程或线程阻塞,直道被唤醒者阻塞或离开管程后再执行。
我们实验所做的就是在原来 mesa 样式的基础上进行 Hoare 样式的改进;这种样。