进程同步中的生产者_消费者模型分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第20卷第4期 武汉科技学院学报V ol.20 No.4 2007年4月 JOURNAL OF WUHAN UNIVERSITY OF SCIENCE AND ENGINEERING Apr. 2007 进程同步中的生产者—消费者模型分析
帖军,陈幼均
(中南民族大学计算机科学学院,湖北武汉 430074)
摘要:指出了复杂并发进程控制模型中同步和互斥关系处理的一般准则。以生产者—消费者模型为
例,根据缓冲区数量、生产者进程数量和消费者进程数量的不同,将其细分为4种不同的子模型,并
对其中的同步和互斥关系分别进行了分析,给出了各种情况下基于P、V原语和信号量机制的具体解
决方案。
关键词:进程;同步;互斥;信号量
中图分类号:TP311.1 文献标识码:A 文章编号:1009-5160(2007)-0030-05
生产者-消费者模型是现代操作系统中典型的进程同步互斥问题,大量的多进(线)程通信系统应用都可以抽象为该模型的不同形式。因此,该模型的算法实现在这些领域具有极其重要的应用价值。目前各操作系统关于进程间同步互斥问题的主要解决手段一般都基于P、V原语和信号量机制,但P、V原语和信号量的应用分析和具体控制异常复杂,使用不当很容易引发死锁等一系列问题[1]。本文的主要目的在于给出一个典型的同步互斥关系处理规则,并在该规则指导下,对生产者-消费者模型的各种不同情况进行具体分析,最终给出完善的基于P、V原语和信号量机制的解决方案。
1 生产者-消费者问题模型
1.1 问题描述
一个仓库用于临时性存放物品。生产者不断地进行生产,每生产出一件产品,就将该产品放入仓库,仓库放满后则暂停生产。消费者不断地从仓库中取出一件物品,然后进行消费,仓库取空后则暂停消费。
1.2 模型分析
可以将仓库抽象为计算机内存中的缓冲区,生产者和消费者抽象为不同的并发进程。在现代操作系统中,一般并发进程间的执行是相互独立,互不干涉的。但在本模型中,由于生产者和消费者进程间出现了共同的操作对象(缓冲区),因此两者的执行必须采取一定的控制进行协调,否则很可能因为彼此不同步而出现数据丢失或者重复读取等问题[2]。
1.3 典型同步互斥关系处理规则
对于复杂的并发进程控制模型,首先应当确定并发进程间的制约关系究竟是由于彼此协作而导致互相等待的直接制约,还是由于操作共同的排他性临界资源而导致的间接制约,进而将该组并发进程定性为同步关系(直接制约)或者互斥关系(间接制约)[3]。
对于同步关系的处理规则如下:
(1)确定导致同步关系的各个协作点,针对该协作点设置同步信号量,协作点以前发生的动作称为前驱,协作点以后发生的动作称为后继。同步信号量的初值设为后继动作所需资源在系统初始时的实际值。
(2)在每个后继动作之前加P操作,以试探是否可以得到所需资源并进一步执行;在每个前驱动作之后
收稿日期:2006-10-14
作者简介:帖军(1976-),男,讲师,硕士,研究方向:分布式系统.
基金项目:中南民族大学科研基金资助项目(项目编号:YZY06008)
第4期 帖军,等:进程同步中的生产者—消费者模型分析31
加V操作,以产生资源并唤醒阻塞在后继动作上的等待进程。
对于互斥关系的处理规则如下:
(1)确定导致互斥关系的各个临界资源,针对该临界资源设置互斥信号量,由于临界资源是排他性使用资源,相当于在同一时刻只有一个资源可用,因此该互斥信号量初值设为1。
(2)把对临界资源进行操作的代码段设置为临界区,为保证同一时刻只有一个进程进入临界区,在临界区之前加P操作,以试探是否可以锁定临界资源进入临界区;在临界区之后加V操作,以释放临界资源并唤醒等待进程。
很显然,在生产者-消费者模型中,同步关系和互斥关系是并存的。在上述处理规则的指导下,本文通过对缓冲区数量、生产者进程数量、消费者进程数量的不同情况进行分析,将生产者-消费者模型划分为单缓冲区的单生产者-单消费者模型、单缓冲区的多生产者-多消费者模型、多缓冲区的单生产者-单消费者模型、多缓冲区的多生产者-多消费者模型等4种情况分别进行讨论。
2 单缓冲区的单生产者-单消费者问题模型
限制条件:整个系统仅有唯一的一个缓冲区,活动进程仅有一个生产者Producer和一个消费者Consumer。
2.1 进程关系分析
同步关系:(1)只有在Producer向缓冲区放入物品后,Consumer才能够从缓冲区中取出物品消费;因此存在Consumer对于Producer的同步依赖。(2)只有在Consumer从缓冲区取出物品后,Producer才能够继续向缓冲区中放入新生产的物品;因此存在Producer对于Consumer的同步依赖。
互斥关系:(1)Producer放入物品的同时,Consumer是不能从缓冲区中取出物品的;反之亦然。因此存在Producer和Consumer之间的互斥关系。
2.2 信号量设置
同步关系(1)表示Consumer需要一定的满缓冲区资源,因此需要设置满缓冲区同步信号量Sem_FullBuffer,又因初始时无任何产品,所以满缓冲区初值为0。
同步关系(2)表示Producer需要一定的空缓冲区资源,因此设置空缓冲区同步信号量Sem_EmptyBuffer,又因初始时无任何产品,所以空缓冲区初值为1。
互斥关系(1)表示Producer和Consumer对于缓冲区的操作是排他性的,因此设置互斥信号量mutex_Buffer,互斥信号量初值固定为1。
最终信号量设置如下:
Semaphore Sem_FullBuffer = 0;
Semaphore Sem_EmptyBuffer = 1;
Mutex mutex_Buffer = 1; //①
2.3 P、V控制的算法实现
算法实现:
Producer(生产者进程)Consumer(消费者进程)
while(TRUE){ while(TRUE){
生产物品; P(Sem_FullBuffer)
P(Sem_EmptyBuffer) P(mutex_Buffer) //①
P(mutex_Buffer) //①从缓冲区中取出物品;
将物品放入缓冲区;V(mutex_Buffer) //①
V(mutex_Buffer) //①V(Sem_EmptyBuffer)
V(Sem_FullBuffer) 消费物品;
} }
2.4 算法效果分析
2.3中的P、V控制算法实现可以有效地保证生产者和消费者彼此交替、同步工作,从而避免了生产者速度过快导致的数据丢失以及消费者速度过快导致的数据重复读取。
但对于上述算法中的同步关系进一步分析可知,同步协作中强调的前驱与后继关系实际上已经包含了不能