操作系统管程

1.管程的组成
(1)一组局部变量
(2)对局部变量操作的一组过程
(3)对局部变量进行初始化的语句。(联想面向对象中的类)
2.管程特点
(1)任何进程只能通过调用管程提供的过程入口才能进入管程访问共享数据;
(2)任何时刻,仅允许一个进程在管程中执行某个内部过程。
3.管程的优缺点
(1)保证进程互斥地访问共享变量,并方便地阻塞和唤醒进程。管程比信号量好控制
(2)管程可增强模块的独立性
(3)引入管程可提高代码的可读性,便于修改和维护,正确性易于保证
(4)大多数编程语言没有实现管程
4.条件变量(用于控制进程阻塞和唤醒)
(1)类似信号量变量,但不取具体值;相当于每个阻塞队列的队列指针。
(2)对条件变量的操作需结合对普通变量的条件判断,从而控制进程状态。
(3)x.wait将执行进程挂到x对应的等待队列上;x.signal唤醒x相应的等待队列上的一个进程(signal操作,是重新启动一个被阻塞的进程,但如果没有进程被阻塞,则不产生任何效果)
5.应用举例

type p_c=monitor
    var in,out,count: interger;
           buffer: array[0,…,n-1] of item
           x,y: condition;
procedure entry put(var product:item)
{  if count>=n then x.wait;
    buffer[in]=product;
    in=in+1 mod n;
    count=count+1;
    y.signal;   }
procedure entry get(var product:item)
{  if count<=0 then y.wait;
    nextc=buffer[out];
    out=out-1 mod n;
    count=count-1;
    x.signal;	}
{	in=out=0;
	count=0;		}
	
Producer
        begin
           repeat
          生产an item in nextp;
           p_c.put(nextp);
           until
        end
    
Consumer:
    begin
       repeat
       p_c.get(nextc);
       消费an item in nextc;
       until
    end
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值