操作系统设计与实现 第二章 进程(五)
2016-05-31 16:50
274 查看
2.2.7 管程
管程是由过程、变量及数据结构等组成的集合,它们组成一个特殊的模块或软件包。进程可在任何需要时调用管程中的过程,但它们不能在管程外的过程中直接访问管程中的数据结构。
管程有一个很重要的特性,这使得它们能有效地完成互斥:任意时刻管程中只能有一个活跃进程。典型地,当一个进程调用管程中的过程时,前几条指令将检查在管程中是否有其他的活跃进程。如果有,调用进程将其挂起,直到另一个进程离开管程。如果没有,则调用进程以便进入管程。
对进入管程实现互斥由编译器负责,但通常的做法是用一个互斥或二进制信号量。因为是由编译器而非程序员来安排互斥,出错的可能性要小得多。
这里还需要一种办法使得进程在无法继续运行时被阻塞。解决办法在于引入条件变量以及相关的两个操作:wait和signal。当一个管程过程发现它无法继续时,它在某些条件变量上执行wait,如full。这个动作引起调用进程阻塞。它允许另一个先前被挡在管程外边的进程现在进入管程。
相关文章推荐
- 应用领航:盘点那些年我们一起追过的OS
- 无奇不有!盘点各国自己开发的操作系统
- 可自定义oem的萝卜家园 Ghost XP 新春装机版 V200801 下载
- C#实现判断操作系统是否为Win8以上版本
- js获取本机操作系统类型的两种方法
- Linux操作系统添加新硬盘方法
- java如何获取本地操作系统进程列表
- Linux rdesktop操作系统下远程登录Windows XP桌面
- 32位操作系统认出超出4G内存的方法
- Linux rpm tar 操作系统下软件的安装与卸载方法
- JavaScript 获取用户客户端操作系统版本
- jsp 获取客户端的浏览器和操作系统信息
- Windows 操作系统的安全设置
- php判断当前操作系统类型
- PHP获取用户的浏览器与操作系统信息的代码
- Perl操作系统环境变量的脚本代码
- javascript获取本机操作系统类型的方法
- 封装好的js判断操作系统与浏览器代码分享
- javascript实现获取浏览器版本、操作系统类型
- php根据操作系统转换文件名大小写的方法