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

2.2.7 管程

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

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

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

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

这里还需要一种办法使得进程在无法继续运行时被阻塞。解决办法在于引入条件变量以及相关的两个操作:wait和signal。当一个管程过程发现它无法继续时,它在某些条件变量上执行wait,如full。这个动作引起调用进程阻塞。它允许另一个先前被挡在管程外边的进程现在进入管程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值