Chinaunix首页 | 论坛 | 博客
  • 博客访问: 532409
  • 博文数量: 150
  • 博客积分: 5010
  • 博客等级: 大校
  • 技术积分: 1861
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-17 00:19
文章分类

全部博文(150)

文章存档

2011年(1)

2009年(14)

2008年(135)

我的朋友

分类: 项目管理

2008-04-05 21:42:08

1. 管程的提出
采用P-V同步机制来编写并发程序,对于共享变量及信号量变量的操作将被分散于各个进程中
  缺点:
 (1)易读性差,因为要了解对于一组共享变量及信号量的操作是否正确,则必须通读整个系统或者并发程序
 (2)不利于修改和维护,因为程序的局部性很差,所以任一组变量或一段代码的修改都可能影响全局
 (3)正确性难以保证,因为操作系统或并发程序通常很大,要保证这样一个复杂的系统没有逻辑错误是很难的
2.管程概念

概念:指关于共享资源的数据及在其上操作的一组过程或共享数据结构及其规定的所有操作。
系统按资源管理的观点分解成若干模块,用数据表示抽象系统资源,同时分析了共享资源和专用资源在管理上的差别,按不同的管理方式定义模块的类型和结构,使同步操作相对集中,从而增加了模块的相对

3.管程的组成
管程的四个组成部分:
名称
数据结构说明
对该数据结构进行操作的一组过程/函数
初始化语句
     局部于管程的数据结构,仅被局部于管程的过程访问。局部于管程的过程,也仅能访问管程内的数据结构。
     管程(相当于围墙)把共享变量和对它进行操作的若干过程围起来。

管程:一种同步机制
     系统按资源管理的观点分解成若干模块,用数据表示抽象系统资源,同时分析了共享资源和专用资源在管理上的差别,按不同的管理方式定义模块的类型和结构,使同步操作相对集中,从而增加了模块的相对独立性

=============
管程的形式
TYPE monitor_name = MONITOR;
共享变量说明
define 本管程内所定义、本管程外可调用的过程(函数)名字表
use    本管程外所定义、本管程内将调用的过程(函数)名字表

PROCEDURE 过程名(形参表);
    过程局部变量说明;
    BEGIN
        语句序列;
    END;
......
=================

4.管程的三个主要的特性

模块化:一个管程是一个基本程序单位,可以单独编译
 抽象数据类型:管程是一种特殊的数据类型,其中不仅有数据,而且有对数据进行操作的代码
 信息掩蔽:管程是半透明的,管程中的外部过程(函数)实现了某些功能,管程中的外部过程(函数)实现了某些功能,至于这些功能是怎样实现的,在其外部则是不可见的
问题:多个进程出现在管程中
=
===
    当一个进入管程的进程执行等待操作时,它应当释放管程的互斥权;当一个进入管程的进程执行唤醒操作时(如P唤醒Q),管程中便存在两个同时处于活动状态的进程
处理方法有三种:
 P等待Q继续,直到Q退出或等待
 Q等待P继续,直到P等待或退出
 规定唤醒为管程中最后一个可执行的操作

===========

下面的不懂::


由于管程通常是用于管理资源的,因而在管程内部,应当存在某种等待机制。当进入管程的进程因资源被占用等原因不能继续运行时使其等待。为此在管程内部可以说明和使用一种特殊类型的变量,称作条件变量:    
  VAR C:condition;
对于条件型变量,可以执行wait和signal操作:
 wait(c):如果紧急等待队列非空,则唤醒第一个等待者;否则释放管程的互斥权,执行此操作的进程的PCB入c链尾部
signal(c):如果c链为空,则相当于空操作,执行此操作的进程继续;否则唤醒第一个等待者,执行此操作的进程的PCB入紧急等待队列的尾部


================================


7.管程和进程的异同点

(1)设置进程和管程的目的不同
(2)系统管理数据结构
          进程:PCB
          管程:等待队列
(3)管程被进程调用
(4)管程是操作系统的固有成分,无创建和撤消

阅读(8295) | 评论(5) | 转发(0) |
0

上一篇:读者写者问题

下一篇:以上三篇来源

给主人留下些什么吧!~~

chinaunix网友2010-07-27 15:35:20

不是只能有一个进程进入管程吗?怎么会有两个 ?

chinaunix网友2010-07-27 15:34:34

一个管程里是否可以有多个条件变量,如果可以,那么在执行signal操作时,应该唤醒哪个条件上的等待进程?不是只能有一个进程进入管程吗?怎么会有两个 ?

chinaunix网友2010-05-16 22:29:41

一个管程里是否可以有多个条件变量,如果可以,那么在执行signal操作时,应该唤醒哪个条件上的等待进程?不是只能有一个进程进入管程吗?怎么会有两个 ?

chinaunix网友2009-10-02 16:42:22

麻烦请教一下:为什么管程的变量初始化放在了后面?和放在前面有不同吗?谢谢!

chinaunix网友2008-08-21 21:30:36

设计这样特别的wait()和signal()操作,目的是保证管程中有且只有一个进程在运行。具体怎么用,要看管程中具体函数的实现,一定要用得有意义。