操作系统 第三章.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文档。上传文档
查看更多
* monitor ringbuffer; var rbuffer:array [0.. n-1] of item; k ,nextempty,nextfull:integer; empty,full:condition; procedure entry put (var product:item); begin if k=n then wait(empty); rbuffer[nextempty]:=product; k:=k+1; nextempty:=(nextempty+1) mod(n); signal(full); end; procedure entry get(var goods:item); begin if k =0 then wait(full); goods:=rbuffer[nextfull]; k:=k-1; nextfull:=(nextfull+1) mod(n); signal(empty); end; begin k := 0; nextempty:=0;nextfull:=0; end; producer: begin repeat produce an item ; ringbuffer.put(item); until false; end consumer: begin repeat ringbuffer.get(item); consume the item; until false end * 每个管程必须提供一个信号量mutex,初值为1。 一个进程在进入管程之前必须执行P(mutex)操作,而在退出管程后必须执行V(mutex)操作。 执行管程内部的条件语句应建立相应的条件变量及其signal和wait操作。由于一个执行signal操作的进程必须等待,直至被恢复的进程要么离开管程,要么再次等待,于是,又需要引入另一个信号量next,并置初值为0,以便让执行signal操作的进程在此信号量上等待,还要提供一个整型变量next_count,用以记录在next上等待的进程个数,于是,编译对每一个外部过程F作如下处理: P(mutex); …. Body of F; …. IF next_count0 THEN V(next) ELSE V(mutex); * 当执行signal的进程先于执行wait的进程时,则执行完wait不用退出管程,只需释放配对的signal进程即可,所以绕过了V(mutex)。 当wait先于signal执行时,则执行完wait便退出管程。 而signal的执行进程在结束时,只是等待管程外的出口V(next)来释放它,而不必再执行V(mutex),因为由wait先前执行过了。 在执行出口代码之前的x_count:=x_count+1操作可以保证是互斥操作的, 在p(x_sem)之后的x_count:=x_xount-1也可以保证是互斥的,因为,当释放了p(x_sem)之后,如果signal执行时,执行了p(next)阻塞了自己,则管程使用权又属于执行了wait操作的程序所有,因为执行了signal的这个程序已经由于执行了p(next)而被阻塞在next信号量的等待队列上。 第一次执行signal时,如果没有wait在先,这个signal是空操作,忽略不计。 只要执行了wait之后在还没有到P(x_sem)之前,所有在此之后的signal都会阻塞在P(next)上。 第一个wait,释放管程;第一个signal为空操作; * 在管程中只允许一个活动进程。Wait和signal一定要配对使用,而且wait要先于signal使用。 执行Wait,但还没有执行过Signal,则由V(mutex)退出临界区,然后在临界区之外执行P(x_sem),等待Signal释放。 执行Signal,但还没有执行过Wait,则为空操作; 引入信号量x_sem,和整型变量x_count,初值为0 mutex=1 * Test的作用:申请两只筷子。当测试两边筷子为空时(即非吃状态),置自身为“吃”状态,即:拿起筷子。 * 其他概念: 中断/陷阱/异常 管态/目态 广义指令/特权指令/引导程序 内核/微内核/整体内核 现代操作系统的特征 操作系统的吞吐量/周转时间/可移植性/可靠性/安全性 穿山洞例子:有个山洞对面有洞口可以穿出,两面都可以穿入穿出,但是每次仅允许一个人出入。描述这个过程,用P/V操作控制约束过程。 Mutex=1 Cobegin Left:

文档评论(0)

锦绣中华 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档