[操作系统]管程.ppt
《[操作系统]管程.ppt》由会员分享,可在线阅读,更多相关《[操作系统]管程.ppt(29页珍藏版)》请在优知文库上搜索。
1、管程(monitor)参看参看P51P51OS设计中引入了信号量以后,互斥实现起来似乎很容易,果真是这样吗?答案是否定的!在生产者消费者问题中,曾提到:wait(mutex)、wait(empty)两个语句不能对调,否则系统死锁。说明系统的编制人员使用信号量时要特别小心。很小的错误将产生极大的麻烦。因为出现的错误与资源竞争、死锁、不可预测、不可再现有关。1、问题提出 用信号量机制编制并发程序,对共享变量、信号量的操作(同步、互斥)被分散在各个进程中。缺点:易读性差易读性差:因为要了解对一组变量及信号量的操作,需要读懂全部并发的程序。难以修改和维护难以修改和维护:对一组变量和代码的修改,必须对使
2、用它的全部程序进行修改(因为同步、互斥分散在所有相关并发程序中。正确性难以保证正确性难以保证:OS通常很复杂,同步、互斥过于分散,很难保证逻辑上的正确性。 既然分散的同步操作有缺点,人们就想到把同步机制集中到一个模块中,这就是早期(1971)的秘书进程秘书进程思想。Dijkstra(1971):提出“秘书”进程的思想。Hansen和Hoare(1973):推广为“管程”。管程基本思想: 把把信号量信号量及其操作原语操作原语封装在一个对象内部一个对象内部。(将共享变量以及对共享变量能够进行的所有操作集中在一个模块中)。 每次只允许一个进程访问管程内的资源。进程1请求使用共享资源进程2请求使用共享
3、资源进程n请求使用共享资源资源资源互斥R/W秘秘书书进进程程结论:结论: 用信号量实现的互斥机制,其正确性依赖于用户进程(程序员编写的程序):如果用户进程在进入临界区之前没有用 Wait(mutex)申请,或退出临界区时没有用 Signal(mutex)释放临界区,互斥就不能正确的实现。 OS的工作者设计了一种靠语言编译器实现互斥正确性的机制-管程机制。管程是编程的构件。 管程机制确保一次只有一个进程在管程内活动,程序员不需要显式地用信号量机制编写实现互斥的代码。2. 管程的引入 管程:一种同步机制,是编程的构件。 管程定义:X状态:busy 忙、free 闲一组操作: request(X)申
4、请、release(X) 释放 。 封装在一个管程中封装在一个管程中管程外某进程申请/释放资源时,调用request(X)或release(X) 即可,同步与互斥由管程完成。 管程是关于共享资源的数据结构及一组针对该资源的操作过程所构成的软件模块。使互斥操作相对集中,从而增加了模块的相对独立性。 数据结构是资源的抽象描述例如:对于某临界资源用共享变量X表示例如:对于进程阻塞队列(临界资源)用变量bq表示数据结构: 队首指针、队尾指针、队列长度一组操作: insertF(bq)、 insertL(bq)、 remove(bq)、 insert (bq)等执行的进程等待事件时 Block(bq)调
5、用insert(bq)进入 阻塞 队 列阻塞队列是一个临界资源,为各进程所共享,阻塞进队、唤醒出队要互斥进行。在使用管程后,进队由block(bq)调用管程中的insert(bq)过程,就可进入阻塞队列, block(bq)设计者无须再考虑互斥、同步问题。封装在管程中3、管程的结构和特性 抽象数据类型:管程中不仅有数据,而且有对数据进行操作的代码。 模块化:一个管程是一个基本程序单位,可以单独编译; 信息封装:管程是半透明的,管程中的内部过程(函数)实现了某些功能,至于这些功能是怎样实现的,在其外部则是不可见的。Type 管程名=monitor变量说明: Procedure entry p1(
6、参数)begin en Procedure entry pn(参数)begin endbegin 变量初始化 end管程有四部分组成 名称:为每个共享资源设立一个管程 数据结构说明:一组局部管程的控制变量 操作原语: 对控制变量和临界资源进行操作 的一组原语,是访问该管程的唯一途径。这些原语本身是互斥的,任一时刻只允许一个进程去调用,其余需要访问的进程就等待。 初始化代码:对控制变量进行初始化的代码教材中称之过程教材中称之过程1)局部数据(共享变量)在管程外不可见,只能通过管程内部的过程访问。2)管程要互斥进入,其中只能有一个活动的进程。当活动的进程 退出管程,或阻塞阻塞才允许下一个进程进入管
7、程。当一个进程试图进入一个被占用的管程时,在入口出等待。过程n 过程1初始化程序条件变量局部数据管理部分c1.wait条件条件c1队列队列c1.signalcn.wait条件条件cn队列队列紧急队列紧急队列进入队列入口等待队入口等待队列列队列部分退出过程n 过程1初始化程序条件变量局部数据管理部分c1.wait条件条件c1队列队列c1.signalcn.wait条件条件cn队列队列紧急队列紧急队列进入队列入口等待入口等待队列队列队列部分3)管程是管理资源的(资源用共享数据抽象表示),因此,管程内部有进程等待(阻塞)队列,以及等待与唤醒操作,这种队列称之:条件队列。4)管程是一个编程单位,相应的
8、编译器能识别,入口处互斥进入代码和出口退出代码由编译器自动产生。4、条件变量引入过程n 过程1初始化程序条件变量局部数据管理部分c1.wait条件条件c1队列队列c1.signalcn.wait条件条件cn队列队列紧急队列紧急队列进入队列入口等入口等待队列待队列队列部分 当进入管程的进程因资源被占用等原因不能继续运行时,使其等待。(让出让出CPU称之释放管程互斥权)。 为此在管程内部可以说明和使用一种特殊类型的变量:条件变量。 每个条件变量表示一种等待原因,并不取具体数值。每个原因对应一个等待队列。例如,X代表某临界资源,变量busy表示X的状态:忙、或闲。定义一个条件变量nonbusy(等待
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 管程