4-进程通信.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4-进程通信

第四章 进程通信 4.1 进程的同步与互斥 4.1.2 临界段问题 在一段时间内只能允许一个进程访问的资源称为临界资源,如打印机、磁带机、光盘刻写机、绘图仪等 进程执行的访问临界资源的程序段称为临界段或互斥段。 统计两个进程 P1和P2对共享变量count访问计数: P1: : P2: : R1=count (0) R2=count(1) R1=R1+1 R2=R2+1 count=R1 (1) count=R2 (2) : : 结果:count=2 两个进程可能的相对执行次序 P1:R1=count (0) R1=R1+1 (1) P2:R2=count (0) R2=R2+1 (1) count=R2 (1) P1:count=R1 (1) 虽然P1和P2进程各自都执行了对count加1的操作段,但结果count只增加1。 因此,变量count就是临界资源,P1、P2访问count的两个程序段就是临界段,诸进程必须互斥地进入临界段。 4.2 进程间互斥控制方法 当进程希望进入临界段时,首先要测试锁的状态,如锁是打开的,表示无进程处于临界段,那么可以关闭该锁,并进入临界段。 当该进程处于临界段时,其他试图进入临界段的进程由于在测试锁的状态时发现它处于关闭状态,就只能在临界段外等待。 用锁操作控制进程对临界段的互斥执行 4.2.2 锁的安全控制 锁的关闭操作LOCK包括测试和关闭两个操作步骤,这两个操作步骤涉及临界资源x,故这段程序也是临界段。 假定锁是打开的,当一个进程P1在测试锁的状态后,还没来得及关闭它的一瞬间,发生了中断; 中断返回时,系统可能调度另一个进程P2执行。P2执行时也对该锁的状态进行测试,发觉它处于打开状态,于是关闭该锁,并进入临界段。那么两个进程就同时处于一个临界段之中。 1. 测试并设置指令testset 有些计算机提供专门的锁操作指令testset,该指令首先测试锁变量的值,如为1,则重复执行本指令;如为0,则立即将锁变量的值置为1。 由于testset是一条完整的指令,而在一条指令的执行中间是不会被中断的,故保证了锁的测试和关闭操作的连续性。 3. 开、关中断法 1)这种方法只能用于单CPU系统。 2)如果临界段操作比较复杂,执行时间较长,那么长时间地关闭中断会降低系统对外部中断响应的速度,影响系统处理紧迫事件的能力; 3)采用开、关中断的硬件锁方法禁止了其他无关的进程进入不同的临界段,这种做法显然伤害了很多的“无辜者”。 4. 用硬件锁锁软件锁,用软件锁锁临界段 软件锁的LOCK操作包括测试和关闭两个操作步骤,它本身也是一种临界段,故可以用硬件锁——开、关中断保证软件锁操作的完整性。 由于软件锁是一种程序长度最短的临界段,故用开、关中断的方法保证锁操作的完整性几乎不会影响到系统响应其他的中断请求。 用软件锁保证临界段执行的独占性,不会影响到其他无关进程进入不同的临界段,这是一种安全而高效的锁。 4.3 信号灯和semWait、semSignal操作 信号灯定义成具有整型值,并能对其施加以下三种操作的变量,除了这三种操作之外的任何操作都不能测试和处理信号灯的值。 (1)初始化操作,信号灯能初始化为非负的值。 (2)semWait操作,能减小信号灯的值,如结果值为负,执行semWait操作的进程就被封锁。 (3)semSignal操作,能增加信号灯的值,如果结果值非正,那么原先因执行semWait操作而阻塞的进程被解除阻塞。 semWait、semSignal操作两个原语定义 typedef struct semaphore { int value ; Queue queue; } Semaphore ; Semaphore s; 4.4 信号灯的应用 4.4.1 利用信号灯实现互斥 信号灯的所有可能取值及意义为: s = 1 无进程进入临界段 0 有一进程进入临界段 -1 有一进程进入临界段, 另一进程被阻塞 如有n个并发进程涉及一个临界段,则上式最后一行s的取值为i, -(n-1) ≤i≤-1,表示当前有|i|个进程被阻塞。 4.4.2 阻塞∕唤醒协议 从图中可以看出,当进程a执行到L1点时,如进程b还未执行到L2点,也即func2函数的计算还未完成,进程a就要同步等待进程b。 而进程b则不必同步等待进程a,所以说这种同步是非对称的,或可以称为“半同步”。 4.4.3 两个进程间的同步 1. 一个全同步的例子 为了实现

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档