您的位置:首页 > 其它

操作系统设计与实现 第二章 进程(五)

2016-05-31 16:50 218 查看

2.2.7 管程

管程是由过程、变量及数据结构等组成的集合,它们组成一个特殊的模块或软件包。

进程可在任何需要时调用管程中的过程,但它们不能在管程外的过程中直接访问管程中的数据结构。

管程有一个很重要的特性,这使得它们能有效地完成互斥:任意时刻管程中只能有一个活跃进程。典型地,当一个进程调用管程中的过程时,前几条指令将检查在管程中是否有其他的活跃进程。如果有,调用进程将其挂起,直到另一个进程离开管程。如果没有,则调用进程以便进入管程。

对进入管程实现互斥由编译器负责,但通常的做法是用一个互斥或二进制信号量。因为是由编译器而非程序员来安排互斥,出错的可能性要小得多。

这里还需要一种办法使得进程在无法继续运行时被阻塞。解决办法在于引入条件变量以及相关的两个操作:wait和signal。当一个管程过程发现它无法继续时,它在某些条件变量上执行wait,如full。这个动作引起调用进程阻塞。它允许另一个先前被挡在管程外边的进程现在进入管程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  操作系统