生产者消费者问题模拟实现z

上传人:夏** 文档编号:512736096 上传时间:2024-02-25 格式:DOC 页数:31 大小:421KB
返回 下载 相关 举报
生产者消费者问题模拟实现z_第1页
第1页 / 共31页
生产者消费者问题模拟实现z_第2页
第2页 / 共31页
生产者消费者问题模拟实现z_第3页
第3页 / 共31页
生产者消费者问题模拟实现z_第4页
第4页 / 共31页
生产者消费者问题模拟实现z_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《生产者消费者问题模拟实现z》由会员分享,可在线阅读,更多相关《生产者消费者问题模拟实现z(31页珍藏版)》请在金锄头文库上搜索。

1、生产者消费者问题模拟实现作者:日期:生产者-消费者实验1.1实验目的和要求1.1.1实验目的操作系统的基本控制和管理控制都围绕着进程展开,其中的复杂性是由于支持并发和并发机制而引起的。自从操作系统中引入并发程序设计后,程序的执行不再是顺序的,一个程序未执行完而另一个程序便已开始执行,程序外部的顺序特性消失,程序与计算不再对应。并发进程可能是无关的,也可能是交互的。然而,交互的进程共享某些变量,一个进程 的执行可能会影响其他进程的执行结果,交互的并发进程之间具有制约关系、同步关系。其中典型模型便是生产者-消费者模型。本实验通过编写和调试生产者-消费者模拟程序,进一步认识进程并发执行的实质,加深对

2、进程竞争关系,协作关系的理解,掌握使用信号量机制与P、V操作来实现进程的同步与互斥。1.1.2实验要求1 用高级语言编写一个程序,模拟多个生产者进程和多个消费者进程并发执行,并采用信号量机制与 P、V操作实现进程间冋步与互斥。2撰写实验报告,报告应包含以下内容:(1)实验目的;(2)实验内容;(3)设计思路;(4)程序流程图;(5)程序中主要数据结构和函数说明;(6)带注释的源程序代码;(7)程序运行结果及分析;(8)实验收获与体会。1.2预备知识1.2.1生产者一消费者问题生产者一消费者问题表述如下: 如图3 1所示,有n个生产者和m个消费者,连接在具有k个单位缓冲区的有界环状缓冲上,故又称

3、有界缓冲问题。生产者不断生成产品,只要缓冲区未满,生产者进程 p 1所生产的产品就可投入缓冲区 ;类似的,只要缓冲区非空,消费者进 程c j就可以从缓冲区取走并消耗产品。生产者消费者J消拔吿图3.1生产者一消费者问题示意图著名的生产者一消费者问题(produ c e r-c onsumer p r o blem)是计算机操作系统中 并发进程内在关系的一种抽象,是典型的进程同步问题。在操作系统中,生产者进程可以是计算进程、发送进程,而消费者进程可以是打印进程、接收进程等,解决好生产者一消费者问题就解决了一类并发进程的同步问题。操作系统实现进程同步的机制称为同步机制,它通常由同步原语组成。不同的同

4、步机制采用不同的同步方法,迄今已设计出多种同步机制,本实验采用最常用的同步机制:信号量 及PV操作。1.2.2信号量与PV操作1 9 65年,荷兰计算机科学家 E.W.Dijkstra提出新的同步工具一一信号量和PV操作,他将交通管制中多种颜色的信号灯管理方法引入操作系统,让多个进程通过特殊变量展开交互。一个进程在某一关键点上被迫停止直至接收到对应的特殊变量值,通过这一措施任何复杂的进程交互要求均可得到满足,这种特殊变量就是信号量 (semapho r e)。为了通过信号量传送信号,进程可利用P和V两个特殊操作来发送和接收信号,如果协作进程的相应信号仍未到达,则进程被挂起直至信号到达为止。在操

5、作系统中用信号量表示物理资源的实体,它是一个与队列有关的整型变量。具体实现时,信号量是一种变量类型,用一个记录型数据结构表示 ,有两个分量:一个是信号量的值, 另一个是信号量队列的指针。信号量在操作系统中主要用于封锁临界区、进程同步及维护资源计数。除了赋初值之外,信号量仅能由同步原语 PV对其操作,不存在其他方法可以检查或 操作信号量,PV操作的不可分割性确保执行的原子性及信号量值的完整性。利用信号量和 PV操作即可解决并发进程竞争问题,又可解决并发进程协作问题。信号量按其用途可分为两种:公用信号量,联系一组并发进程,相关进程均可在此信号量 上执行PV操作,用于实现进程互斥;私有信号量,联系一

6、组并发进程,仅允许此信号量所拥 有的进程执行 P操作,而其他相关进程可在其上执行V操作,初值往往为0或正整数,多用于并发进程同步。信号量的定义为如下数据结构:t ypede f st ruct se m ap ho re? in t valu e;/信号量的值?s tru c t pcb *l i st; / /信号量队列的指针信号量说明: s emaphore s ;P、V操作原语描述如下:(1) P (s ): s.va lue-;若s.va lue 0 ,则执行P (s)的进程继续执行;若s.va l u e0,则执行P(s )的进程被阻塞,并把它插入到等待信号量s的阻塞队列中。(2)

7、V(s) : s. value + +;若s. valu e0,则执行 V( s )的进程继续执行;1.2.3信号量实现互斥信号量和p v操作可用来解决进程互斥问题。为使多个进程能互斥地访问某临界资源, 只需为该资源设置一互斥信号量mutex,并置初值为1,然后将各进程访问该资源的临界区置于P (mu tex) 和 V(mutex)操作之间即可。用信号量和PV操作管理并发进程互斥进入临界区的一般形式为:s em a p hor e m u te x;mutex =1 ;c obe ginproce s s P i ()/*i = 1,2,,n */?P(mu te x );?/*临界区*/?

8、V (m u tex);c o end当有进程在临界区中时,mutex的值为0或负值,否则m ut e x值为1 ,因为只有一个进程,可用P操作把mutex减至0,故可保证互斥操作,这时试图进入临界区的其它进程会因 执行P (mutex)而被迫等待。mut ex的取值范围是1-(n - 1),表明有一个进程在临界区 内执行,最多有n-1个进程在信号量队列中等待。1.2.4信号量解决生产者一消费者问题信号量和pv操作不仅可以解决进程互斥问题,而且是实现进程同步的有力工具。在协作进程之间,一个进程的执行依赖于协作进程的信息或消息,在尚未得到来自协作进程的信号或消息时等待,直至信号或消息到达时才被唤

9、醒。生产者一消费者问题是典型的进程同步问题,对于生产者进程:生产一个产品,当要送入缓冲区时,要检查是否有空缓冲区,若有,则可将产品送入缓冲区,并通知消费者进程;否则, 等待;对于消费者进程:当它去取产品时,要看缓冲区中是否有产品可取,若有则取走一个 产品,并通知生产者进程,否则,等待。这种相互等待,并互通信息就是典型的进程同步。因此应该设两个同步信号量:信号量emp t y表示可用的空缓冲区的数目 初值为 k;信 号量full表示可以使用产品的数目,初值为0。缓冲区是一个临界资源,必须互斥使用,所以另外还需要设置一个互斥信号量mutex,其初值为1。用信号量机制解决生产者一消费者问题可描述如下

10、:item B k;s em ap hor e emp t y; empty= k ;/可以使用的空缓冲区数semap h or e full; fu ll = 0;/缓冲区内可以使用的产品数sema pho r e mutex; ?mu t ex=1;/ 互斥信号量int in= 0 ;?/放入缓冲区指针int o u t= 0 ;/取出缓冲区指针 cobe g inp roces s coW hile(tru e)proce s s pro d ucer _ i() n su mer()W hile(true) ? prod uce(); ?P (f ull);P(emp t y);?P(

11、mute x );P(mut e x);?t a k e f rom Bo ut ;app e nd to Bi n ;?5o ut = (ou t + 1)%k;in = (in+1)%k;x );?V (mutea bV(mu t ex) ;?V(em pty);V(fu ll); ?c onsume(); ? ?Co end程序中的P(m ut e x)和V(m u te x )必须成对出现,夹在两者之间的代码段是临界区;施加于信号量e mpty和f u II上的PV操作也必须成对出现,但分别位于不同的程序中。在生产者 消费者问题中,P操作的次序是很重要的,如果把生产者进程中的两个P操作

12、交换次序,那么,当缓冲区中存满k件产品时,生产者又生产一件产品,在它欲向缓冲区存放时,将在P (e mpt y)上等待,由于此时 mu tex=0,它已经占有缓冲区,这时消费者预取产品时将停留在P(mute x )上而得不到使用缓冲区的权力。这就导致生产者等待消费者取走产品,而消费者 却在等待生产者释放缓冲区的占有权,这种互相之间的等待永远不可能结束。所以,在使用信号量和PV操作实现进程同步时,特别要当心P操作的次序,而V操作的次序无关紧要。一 般来说,用于互斥的信号量上的P操作总是在后面执行。1.3生产者消费者问题模拟实现1.3.1实验内容考虑一个系统中有n个进程,其中部分进程为生产者进程,

13、部分进程为消费者进程 ,共享 具有k个单位的缓冲区。现要求用高级语言编写一个程序,模拟多个生产者进程和多个消费者进程并发执行的过 程,并采用信号量机制与 P、V操作实现生产者进程和消费者进程间同步以及对缓冲区的互斥 访问。利用信号量机制解决此问题的算法见 3.2.4所示。1.3.2实验指导1.设计提示(1) 本实验并不需要真正创建生产者和消费者进程,每个进程用一个进程控制块(PCB)表示。PCE数据结构如下:t y pedef st r uct Pro ce ss/进程 PCB?ch ar name 1 0 ;?/进程名in t r o leFla g;/进程类型(1:生产者 0:消费者)?i

14、 n t currentState; ?/进程状态(1:可运行态 0:阻塞态)?int cur r ent Ste p;?/ 断点?i n t data;?临时数据i n t c ode ;?/进程编号P roce ss;(2) 程序中应指定缓冲区的数目,进程总个数等,现考虑共有4个生产者和消费者进程, 缓冲区数目是两个,定义如下所示:#de fi n e d ata Bu f fe r Si ze 2 ?/ 缓冲区数目#def i ne pr o c essN um 4? ?/进程数量(生产者、消费者进程总数目)st rue t Da t aBuffer/ 缓冲区?int b u f f erdat a Buf fe rSi z e;?int cou n t;? ?/当前产品数量 d a t aB u f fer;(3) 为解决生产者-消费者问题需设两个同步信号量:信号量empt y表示可用的空缓冲区的数目,初值为缓冲区数目;信号量fu 1 l表示可以使用产品的数目,初值为0。缓冲区是一个临界资源,必须互斥使用,所以另外还需要设置一个互斥信号量mu t ex,其初值为

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

当前位置:首页 > 资格认证/考试 > 自考

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