操作系统管程机制.ppt

上传人:b****3 文档编号:2739069 上传时间:2022-11-10 格式:PPT 页数:28 大小:829KB
下载 相关 举报
操作系统管程机制.ppt_第1页
第1页 / 共28页
操作系统管程机制.ppt_第2页
第2页 / 共28页
操作系统管程机制.ppt_第3页
第3页 / 共28页
操作系统管程机制.ppt_第4页
第4页 / 共28页
操作系统管程机制.ppt_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

操作系统管程机制.ppt

《操作系统管程机制.ppt》由会员分享,可在线阅读,更多相关《操作系统管程机制.ppt(28页珍藏版)》请在冰豆网上搜索。

操作系统管程机制.ppt

(1)程序易读性差程序易读性差信信号号量量上上的的P、V操操作作是是成成对对出出现现的的,分分散散安安排排在在各各处处。

要要清清楚楚了了解解某某对对P、V操操作作是是否否正正确确,至至少少要要读读懂懂相相关关的的并并发发程程序序。

若若在在解解决决一一个个问问题题时时用用到到几几个个信信号号量量,正正确确安安排它们的位置、弄清它们间的关系将更复杂。

排它们的位置、弄清它们间的关系将更复杂。

1.引入管程的原因引入管程的原因程序中使用信号量上的程序中使用信号量上的P、V操作有如下的几个缺点:

操作有如下的几个缺点:

8.4管程机制

(2)不利于程序的修改和维护不利于程序的修改和维护易易读读性性差差,在在出出现现问问题题时时就就不不容容易易发发现现,发发现现后后修修改改起起来来就就困困难难。

有有时时对对某某对对P、V操操作作的的安安排排变变动动,可可能能会会影影响整个系统的正常运行。

响整个系统的正常运行。

(3)正确性难以保证正确性难以保证并并发发程程序序里里用用到到很很多多信信号号量量,它它们们间间的的关关系系错错综综复复杂杂,因因此此很很难难保保证证这这样样组组成成的的复复杂杂系系统统没没有有逻逻辑辑上上的的错错误。

误。

2.管程的定义管程的定义Hansen为为管管程程下下的的定定义义是是:

“一一个个管管程程(monitor)定定义义了了一一种种数数据据结结构构和和并并发发进进程程在在该该数数据据结结构构上上执执行行的的一一组组操操作作,这组操作用来实现进程间的同步和改变管程中的数据这组操作用来实现进程间的同步和改变管程中的数据”。

用用管管程程管管理理循循环环缓缓冲冲区区时时,要要给给出出管管程程名名称称,给给出出与与所所管管理理的的共共享享资资源源(缓缓冲冲区区)有有关关的的数数据据结结构构,给给出出在在数数据据结结构上执行的一组操作,以及数据结构的初始化代码。

如图示。

构上执行的一组操作,以及数据结构的初始化代码。

如图示。

局局部部数数据据、条条件件变变量量、一一组组操操作作都都属属于于定定义义性性质质的的,初初始化代码才是真正的管程体。

始化代码才是真正的管程体。

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

8.4管程机制局部数据和条件变量局部数据和条件变量

(2)条条件件变变量量是是一一种种特特殊殊变变量量,当当进进程程在在管管程程定定义义的的操操作作中中使使用用共共享享资资源源时时,若若无无法法继继续续运运行行,就就在在某某个个条条件件变变量量上上执执行行wait()操操作作等等待待,将将管管程程让让给给等等候候在在管管程程外外的的进进程程使使用用,直直等等到到有有进进程程在在该该条条件件变量上做变量上做signal()操作才被唤醒。

操作才被唤醒。

(1)局局部部数数据据是是管管程程管管理理的的共共享享资资源源的的数数据据结结构构,是是对对共共享享资资源源的的抽抽象。

象。

(3)条条件件变变量量不不是是计计数数器器,也也不不像像信信号号量量那那样样对对信信号号进进行行累累计计。

若若向向有有关关条条件件变变量量发发送送信信号号(即即调调用用signal()操操作作),而而在在该该条条件件变变量量上上没没有等待的进程,那么信号就丢失。

有等待的进程,那么信号就丢失。

8.4管程机制

(2)管管程程中中定定义义的的函函数数分分两两类类:

外外部部函函数数是是那那些些进进程程可可从从外外部部调调用用的的函函数数,是是进进程程进进入入管管程程的的入入口口;内内部部函函数数是是只只能能由由管管程程内内的的函函数数调调用用的的函函数数,进进程程不不知知道道它它们们的的存存在在,不不能调用它们。

能调用它们。

建立在局部数据和条件变量上的一组操作建立在局部数据和条件变量上的一组操作

(1)管管程程管管理理的的数数据据结结构构只只能能由由在在管管程程内内部部定定义义的的函函数数访访问问,管程外部的函数不能作用在它们上面。

管程外部的函数不能作用在它们上面。

(3)管管程程犹犹如如一一堵堵“围围墙墙”,把把共共享享变变量量代代表表的的资资源源及及对对资资源源的的操操作作围围圈圈在在管管程程内内。

进进程程要要使使用用共共享享资资源源,只只有有通通过过管管程程提提供供的的入入口口(即即外外部部函函数数)才才能能够够进进入入管管程程。

另另外外管管程程一一次只允许一个进程进入,以此保证对资源互斥地访问。

次只允许一个进程进入,以此保证对资源互斥地访问。

8.4管程机制管管程程管管理理的的共共享享资资源源在在使使用用前前需需要要初初始始化化,管管程程中中的的初初始始化化代代码码部部分分完完成成这这样样的的功功能能。

由由于于前前面面两两个个部部分分给给出出的的都都是是相相关关的的定定义义,因因此此初初始始化化代代码码是是管管程程的管程体。

的管程体。

管程数据结构的初始化代码管程数据结构的初始化代码8.4管程机制右右侧侧是是组组成成管管程程的的三三个个部部分分,入入口口处处的的外外面面有有请请求求进进入入管管程程的的进进程程队队列列。

左左侧侧的的管管程程等等待待区区是是各各种种等等待待队队列列。

管管程程内内部部针针对对不不同同的的条条件件变变量量,设设置置各各种种等等待待队队列列,以以区区分分不不同同的的等等待待原原因因。

这这些些等等待待队队列列都都在在该该管管程程的的等等待区里。

待区里。

条件条件c1队列队列cwait(c1)条件条件cn队列队列cwait(cn)紧急队列紧急队列csignal局部数据局部数据(共享资源或数据结构共享资源或数据结构)条件变量条件变量操作操作1:

操作操作k:

初始化代码初始化代码请求进入请求进入管程队列管程队列入口入口退出退出管程等待区:

管程等待区:

管程:

管程:

管程的结构管程的结构8.4管程机制在在执执行行管管程程中中定定义义的的操操作作时时,会会因因执执行行signal(ci)而而将将某某个个进进程程从从条条件件变变量量ci的的等等待待队队列列里里唤唤醒醒。

由由于于这这些些被被唤唤醒醒的的进进程程已已经经在在管管程程中中执执行行了了部部分分任任务务,它它们们理理应应有有比比那那些些还还没没有有进进入入管管程程的的进进程程(即即管管程程入入口口处处请请求求进进入入的的进进程程)优优先先得得到到执执行行的的权权利利。

因因此此,常常把把这这些些进进程排成程排成“紧急队列紧急队列”。

条件条件c1队列队列cwait(c1)条件条件cn队列队列cwait(cn)紧急队列紧急队列csignal局部数据局部数据(共享资源或数据结构共享资源或数据结构)条件变量条件变量操作操作1:

操作操作k:

初始化代码初始化代码请求进入请求进入管程队列管程队列入口入口退出退出管程等待区:

管程等待区:

管程:

管程:

8.4管程机制例例8-7:

利用例利用例8-6管理缓冲区的管程,解决管理缓冲区的管程,解决“生产者生产者-消费者消费者”问题。

问题。

在在生生产产者者进进程程里里,由由函函数数produce(x)生生产产一一个个产产品品,暂暂时时放放在在变变量量x中中。

然然后后调调用用管管程程提提供供的的入入口口函函数数append(x),试试图图把把x里的产品存放到缓冲区去,控制进入到管程里的产品存放到缓冲区去,控制进入到管程buffer。

8.4管程机制append(x)检检查查缓缓冲冲区区计计数数器器,在在in的的指指示示下下,把把产产品品放放到到缓缓冲冲区区指指定定位位置置。

执执行行signal(empty)时时,由由于于没没有有等等待待的的消消费费者者,故故什什么么也也不不做做就就结结束束生生产产者者进进程程的的执执行行。

若若在在append(x)还还未未执执行行signal(empty)时时,有有生生产产者者或或消消费费者者进进程程到到来来,那那么么这这些些进进程程只只能能在在管管程程外外的的等等待待进进入入队队列列里里排排队队,等等到到执执行行signal(empty)后后,才才一一个个个地进入管程,从而保证使用管程管理资源的互斥性。

个地进入管程,从而保证使用管程管理资源的互斥性。

利用管程,解决利用管程,解决“生产者生产者-消费者消费者”问题。

问题。

8.4管程机制若若用用完完了了n个个缓缓冲冲区区的的位位置置。

假假定定生生产产了了第第n+1个个产产品品,并并通通过过函函数数append(x)进进入入管管程程。

这这时时,由由于于“count=N”成成立立,因因此此做做操操作作“wait(full)”,该该生生产产者进程就在有关者进程就在有关full的条件变量队列里等待唤醒。

的条件变量队列里等待唤醒。

利用管程,解决利用管程,解决“生产者生产者-消费者消费者”问题。

问题。

8.4管程机制进入管程的消费者进程首先调用管程的进入管程的消费者进程首先调用管程的take(x)操作,以操作,以便从缓冲区里取出产品。

便从缓冲区里取出产品。

8.4管程机制8.2.1实现互斥的硬件方法1.中断禁止中断禁止所所谓谓“中中断断禁禁止止”,是是指指进进程程以以禁禁止止中中断断的的方方法法,构构成成临界区的进入区;以开中断的方法,构成临界区的退出区。

临界区的进入区;以开中断的方法,构成临界区的退出区。

8.2实现互斥的方法讨论由由于于禁禁止止中中断断后后,时时钟钟中中断断和和其其他他中中断断都都遭遭封封杀杀,就就不不会会发发生生CPU进进行行进进程程切切换换的的事事情情。

所所以以,通通过过中中断断禁禁止止的的办办法法,完完全全不必担心别的进程会进入临界区。

这时程序的结构如图所示。

不必担心别的进程会进入临界区。

这时程序的结构如图所示。

禁禁止止中中断断对对于于操操作作系系统统来来说说是是实实现现互互斥斥的的一一项项很很有有用用的的技技术术。

在系统内核中,利用它来保证访问共享资源的安全是方便的。

在系统内核中,利用它来保证访问共享资源的安全是方便的。

由由于于禁禁止止中中断断后后,时时钟钟中中断断和和其其他他中中断断都都遭遭封封杀杀,就就不不会会发发生生CPU进进行行进进程程切切换换的的事事情情。

所所以以,通通过过中中断断禁禁止止的的办办法法,完完全全不不必必担担心心别别的的进进程程会会进进入入临临界界区区。

这时程序的结构如图所示。

这时程序的结构如图所示。

8.2实现互斥的方法讨论一一些些计计算算机机中中有有专专门门指指令令,功功能能是是将将内内存存单单元元的的内内容容读读到到寄寄存存器器中中,然然后后往往该该单单元元里里写写入入一一个个非非零零值值,且且读读和和写写操操作作是是不不可可分分割割(即即在在一一个个指指令令周周期期内内完完成成)。

这这种种指指令令称称为为“测测试试并并上上锁锁(TSL)”。

格式是:

格式是:

TSLR,x8.2实现互斥的方法讨论2.专用机器指令专用机器指令程程序序中中可可利利用用TSL指指令令形形成成临临界界区区的的进进入入区区,确确保保进进程程临临界界区区间间的的执行是互斥的。

如图所示是汇编语言程序中指令执行是互斥的。

如图所示是汇编语言程序中指令TSL的具体安排。

的具体安排。

图图中中通通过过指指令令TSL把把变变量量x里里当当前前值值读读入入寄寄存存器器R,同同时时把把变变量量x设置为设置为1。

这样,寄存器。

这样,寄存器R里保存的是变量里保存的是变量x的原值,的原值,x的新值为的新值为1。

8.2实现互斥的方法讨论指令:

CMPR,#1JNEenter_section用于测试到变量x的原先值为1时,表明已有进程在其临界区里,别的进程就不能进入;只有在测试到变量x的原先值为0时,请求加入临界区的进程才能够进入它的临界区。

也就是说,变量x起到一把“锁”的作用。

由由指指令令MOVEx,#0完完成成退退出出临临界界区区的的功功能能,即即把把变变量量x设设置置为为0。

只有把只有把“锁锁”x打开了,别的进程才可有机会进入自己的临界区。

打开了,别的进程才可有机会进入自己的临界区。

利利用用指指令令TSL确确实实能能够够保保证证临临界界区区的的互互斥斥,其其缺缺点点是是当当已已有有进进程程在在临临界界区区

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1