第四章 进程的同步与通信.ppt

  1. 1、本文档共86页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 进程的同步与通信 4.1.2竞争的条件 发生在多个进程或者线程在读写数据时,竞争的结果依赖于多个进程的执行顺序 举例: (1)P1和P2共享变量a (2)P3和P4共享变量b,c 初值 b=1,c=2; P3:b=b+c,P4: c=b+c, 结果是b=3,c=5 P4 c=b+c, P3 :b=b+c, 结果是b=4,c=3 解决的办法: Void P i (int r) {…… { entercritical (r); /*critical section*/ Exitcritical(r);} ……} Void main( ) {…… Parbegin( P1 (r),P2 (r),P3 (r)……); } 2、进程间通过共享的合作 1、与竞争的区别 2、数据的一致性问题 P1: P2 a=a+1; b=2*b b=b+1; a=2*a 举例:a=1,b=1,且互斥。 1)若要单独执行P1、P2结果是a=4,b=4. 2)若要单独执行P2、P1结果是a=3,b=3. 3)若要并发执行P1、P2、P1、P2结果是a=4,b=3.数据结果不一致。 解决的方法是:整个序列声明临界区。 3、进程间的通信合作 竞争:共享(不知道其他进程存在) 合作:共享(未明确知道其它进程,只知道维护数据的完整性) 内核提供各种类型的通信 进程间没有共享任何对象,不存在互斥 存在饥饿和死锁 1、二元信号量的定义 1、一个信号量可以初始化为0或者1 2、p操作检查信号量的值,如果为0,进程受阻,如果值为1,那么将值改变为0并且继续执行该进程。 3、v操作检查是否有任何进程在该信号上受阻,如果有,那么通过v操作受阻的进程会被唤醒,如果没有进程受阻,那么值被设置为1。 推论1、S0,P操作中,s代表实际还可以使用的物理资源数。 推论2、s0,代表队列中等待进程的个数。 推论3、p代表请求一个资源,v代表释放一个资源。 推论4、在s0,P代表挂起进程,而s=0,V代表唤醒被挂起的进程。 Const int n=/*进程数*/ Semaphore s.count=1 Void p(int i) {…… P(s); {……} /*临界区*/ V(s); …… } Void main( ) {parbegin (p(1),p(2),…)} 分析过程 1、生产者和消费者必须互斥使用临界资源:缓冲区,互斥信号量个数等于临界资源数目,其初值为1。 2、生产者和消费者为同步关系:生产者和消费者共享一个有界缓冲池,生产者要检查缓冲区是否有空,若满,生产者等待,消费者检查是否为空,若不空,则可以取数据。 同步信号量empty代表空缓冲区的数量,同步信号量full代表装满产品的缓冲区数量。消费者通过full来申请消费产品的满缓冲区。 说明 1、P,V操作必须成对出现,当为互斥时,他们处于同一进程中,当为同步时,他们不一定要出现在同一进程中。 2、P操作中,每个进程应首先对自己的私用信号量提出申请,然后申请公用信号量。 3、任意一对相邻的P操作的顺序是非常重要的,当并发进程既要同步又要互斥时,必须把互斥信号量的P操作放在同步信号量的P操作之后,否则会出现死锁。 出现死锁原因的分析 1、若没有空缓冲区,执行P(empty)后,生产者被阻塞,等待消费者释放。 2、消费者进程却因生产者进程并未释放缓冲区的使用权,V(mutex)并没有执行,而无法进入缓冲区去消费产品,无法让缓冲区空闲。 3、生产者等待消费者释放空缓冲区,消费者又在等生产者让出缓冲区的使用权,出现死锁现象。 出现死锁原因的分析 1、若只有空缓冲区,执行P(full)后,消费者被阻塞,等待生产者装物品。 2、生产者进程却因消费者进程并未释放缓冲区的使用权,即p(mutex)之后,进程阻塞,v(mutex)并没有执行,而无法进入缓冲区去放产品,无法让产品装入缓冲区。 3、生产者等待消费者取物品,消费者又在等生产者往缓冲区放物品,出现死锁现象。 解决并发问题的步骤: 1、分清楚那类问题属于同步,那类问题属于互斥。 2、搞清楚同步存在于那些进程之间,互斥存在于那些进程之间。 3、互斥所涉及到的临界资源的数量。 4、设定信号量的个数和初值。 5、给出并发算法。 * 计算机操作系统 4.4 管程机制 4.4.1管程的引入 信号量机制存在下列3点不足: 1、critical section、entry section和exit section都由用户编写; 2、信号量操作原语分散在各

文档评论(0)

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

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

1亿VIP精品文档

相关文档