网站大量收购闲置独家精品文档,联系QQ:2885784924

操作系统3 3.pptVIP

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

第三章 进程管理 进程同步 同步的概念 定义:我们把在异步环境下的一组并发进程因直接制约,互相发送消息,并进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。 具有同步关系的一组并发进程称为合作进程;合作进程间互相发送的信号称为消息或事件。 进程同步 例:计算进程和打印进程公用同一缓冲区Buf。 PC(计算) PP(打印) A:local Bufˊ B:local Pri Repeat Repeat Bufˊ Buf Pri Buf Until Bufˊ=空 计算 Until Pri ≠ 空 得到计算结果 打印Buf中数据 Buf 计算结果 清除Buf中数据 Goto A Goto B 进程同步 问题:浪费CPU时间。 采用消息的方法实现直接制约(同步): ①设过程Wait(过程名)表示进程等待合作进程发来消息。 过程signal(消息名)表示向合作进程发送消息。 ②设消息名Bufempty表示Buf空,设消息名Buffull表示Buf满(装满数据)。 ③初始化:Bufempty=true,Buffull=false 进程同步 Pc Pp A:wait(Bufempty) B:wait(Buffull) 计算 打印Buf中的数据 Buf 计算结果 清除Buf中的数据 Bufempty false Buffull false Signal(Buffull) signal(Bufempty) Goto A Goto B 进程同步 私用(有)信号量 把各进程间发送的消息作为信号量看待,这种信号量只与制约进程和被制约进程有关,但不与整组并发进程有关,这种信号量称为私用信号量(Private Semaphore)。 与私用信号量相对应,我们称进程互斥时使用的信号量为公用信号量。 进程同步 用P、V原语操作实现进程的直接制约(同步) 例子:设进程和通过缓冲区队列传送数据(如图3.14), PA为发送进程,PB为接收进程;PA发送数据时调用发送过程deposit(data),PB接收数据时调用过程remove(data)。且数据的发送与接收过程满足如下条件: 1)在PA至少送一块数据入一个缓冲区之前,PB不可能从缓冲区中取出数据(假定数据块长等于缓冲区长度)。 进程同步 2)PA往缓冲队列发送数据时,至少有一个缓冲区是空的; 3)由PA发送的数据块在缓冲队列中按先进先出(FIFO)方式排列。 PA Buff1 buff2 buff3 …. Buffn PB 进程同步 我们按如下三步描述过程deposit(data)和 remove (data) 1)设Buf-empty为进程PA的私用信号量,表示缓冲区是否有空;Buf-full为进程PB的私用信号量,表示缓冲区是否有数可取; 2)Buf-empty的初始值为n (n为缓冲队列的缓冲区个数),Buf-full的初始值为0; 进程同步 3) 算法描述如下: PA: deposit(data) Begin local x; P(Buf-empty); 按FIFO方式选择一个空缓冲区Buf(x); Buf(x) data; Buf(x)置满标记; V(Buf-full); End. 进程同步 PB: remove(data) Begin local x; P(Buf-full); 按FIFO方式选择一个装满数据的缓冲区Buf(x); data Buf(x); Buf(x)置空标记; V(Buf-empty); End. 进程同步

文档评论(0)

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

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

版权声明书
用户编号:5132241303000003

1亿VIP精品文档

相关文档