《ch3-34管程80345865》-公开课件.ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.4 管程 3.4.1 管程和条件变量 3.4.2 霍尔方法实现管程 3.4.3 汉森方法实现管程 3.4.1 什么是管程 为什么要引入管程(问题和思路) 把分散在各进程中的临界区集中起来进行管理 ; 防止进程有意或无意的违法同步操作, 便于用高级语言来书写程序,也便于程序正确性验证。 (1974和1977,Hoare、Hansen,抽象数据类型原理) 管程定义和属性 管程的定义 管程是共享资源的数据结构及在其上操作的一组过程,或者说管程是由局部于自己的若干公共变量及其说明和所有访问这些公共变量的过程所组成的软件模块 管程的属性 ?共享性:通过调用管程的过程共享 ?安全性:局部变量只允许管程的过程访问 ?互斥性:任一时刻最多只有一个调用者能 真正进入管程 管程的基本形式 TYPE 管程名 = MONITOR 管程变量说明和条件变量说明; define (能被其他模块引用的)过程名列表; use (要引用的模块外定义的)过程名列表; procedure 过程名(形式参数表); begin 过程体; end; …… procedure 过程名(形式参数表); begin 过程体; end; begin 管程的局部数据初始化语句; end; 管程的结构 管程的示例 TYPE SSU = MONITOR var busy : boolean; nobusy : condition; define require, return; use wait, signal; procedure require; begin if busy then wait(nobusy); /*调用进程加入等待队列*/ busy := ture; end; procedure return; begin busy := false; signal(nobusy); /*从等待队列中释放进程*/ end; begin /*管程变量初始化*/ busy := false; end; 管程的条件变量 条件变量:当调用管程过程的进程无法运行时,用于阻塞进程的一种信号量 同步原语wait:当一个管程过程发现无法继续时,它在某些条件变量condition上执行wait,这个动作引起调用进程阻塞 另一个进程可以通过对其伙伴在等待的同一个条件变量condition上执行同步原语signal操作来唤醒等待进程。 条件变量与P、V操作中信号量的区别? 管程的问题讨论 使用signal释放等待进程时,可能出现两个进程同时停留在管程内。解决方法: 执行signal的进程P等待,直到被释放进程Q退出管程或等待另一个条件 被释放进程Q等待,直到执行signal的进程P退出管程或等待另一个条件 霍尔(Hoare)采用了第一种办法 汉森(Hansen)选择了两者的折衷,规定管程中的过程所执行的signal操作是过程体的最后一个操作 (受限) 管程与进程作比较 ?管程定义的是公用数据结构,而进程定义的是私有数据结构; ?管程把共享变量上的同步操作集中起来,而临界区却分散在每个进程中; ?管程是为管理共享资源而建立的,进程主要是为占有系统资源和实现系统并发性而引入的; ?管程是被欲使用共享资源的进程所调用的,管程和调用它的进程不能并行工作,而进程之间能并行工作,并发性是其固有特性; ?管程是语言或操作系统的成分,不必创建或撤销,而进程有生命周期,由创建而产生至撤销便消亡。 3.4.2管程实现:Hoare方法 霍尔方法使用P和V操作原语来实现对管程中过程的互斥调用,及实现对共享资源互斥使用的管理。 不要求signal操作是过程体的最后一个操作,且wait和signal操作可被设计成可以中断的过程。 Hoare管程数据结构(1) 1. Mutex(执行管程过程调用时互斥) 对每个管程,使用用于管程中过程互斥调用的信号量mutex(初值为1)。 进程调用管程中的任何过程时,应执行P(mutex);进程退出管程时应执行V(mutex)开放管程,以便让其他调用者进入。 为了使进程在等待资源期间,其他进程能进入管程,故在wait操作中也必须执行V(mutex),否则会妨碍其他进程进入管程,导致无法释放资源。 Hoare管程数据

文档评论(0)

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

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

1亿VIP精品文档

相关文档