操作系统管程机制课件.pptVIP

  1. 1、本文档共28页,可阅读全部内容。
  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文档。上传文档
查看更多

信号量上的P、V操作是成对出现的,分散安排在各处。(2)不利于程序的修改和维护要清楚了解某对P、V操作是否正确,至少要读懂相关的易读性差,在出现问题时就不容易发现,发现后修改并发程序。若在解决一个问题时用到几个信号量,正确安起来就困难。有时对某对P、V操作的安排变动,可能会影并发程序里用到很多信号量,它们间的关系错综复排它们的位置、弄清它们间的关系将更复杂。响整个系统的正常运行。杂,因此很难保证这样组成的复杂系统没有逻辑上的错误。

Hansen为管程下的定义是:“一个管程(monitor)定义了一种数据结构和并发进程在该数据结构上执行的一组操作,这组操作用来实现进程间的同步和改变管程中的数据”。用管程管理循环缓冲区时,要给出管程名称,给出与所管理的共享资源(缓冲区)有关的数据结构,给出在数据结构上执行的一组操作,以及数据结构的初始化代码。如图示。局部数据、条件变量、一组操作都属于定义性质的,初始化代码才是真正的管程体。

用管程管理循环缓冲区时管程的定义。

(1)局部数据是管程管理的共享资源的数据结构,是对共享资源的抽(2)条件变量是一种特殊变量,当进程在管程定义的操作中使用共享资源时,若无法继续运行,就在某个条件变量上执行wait()操作等待,将管程让给等候在管程外的进程使用,直等到有进程在该条件变量上做signal()操作才被唤醒。(3)条件变量不是计数器,也不像信号量那样对信号进行累计。若向有关条件变量发送信号(即调用signal()操作),而在该条件变量上没有等待的进程,那么信号就丢失。

(1管)程管理的数据结构只能由在管程内部定义的函数访问,(2)管程中定义的函数分两类:外部函数是那些进程可从外部调用的函数,是进程进入管程的入口;内部函数是只能由管程内的函数调用的函数,进程不知道它们的存在,不能调用它们。(3)管程犹如一堵“围墙”,把共享变量代表的资源及对资源的操作围圈在管程内。进程要使用共享资源,只有通过管程提供的入口(即外部函数)才能够进入管程。另外管程一次只允许一个进程进入,以此保证对资源互斥地访问。

管程数据结构的初始化代码管程管理的共享资源在使用前需要初始化,管程中的初始化代码部分完成这样的功能。由于前面两个部分给出的都是相关的定义,因此初始化代码是管程的管程体。

右侧是组成管程的三个部分,入口处的外面有请求进入管程的进程队列。左侧的管程等待区是各种等待队列。管程内部针对不同的条件变量,设置各种等待队列,以区分不同的等待原因。这些等待队列都在该管程的等待区里。局部数据(共享资源或数据结构)11n操作k:初始化代码退出

在执行管程中定义的操作时,会因执行signal(ci)而将某个进程从条件变量ci的等待队列里唤醒。由于这些被唤醒的进程已经在管程中执行了部分任务,它们理应有比那些还没有进入管程的进程(即管程入口处请求进入的进程)优先得到执行的权利。因此,常把这些进程排成“紧急队列”。局部数据(共享资源或数据结构)11n操作k:初始化代码退出

例8-7:利用例8-6管理缓冲区的管程,解决“生产者-消费者”问题。在生产者进程里,由函数produce(x)生产一个产品,暂时放在变量x中。然后调用管程提供的入口函数append(x),试图把x里的产品存放到缓冲区去,控制进入到管程buffer。

append(x)检查缓冲区计数器,在in的指示下,把产品放到缓冲区指定位置。执行signal(empty)时,由于没待进入队列里排队,等到执行signal(empty)后,才一个

若用完了n个缓冲区的位置。假定生产了第n+1个产品,并通过函数append(x)进入管程。这时,由于“count==N”成立,因此做操作“wait(full)”,该生产者进程就在有关full的条件变量队列里等待唤醒。

进入管程的消费者进程首先调用管程的take(x)操作,以

8.2实现互斥的方法讨论8.2.1实现互斥的硬件方法所谓“中断禁止”,是指进程以禁止中断的方法,构成临界区的进入区;以开中断的方法,构成临界区的退出区。由于禁止中断后,时钟中断和其他中断都遭封杀,就不会发生CPU进行进程切换的事情。所以,通过中断禁止的办法,完全不必担心别的进程会进入临界区。这时程序的结构如图所示。禁止中断对于操作系统来说是实现互斥的一项很有用的技术。在系统内核中,利用它来保证访问共享资源的安全是方便的。

8.2实现互斥的方法讨论和其他中断都遭封杀,就不会发生CPU进行进程切换的事情。所以,通过中断禁止的办法,完全不必担心别的进程会进入临界区。这时程序的结构如图所示。

8.2实现互斥的方法讨论2.专用机器指令

8.2实现互斥的方法讨论利用指令TSL确实能够保证临界区的互斥,其缺点是当已有进程在程图序中中通可过利指用令TTSSLL指把令变

文档评论(0)

139****0945 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档