华东理工815操作系统第7讲解读.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7讲作业: P82-83页:第23-28,30,32题 2.4 经典进程的同步问题 在多道程序环境下,进程同步问题十分重要,出现一系列经典的进程同步问题,其中有代表性有: 生产者—消费者问题 哲学家进餐问题 读者—写者问题 一、“生产者—消费者”问题 问题描述: “生产者---消费者”问题是最著名的进程同步问题。它描述了一组生产者向一组消费者提供产品,它们共享一个缓冲池(有n个缓冲区),生产者向其中投放产品,消费者从中取得产品。 它是许多相互合作进程的抽象,如输入进程与计算进程;计算进程与打印进程等。 一、“生产者—消费者”问题 一个生产者,一个消费者,公用一个缓冲区 定义两个同步信号量: empty——表示缓冲区是否为空,初值为n。 full——表示缓冲区中是否为满,初值为0。 生产一个产品 取出一个产品 生产者 缓冲区 一、“生产者—消费者”问题 生产者进程: while(TRUE){ 生产一个产品; P(empty); 把产品送往Buffer; V(full); } 消费者进程: while(TRUE){ P(full); 从Buffer取出一个产品; V(empty); 消费产品; } 一、“生产者—消费者”问题 M个生产者,K个消费者,公用有n个缓冲区的缓冲池 一、“生产者—消费者”问题 M个生产者,K个消费者,公用有n个缓冲区的缓冲池 设缓冲池的长度为n(n0),一群生产者进程P1,P2,…,Pm,一群消费者进程C1,C2,…,Ck,如图所示。假定生产者和消费者是相互等效,只要缓冲池未满,生产者就可以把产品送入缓冲区,类似地,只要缓冲池未空,消费者便可以从缓冲区取走产品并消耗它。生产者和消费者的同步关系将禁止生产者向满的缓冲池输送产品,也禁止消费者从空的缓冲池提取产品。 设置两个同步信号量及一个互斥信号量 empty:说明空缓冲区的数目,其初值为缓冲池的大小n,表示消费者已把缓冲池中全部产品取走,有n个空缓冲区可用。 full:说明满缓冲区的数目(即产品数目),其初值为0,表示生产者尚未把产品放入缓冲池,有0个满缓冲区可用。 mutex: 说明该缓冲池是一临界资源,必须互斥使用,其初值为1。 “生产者—消费者”问题的解决 “生产者—消费者”问题的同步算法描述 semaphore full=0; /*表示满缓冲区的数目*/ semaphore empty=n; /*表示空缓冲区的数目*/ semaphore mutex=1; /*表示对缓冲池进行操作的互斥信号量*/ main() { cobegin producer(); consumer(); coend } “生产者—消费者”问题的解决 { while(true) { 生产一个产品放入nextp; P(empty); P(mutex); Buffer[in]=nextp; in=(in+1) mod n; V(mutex); V(full); } } producer() { while(true) { P(full); P(mutex); nextc =Buffer[out]; out=(out+1) mod n; V(mutex); V(empty); 消费nextc中的产品; } } consumer() “生产者-消费者”问题中应注意 1. 互斥信号量的P、V操作在每一进程中必须成对出现。 2. 对资源信号量(full,empty)的P、V操作也必须成对出现,但可分别处于不同的程序中。 3. 多个P操作顺序不能颠倒。 4. 先执行资源信号量的P操作,再执行互斥信号量的P操作,否则可能引起进程死锁。 “生产者-消费者”问题中应注意 5. 它是一个同步问题: (1)消费者想要取产品,缓冲池中至少有一个缓冲区是满的。 (2)生产者想要放产品,缓冲池中至少有一个缓冲区是空的。 6. 它是一互斥问题 缓冲池是临界资源,因此,各生产者进程和各消费者进程必须互斥访问。 用管程机制解决生产者—消费者问题 1、建立Producer-consumer(PC)管程 Type PC=monitor var in,out,count:integer; buffer:array[0,…,n-1] of item; notfull,notempty:con

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档