进程管理四经典进程同步问题研究.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文档。上传文档
查看更多
* Swait(S1, S2, …, Sn) //P原语; { while (TRUE) { if (S1 =1 S2 = 1 … Sn = 1) { //满足资源要求时的处理; for (i = 1; i = n; ++i) --Si; //注:与wait的处理不同,这里是在确信可满足 //资源要求时,才进行减1操作; break; } else { //某些资源不够时的处理; 调用进程进入第一个小于1信号量的等待队列Sj.L; 阻塞调用进程; 将调用进程的PC置为swait操作开头 } } } * Ssignal(S1, S2, …, Sn) { for (i = 1; i = n; ++i) { ++Si; //释放占用的资源; for (each process P waiting in Si.L) //检查每种资源的等待队列的所有进程; { 从等待队列Si.L中取出进程P; 进程P进入就绪队列; } } } } 需要注意: 原先处于阻塞状态的进程,被唤醒后,从何处开始执行? 与 记录型信号量机制有何不同? * 一般信号量集的几种特定情况: Swait(S, d, d)表示每次申请d个资源,当少于d个时,便不分配; Swait(S, 1, 1)表示互斥信号量; Swait(S, 1, 0)作为一个可控开关 当S=1时,允许多个进程进入临界区; 当S=0时,禁止任何进程进入临界区; 一般信号量集未必成对使用Swait和Ssignal:如:一起申请,但不一起释放; * 2. 读者-写者问题(the readers-writers problem) 问题描述 写者向数据区放数据,读者从数据区获取数据 多个读者可同时读取数据 多个写者不能同时写数据 读者和写者的控制策略变化多端 * 读者-写者问题的信号量解法 互斥关系分析 读者和写者不能同时进入共享数据区 多个写者不能同时进入共享数据区 多个读者可以同时进入共享数据区 同步关系分析 读者进入缓冲区,写者必须等待 写者进入缓冲区,读者必须等待 三种类型: 读者优先:一旦有读者进入,则后续读者均可进入 合理顺序:读者在先来的写者之后 写者优先:只要有写者等待,则后续读者必须等待 写--写互斥 读--写互斥 * 当读者进程到来时,三种情况: 1)无读者、写者:新读者可以读 2)有写者等待,但有其它读者正在读:新读者也可以读 3)有写者写:新读者等 当写者进程到来时,三种情况: 1)无读者、其他写者:新写者可以写 2)有读者:新写者等待 3)有其它写者:新写者等待 读--写互斥 读--写互斥 写--写互斥 读--写互斥 读--写互斥 写—写互斥: 互斥信号量Wmutex 怎样判断有没有读者在读? * 增加一个公共变量Readcount,表示当前有几个读者进程在读。 新来一个读者进程,Readcount加1; 撤销一个读者进程,Readcount减1; 第一个读者:阻塞所有写者进程;允许其他读者进程执行。 最后一个读者:唤醒可能的写者进程。 Readcount成为临界资源,必须互斥访问: 增加互斥信号量Rmutex * 采用信号量机制: 两种进程: Reader、Writer 两个信号量 Wmutex表示读者和写者之间互斥,初值是1。 公共变量Readcount表示“正在读”的进程数,初值是0; Rmutex表示读者对Readcount的互斥操作,初值是1。 Readcount=0时允许写 分析小结 * wait(rmutex); If readcount=0 then wait(wmutex); Readcount:=readcount+1; signal(rmutex); ……执行读取操作 wait(rmutex); Readcount:=readcount-1 if readcount=0 then signal(wmutex); signal(rmutex); 读者-写者问题 读者部分 第一个读者要阻塞所有后来的写者 最后一个读者要唤醒所有阻塞的写者 * wait(wmutex); ……执行写操作 signal(wmutex); 写者部分 * 增加限制条件,即同时读取的读者数不能超过RN L,mx:=RN,1 信号量集: Swait(S,d,t); Ssignal(S,d) S为信号量,d为需求量,t为下限值 写者: Swait(mx,1,1;L,RN,0); ……执行写操作 Ssi

文档评论(0)

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

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

1亿VIP精品文档

相关文档