操作系统管程机制.ppt
《操作系统管程机制.ppt》由会员分享,可在线阅读,更多相关《操作系统管程机制.ppt(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 (1)程序易读性差程序易读性差 信信号号量量上上的的P、V操操作作是是成成对对出出现现的的,分分散散安安排排在在各各处处。要要清清楚楚了了解解某某对对P、V操操作作是是否否正正确确,至至少少要要读读懂懂相相关关的的并并发发程程序序。若若在在解解决决一一个个问问题题时时用用到到几几个个信信号号量量,正正确确安安排它们的位置、弄清它们间的关系将更复杂。排它们的位置、弄清它们间的关系将更复杂。1.引入管程的原因引入管程的原因 程序中使用信号量上的程序中使用信号量上的P、V操作有如下的几个缺点:操作有如下的几个缺点:8.4 管程机制 (2)不利于程序的修改和维护不利于程序的修改和维护 易易读读性性差
2、差,在在出出现现问问题题时时就就不不容容易易发发现现,发发现现后后修修改改起起来来就就困困难难。有有时时对对某某对对P、V操操作作的的安安排排变变动动,可可能能会会影影响整个系统的正常运行。响整个系统的正常运行。(3)正确性难以保证正确性难以保证 并并发发程程序序里里用用到到很很多多信信号号量量,它它们们间间的的关关系系错错综综复复杂杂,因因此此很很难难保保证证这这样样组组成成的的复复杂杂系系统统没没有有逻逻辑辑上上的的错错误。误。2.管程的定义管程的定义 Hansen为为管管程程下下的的定定义义是是:“一一个个管管程程(monitor)定定义义了了一一种种数数据据结结构构和和并并发发进进程程
3、在在该该数数据据结结构构上上执执行行的的一一组组操操作作,这组操作用来实现进程间的同步和改变管程中的数据这组操作用来实现进程间的同步和改变管程中的数据”。用用管管程程管管理理循循环环缓缓冲冲区区时时,要要给给出出管管程程名名称称,给给出出与与所所管管理理的的共共享享资资源源(缓缓冲冲区区)有有关关的的数数据据结结构构,给给出出在在数数据据结结构上执行的一组操作,以及数据结构的初始化代码。如图示。构上执行的一组操作,以及数据结构的初始化代码。如图示。局局部部数数据据、条条件件变变量量、一一组组操操作作都都属属于于定定义义性性质质的的,初初始化代码才是真正的管程体。始化代码才是真正的管程体。8.4
4、 管程机制 用用管管程程管管理理循循环环缓缓冲冲区区时时管管程程的的定定义义。8.4 管程机制 局部数据和条件变量局部数据和条件变量(2)条条件件变变量量是是一一种种特特殊殊变变量量,当当进进程程在在管管程程定定义义的的操操作作中中使使用用共共享享资资源源时时,若若无无法法继继续续运运行行,就就在在某某个个条条件件变变量量上上执执行行 wait()操操作作等等待待,将将管管程程让让给给等等候候在在管管程程外外的的进进程程使使用用,直直等等到到有有进进程程在在该该条条件件变量上做变量上做signal()操作才被唤醒。操作才被唤醒。(1)局局部部数数据据是是管管程程管管理理的的共共享享资资源源的的
5、数数据据结结构构,是是对对共共享享资资源源的的抽抽象。象。(3)条条件件变变量量不不是是计计数数器器,也也不不像像信信号号量量那那样样对对信信号号进进行行累累计计。若若向向有有关关条条件件变变量量发发送送信信号号(即即调调用用signal()操操作作),而而在在该该条条件件变变量量上上没没有等待的进程,那么信号就丢失。有等待的进程,那么信号就丢失。8.4 管程机制 (2)管管程程中中定定义义的的函函数数分分两两类类:外外部部函函数数是是那那些些进进程程可可从从外外部部调调用用的的函函数数,是是进进程程进进入入管管程程的的入入口口;内内部部函函数数是是只只能能由由管管程程内内的的函函数数调调用用
6、的的函函数数,进进程程不不知知道道它它们们的的存存在在,不不能调用它们。能调用它们。建立在局部数据和条件变量上的一组操作建立在局部数据和条件变量上的一组操作(1)管管程程管管理理的的数数据据结结构构只只能能由由在在管管程程内内部部定定义义的的函函数数访访问问,管程外部的函数不能作用在它们上面。管程外部的函数不能作用在它们上面。(3)管管程程犹犹如如一一堵堵“围围墙墙”,把把共共享享变变量量代代表表的的资资源源及及对对资资源源的的操操作作围围圈圈在在管管程程内内。进进程程要要使使用用共共享享资资源源,只只有有通通过过管管程程提提供供的的入入口口(即即外外部部函函数数)才才能能够够进进入入管管程程
7、。另另外外管管程程一一次只允许一个进程进入,以此保证对资源互斥地访问。次只允许一个进程进入,以此保证对资源互斥地访问。8.4 管程机制 管管程程管管理理的的共共享享资资源源在在使使用用前前需需要要初初始始化化,管管程程中中的的初初始始化化代代码码部部分分完完成成这这样样的的功功能能。由由于于前前面面两两个个部部分分给给出出的的都都是是相相关关的的定定义义,因因此此初初始始化化代代码码是是管管程程的管程体。的管程体。管程数据结构的初始化代码管程数据结构的初始化代码8.4 管程机制 右右侧侧是是组组成成管管程程的的三三个个部部分分,入入口口处处的的外外面面有有请请求求进进入入管管程程的的进进程程队
8、队列列。左左侧侧的的管管程程等等待待区区是是各各种种等等待待队队列列。管管程程内内部部针针对对不不同同的的条条件件变变量量,设设置置各各种种等等待待队队列列,以以区区分分不不同同的的等等待待原原因因。这这些些等等待待队队列列都都在在该该管管程程的的等等待区里。待区里。条件条件c1队列队列cwait(c1)条件条件cn队列队列cwait(cn)紧急队列紧急队列csignal局部数据局部数据(共享资源或数据结构共享资源或数据结构)条件变量条件变量操作操作1:操作操作k:初始化代码初始化代码请求进入请求进入管程队列管程队列入口入口退出退出管程等待区:管程等待区:管程:管程:管程的结构管程的结构8.4
9、 管程机制 在在执执行行管管程程中中定定义义的的操操作作时时,会会因因执执行行signal(ci)而而将将某某个个进进程程从从条条件件变变量量ci的的等等待待队队列列里里唤唤醒醒。由由于于这这些些被被唤唤醒醒的的进进程程已已经经在在管管程程中中执执行行了了部部分分任任务务,它它们们理理应应有有比比那那些些还还没没有有进进入入管管程程的的进进程程(即即管管程程入入口口处处请请求求进进入入的的进进程程)优优先先得得到到执执行行的的权权利利。因因此此,常常把把这这些些进进程排成程排成“紧急队列紧急队列”。条件条件c1队列队列cwait(c1)条件条件cn队列队列cwait(cn)紧急队列紧急队列cs
10、ignal局部数据局部数据(共享资源或数据结构共享资源或数据结构)条件变量条件变量操作操作1:操作操作k:初始化代码初始化代码请求进入请求进入管程队列管程队列入口入口退出退出管程等待区:管程等待区:管程:管程:8.4 管程机制 例例8-7:利用例利用例8-6管理缓冲区的管程,解决管理缓冲区的管程,解决“生产者生产者-消费者消费者”问题。问题。在在生生产产者者进进程程里里,由由函函数数produce(x)生生产产一一个个产产品品,暂暂时时放放在在变变量量x中中。然然后后调调用用管管程程提提供供的的入入口口函函数数append(x),试试图图把把x里的产品存放到缓冲区去,控制进入到管程里的产品存放
11、到缓冲区去,控制进入到管程buffer。8.4 管程机制 append(x)检检查查缓缓冲冲区区计计数数器器,在在in的的指指示示下下,把把产产品品放放到到缓缓冲冲区区指指定定位位置置。执执行行signal(empty)时时,由由于于没没有有等等待待的的消消费费者者,故故什什么么也也不不做做就就结结束束生生产产者者进进程程的的执执行行。若若在在append(x)还还未未执执行行signal(empty)时时,有有生生产产者者或或消消费费者者进进程程到到来来,那那么么这这些些进进程程只只能能在在管管程程外外的的等等待待进进入入队队列列里里排排队队,等等到到执执行行signal(empty)后后,
12、才才一一个个个地进入管程,从而保证使用管程管理资源的互斥性。个地进入管程,从而保证使用管程管理资源的互斥性。利用管程,解决利用管程,解决“生产者生产者-消费者消费者”问题。问题。8.4 管程机制 若若用用完完了了n个个缓缓冲冲区区的的位位置置。假假定定生生产产了了第第n+1个个产产品品,并并通通过过函函数数append(x)进进入入管管程程。这这时时,由由于于“count=N”成成立立,因因此此做做操操作作“wait(full)”,该该生生产产者进程就在有关者进程就在有关full的条件变量队列里等待唤醒。的条件变量队列里等待唤醒。利用管程,解决利用管程,解决“生产者生产者-消费者消费者”问题。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 管程 机制
限制150内