操作系统进程管理OS21.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文档。上传文档
查看更多
2.3.4 管程机制 系统中的各种硬件资源和软件资源,均可用数据结构抽象地描述其资源特性,即用少量信息和对该资源所执行的操作来表征该资源,而忽略了它们的内部结构和实现细节。如: 对一台电传机,可用与分配该资源有关的状态信息和对它执行请求与释放的操作,以及等待该资源的进程对列来描述。 一个FIFO队列,可用其队长、队首和队尾以及在该队列上执行的一组操作来描述。 管程的定义 管程(Mointors):一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。 管程的优点 管程可增强模块的独立性:系统按资源管理的观点分解成若干模块,用数据表示抽象系统资源,同时分析了共享资源和专用资源在管理上的差别,按不同的管理方式定义模块的类型和结构,使同步操作相对集中,从而增加了模块的相对独立性; 引入管程可提高代码的可读性,便于修改和维护; 正确性易于保证:采用集中式同步机制。一个操作系统或并发程序由若干个这样的模块所构成,一个模块通常较短,模块之间关系清晰 管程的主要特性 模块化:一个管程是一个基本程序单位,可以单独编译; 抽象数据类型:管程是一种特殊的数据类型,其中不仅有数据,而且有对数据进行操作的代码 信息封装:管程是半透明的,管程中的外部过程(函数)实现了某些功能,至于这些功能是怎样实现的,在其外部则是不可见的; 管程与进程的区别 进程定义的是私有数据结构PCB,管程定义的是公共数据结构; 都有对各自数据结构的操作。进程的操作由对应的代码段决定,管程的操作主要是同步操作和初始化操作; 设置进程的目的是为了实现并发,管程的目的是解决临界资源的互斥使用; 进程通过调用管程中的过程对共享数据结构实行操作。这种情况下,管程为被动工作方式,进程是主动工作方式; 进程之间能并发执行,而管程则不能与其调用者并发; 进程具有动态性,管程则是操作系统中的一个资源管理模块,供进程调用; 管程的实现要素 管程中的共享变量在管程外部是不可见的,外部只能通过调用管程中所说明的外部过程(函数)来间接地访问管程中的共享变量; 为了保证管程共享变量的数据完整性,规定管程互斥进入; 管程通常是用来管理资源的,因而在管程中应当设有进程等待队列以及相应的等待及唤醒操作; 管程的访问控制 管程定义的语法格式 TYPE monitor_name = MONITOR; 共享变量说明 define 本管程内所定义、本管程外可调用的过程(函数)名字表 use 本管程外所定义、本管程内将调用的过程(函数)名字表 PROCEDURE 过程名(形参表); 过程局部变量说明; BEGIN 语句序列;END; ...... FUNCTION 函数名(形参表):值类型; 函数局部变量说明; BEGIN 语句序列; END; ...... BEGIN 共享变量初始化语句序列; END; 管程关于进程同步互斥的保证 管程的设计: 必须设置同步工具,如操作原语wait和signal,来保证对临界资源的正确访问; 引入条件变量 解决进程调用管程过程中被阻塞或挂起时,释放管程的相关控制; 通常,进程被挂起或阻塞的原因可能有多个,为了区别它们,需设置多个条件变量condition。 对条件变量的操作仅仅是wait和signal,因此条件变量也是一种抽象数据类型,每个条件变量保存了一个链表,用于记录因该条件变量而阻塞的所有进程。同时提供的两个操作即可表示为x.wait和x.signal。 x.wait的作用是:正在调用管程的进程因x条件需要被阻塞或挂起,则调用x.wait将自己插入到x条件的等待对列上,并释放管程,直到x条件变化。此时其它进程可以使用该管程。 x.signal的作用是:正在调用管程的进程发现x条件发生了变化,则调用x.signal重新启动一个因x条件而被阻塞或挂起的进程。如果存在多个这样的进程,则选择其中的一个,但如果没有被阻塞的进程,则x.signal操作不产生任何后果。如果有进程Q因x条件处于阻塞状态,当进程P执行了x.signal操作后,进程Q被重新启动,此时两个进程P和Q,怎样决定哪个进程执行,哪个等待,可采用下述两种方式之一: (1) P等待,直至Q离开管程或等待另一条件; (2) Q等待,直至P离开管程或等待另一条件。 利用管程解决生产者—消费者问题 管程的定义: 生产者-消费者管程设计要领 Var mutex,empty,full: semaphore :=1,n,0; buffer: array [0,…,n-1] of item; in,out: integer:=0,0; begin par

文档评论(0)

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

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

1亿VIP精品文档

相关文档