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

操作系统管程机制.ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统管程机制

8.4 管程机制 8.4 管程机制 8.4 管程机制 8.4 管程机制 8.4 管程机制 8.4 管程机制 8.4 管程机制 8.4 管程机制 8.4 管程机制 8.4 管程机制 8.4 管程机制 8.4 管程机制 8.2 实现互斥的方法讨论 8.2.1 实现互斥的硬件方法 8.2 实现互斥的方法讨论 8.2 实现互斥的方法讨论 8.2 实现互斥的方法讨论 8.2 实现互斥的方法讨论 8.2 实现互斥的方法讨论 8.2 实现互斥的方法讨论 8.2 实现互斥的方法讨论 8.5 高级进程通信 8.5.1 消息缓冲通信 8.5 高级进程通信 8.5 高级进程通信 8.5 高级进程通信 8.5 高级进程通信 8.5 高级进程通信 8.5 高级进程通信 8.5.2 信箱通信 8.5 高级进程通信 操作系统 第8章并发性:互斥和同步(*) * (1) 程序易读性差 信号量上的P、V操作是成对出现的,分散安排在各处。要清楚了解某对P、V操作是否正确,至少要读懂相关的并发程序。若在解决一个问题时用到几个信号量,正确安排它们的位置、弄清它们间的关系将更复杂。 1. 引入管程的原因 程序中使用信号量上的P、V操作有如下的几个缺点: (2) 不利于程序的修改和维护 易读性差,在出现问题时就不容易发现,发现后修改起来就困难。有时对某对P、V操作的安排变动,可能会影响整个系统的正常运行。 (3) 正确性难以保证 并发程序里用到很多信号量,它们间的关系错综复杂,因此很难保证这样组成的复杂系统没有逻辑上的错误。 2.管程的定义 Hansen为管程下的定义是:“一个管程(monitor)定义了一种数据结构和并发进程在该数据结构上执行的一组操作,这组操作用来实现进程间的同步和改变管程中的数据”。 用管程管理循环缓冲区时,要给出管程名称,给出与所管理的共享资源(缓冲区)有关的数据结构,给出在数据结构上执行的一组操作,以及数据结构的初始化代码。如图示。 局部数据、条件变量、一组操作都属于定义性质的,初始化代码才是真正的管程体。 用管程管理循环缓冲区时管程的定义。 局部数据和条件变量 (2) 条件变量是一种特殊变量,当进程在管程定义的操作中使用共享资源时,若无法继续运行,就在某个条件变量上执行 wait() 操作等待,将管程让给等候在管程外的进程使用,直等到有进程在该条件变量上做signal()操作才被唤醒。 (1) 局部数据是管程管理的共享资源的数据结构,是对共享资源的抽象。 (3) 条件变量不是计数器,也不像信号量那样对信号进行累计。若向有关条件变量发送信号(即调用signal()操作),而在该条件变量上没有等待的进程,那么信号就丢失。 (2) 管程中定义的函数分两类:外部函数是那些进程可从外部调用的函数,是进程进入管程的入口;内部函数是只能由管程内的函数调用的函数,进程不知道它们的存在,不能调用它们。 建立在局部数据和条件变量上的一组操作 (1) 管程管理的数据结构只能由在管程内部定义的函数访问,管程外部的函数不能作用在它们上面。 (3)管程犹如一堵“围墙”,把共享变量代表的资源及对资源的操作围圈在管程内。进程要使用共享资源,只有通过管程提供的入口(即外部函数)才能够进入管程。另外管程一次只允许一个进程进入,以此保证对资源互斥地访问。 管程管理的共享资源在使用前需要初始化,管程中的初始化代码部分完成这样的功能。由于前面两个部分给出的都是相关的定义,因此初始化代码是管程的管程体。 管程数据结构的初始化代码 右侧是组成管程的三个部分,入口处的外面有请求进入管程的进程队列。左侧的管程等待区是各种等待队列。管程内部针对不同的条件变量,设置各种等待队列,以区分不同的等待原因。这些等待队列都在该管程的等待区里。 条件c1队列 cwait(c1) 条件cn队列 cwait(cn) 紧急队列 csignal 局部数据(共享资源或数据结构) 条件变量 操作1: 操作k: 初始化代码 请求进入 管程队列 入口 退出 管程等待区: 管程: 管程的结构 在执行管程中定义的操作时,会因执行signal(ci)而将某个进程从条件变量ci的等待队列里唤醒。由于这些被唤醒的进程已经在管程中执行了部分任务,它们理应有比那些还没有进入管程的进程(即管程入口处请求进入的进程)优先得到执行的权利。因此,常把这些进程排成“紧急队列”。 条件c1队列 cwait(c1) 条件cn队列 cwait(cn) 紧急队列 csignal 局部数据(共享资源或数据结构)

文档评论(0)

zhuliyan1314 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档