操作系统(2.4.5)--管程机制

简介: 局部于管程内部的数据结构,仅能被局部于管程内部的过程所访问,任何管程外的过程都不能访问它;反之,局部于管程内部的过程也仅能访问管程内的数据结构。由此可见,管程相当于围墙,它把共享变量和对它进行操作的若干过程围了起来,所有时,都必须经过管程(相当于通过围墙的进程要访问临界资源门)才能进入,而管程每次只准许一个进程进入管程,从而实现了进程互斥。

1.管程的定义

利用共享数据结构抽象地表示系统中的共享资源,而把对该共享数据结构实施的操作定义为一组过程进程对共享资源的申请、释放和其它操作,都是通过这组过程对共享数据结构的操作来实现的,这组过程还可以根据资源的情况,或接受或阻塞进程的访问,确保每次仅有一个进程使用共享资源,这样就可以统一管理对共享资源的所有访问,实现进程互斥。


代表共享资源的数据结构,以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序,共同构成了一个操作系统的资源管理模块,我们称之为管程。管程被请求和释放资的进程所调用。Hansan为管程所下的定义是:“一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构.上k)的一 -组操作, 这组操作能同步进程和改变管程中的数据”。


管程由四部分组成:


①管程的名称;


②局部于管程内部的共享数据结构说明


③对该数据结构进行操作的一组过程;


④对局部于管程内部的共享数据设置初始值的语句

c228448320f77c7e158fe43102b2cfae_8f4a40a1fe3d469b98c5bc7f4acbf3de.jpeg


操作系统一书中管程的示意图

共享数据、一组操作过程、初始化代码、


Monitor monitor_ name {/*管程名*/
share variable declarations;/*共享变量说明*/
cond declarations; /*条件变量说明*/
public:/*能被进程调用的过程*/
void P1(.......)/*对数据结构操作的过程*/
{.......}
vold P2(......)
{......}
......
{                    /*管程主体*/
initialization code;/*初始化代码*/
}

注意:


局部于管程内部的数据结构,仅能被局部于管程内部的过程所访问,任何管程外的过程都不能访问它;反之,局部于管程内部的过程也仅能访问管程内的数据结构。

由此可见,管程相当于围墙,它把共享变量和对它进行操作的若干过程围了起来,所有时,都必须经过管程(相当于通过围墙的进程要访问临界资源门)才能进入,而管程每次只准许一个进程进入管程,从而实现了进程互斥。


管程主要有以下特性:

(1)模块化。管程是一个基本程序单位,可以单独编译。

(2)抽象数据类型。管程中不仅有数据,而且有对数据的操作。

(3)信息掩蔽。管程中的数据结构只能被管程中的过程访问,供管程外的进程调用,而管程中的数据结构以及过程(函数)的具体实现外部不可见。


管程和进程不同,主要体现在以下几个方面:

(1)虽然二者都定义了数据结构,但进程定义的是私有数据结构PCB,管程定义的是公共数据结构,如消息队列等;

(2)二者都存在对各自数据结构上的操作,但进程是由顺序程序执行有关的操作,而管程主要是进行同步操作和初始化操作;


(3)设置进程的目的在于实现系统的并发性,而管程的设置则是解决共享资源的互斥使用问题;

(4)进程通过调用管程中的过程对共享数据结构实行操作,该过程就如通常的子程序一样被调用,因而管程为被动工作方式,进程则为主动工作方式;

(5)进程之间能并发执行,而管程则不能与其调用者并发;

(6)进程具有动态性,由“创建”而诞生,由“撤销”而消亡,而管程则是操作系统中的一个资源管理模块,供进程调用


2.条件变量

考虑一种情况:当一个进程调用了管程,在管程中时被阻塞或挂起,直到阻塞或挂起的原因解除,而在此期间,如果该进程不释放管程,则其它进程无法进入管程,被迫长时间地等待。为了解决这个问题,引入了条件变量condition。通常,个进程被阻塞或挂起的条件(原因)可有多个,因此在管程中设置了多个条件变量,对这些条件变量的访问,只能在管程中进行。


管程中对每个条件变量都须予以说明,其形式为: condition x,y。

对条件变量的操作仅仅是wait和signal,每个条件变量保存了一个链表,用于记录因该条件变量而阻塞的所有进程,同时提供的两个操作即可表示为x.wait和x.signal,其含义为:

①x.wait:正在调用管程的进程因x条件需要被阻塞或挂起,则调用x.wait将自己插入到x条件的等待队列上,并释放管程,直到x条件变化。

②x.signal:正在调用管程的进程发现x条件发生了变化,则调用x.signal重新启动一个因x条件而阻塞或挂起的进程。  

相关文章
|
存储
操作系统:管程与进程通信机制解析
操作系统:管程与进程通信机制解析
334 0
|
存储 算法 安全
操作系统学习笔记_3 管程;死锁;内存
学习自计算机科学单本&b站王道课程。
284 0
操作系统学习笔记_3 管程;死锁;内存
|
程序员 调度 数据库
【操作系统】第十章信号量与管程
【操作系统】第十章信号量与管程
661 0
【操作系统】第十章信号量与管程
|
Java 程序员 编译器
2.7操作系统(读者—写者问题 哲学家进餐问题 管程 )
1.读者—写者问题 2.哲学家进餐问题 实现 3.管程 1.为什么要引入管程? ​2.管程的定义和基本特征 3.扩展1:用管程解决生产者消费者问题 4.扩展2:Java中类似于管程的机制
2.7操作系统(读者—写者问题 哲学家进餐问题 管程 )
|
6月前
|
Ubuntu Unix Linux
操作系统的最强入门科普(Unix/Linux篇)
下期文章,小枣君会重点聊聊Windows和macOS那条线。敬请关注! 如果大家觉得文章不错,还请帮忙多多转发!谢谢!
|
6月前
|
Web App开发 缓存 Rust
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
895 0
Vanilla OS:下一代安全 Linux 发行版
|
运维 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot 是阿里云推出的一款操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行和系统运维调优等功能。通过简单的命令行操作,用户可以快速获取所需信息并执行任务,极大提升了Linux系统的使用效率。安装步骤简单,只需在阿里云服务器上运行几条命令即可完成部署。使用过程中,OS Copilot不仅能帮助查找命令,还能处理文件和复杂场景,显著节省了查找资料的时间。体验中发现,部分输出格式和偶尔出现的英文提示有待优化,但整体非常实用,特别适合Linux初学者。
545 10
|
弹性计算 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot是由阿里云推出的操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行等功能,极大提升了Linux系统的使用效率。用户只需通过简单的命令或自然语言描述问题,OS Copilot即可快速提供解决方案并执行相应操作。例如,查询磁盘使用量等常见任务变得轻松快捷。此外,它还支持从文件读取复杂任务定义,进一步简化了操作流程。虽然在某些模式下可能存在小问题,但总体上大大节省了学习和操作时间,提高了工作效率。
441 2
OS Copilot-操作系统智能助手-Linux新手小白的福音

热门文章

最新文章

推荐镜像

更多