管程机制

管程的定义
管程由三部分组成:
(1)局部于管程的共享变量说明;
(2)对该数据结构进行操作的一组过程;
(3)对局部于管程的数据设置初始值的语句,此外还需为管程赋予一个名字。
在这里插入图片描述
管程的语法如下:
type monitor-name=monitor
variable declarations
procedure entry P1…);
begin… end;
procedure entry P(…);
begin … end;
begin
initialization code;
end
条件变量
管程中对每个条件变量,都须予以说明,其形式为: Var x,y:condition.该变量应置于wait和signal之前,即可表示为X. wait和X. signal。例如,由于共享数据被占用而使调用进程等待,该条件变量的形式为:nonbusy :condition。此时,wait原语应改为nonbusy.wait,相应地,signal 应改为nonbusy. signal。应当指出,X. signal操作的作用,是重新启动一个被阻塞的进程,但如果没有被阻塞的进程,则X. signal操作不产生任何后果。这与信号量机制中的signal操作不同。因为,后者总是要执行s : =s+1操作, 因而总会改变信号量的状态。
如果有进程Q处于阻塞状态,当进程P执行了X. signal
操作后,怎样决定由哪个进行执行,哪个等待,可采用下述两种
方式之-进行处理:
(1) P等待,直至Q离开管程或等待另一条件。
(2) Q等待,直至P离开管程或等待另一条件。
利用管程解决生产者消费者问题
在利用管程方法来解决生产者-消费者问题时,首先便是为它们建立一个管程,并命名为Proclucer-Consumer,或简称为PC。其中包括两个过程:
(1) put(item)过程。 生产者利用该过程将自己生产的产品投放到缓冲池中,并用整型变量count来表示在缓冲池中已有的产品数目,当count≥n时,表示缓冲池已满,生产者须等待。
(2) get(item)过程。消费者利用该过程从缓冲池中取出一个产品,当count≤0时,表示缓冲池中已无可取用的产品,消费者应等待。
在利用管程解决生产者-消.费者问题时,其中的生产者和消费者可描述为:
producer;begin
repeat
produce an item in nextp;
PC.put(item);
until false;
end
consumer;begin
repeat
PC. get(item);
consume the item in nextc;
until false;
end
管程和进程的异同点
1.设置进程和管程的目的不同
2.系统管理数据结构.
(1)进程: PCB
(2)管程:等待队列
3.管程被进程调用
4.管程是操作系统的固有成分,无创建和撤消

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值