操作系统_进程同步与进程通信_用PV操作实现进程的同步

进程的同步是指并发进程之间存在一种制约关系, 一个进程的执行依赖另一个进程的消息, 当一个进程没有得到另一个进程的消息时应等待,直到消息到达才被唤醒。

PV操作与管程是两种典型的同步机制。 本文只介绍怎样用PV操作实现进程间的同步。

  •  生产者 / 消费者问题
    先看一个图:



    把上图中的进程A “读一个记录并将其送入缓冲区” 看做“生产者生产了一件物品且把物品存入缓冲区”;  把进程B "从缓冲区取出记录并加工" 看做“消费者从缓冲区取出物品去消费”。  这样,上述问题涉及进程的同步就变成了生产者和消费者之间的同步, 生产者/消费者问题是一个典型的同步问题。


    经常把进程的互斥与进程的同步统称为进程的同步。 把用来解决进程互斥与进程同步的机制(PV操作) 统称为同步机制。
  • 同步与互斥的混合问题

    看一个具体例子

某工厂有一个可以存放设备的仓库, 总共可以存放8台设备。 生产部门生产的每一台设备都必须入库。销售部门可以从仓库提出设备供应客户。  设备的入库和出库都必须借助运输工具。 现只有一套运输工具, 每次只能运输一台设备。 请设计一个能协调工作的自动调度管理系统。

实际上, 这仍然是一个生产者/消费者问题。 按题意可知, 该系统要协调的工作主要有两个方面:

1  仅当仓库不满时才允许把生产部门生产的设备存入仓库,仅当仓库有设备时才允许销售部门提出设备去销售。
2 生产部门与销售部门要竞争运输工具,以便各自完成设备的入库和出库。

对于1 而言,涉及到进程同步, 对于2而言,由于竞争共享资源的使用权, 应使它们互斥地使用运输工具, 所以这是一个同步与互斥的混合问题。

用PV操作实现管理时应定义3个信号量, 其中两个表示必须互通的消息, 另一个用于控制运输工具的互斥使用权。 各信号量的含义如下:

S1:  仓库中尚可存放多少设备, 初值应为8.

S2: 仓库中的设备数, 初值应为0.

mutex:  运输工具是否空闲, 初值为1, 表示空闲。

-----------------------------------

cobegin 和 coend的意思:cobegin 是并行开始的意思, coend并行结束的意思。

这个两个单词表示操作系统的并行语言的一种命令。这两个单词都是合成词。

co是concurrent的头两个字符,concurrent的意思为同时发生的

-----------------------------------

生产部门每生产一台设备后应调用P(S1)来测试仓库中是否还可存放设备, 调用P(mutex) 来测试是否可使用运输工具。当仓库尚未占满且运输工具空闲时才能把生产出来的设备送入仓库, 否则要等待。 当设备存入仓库后, 应调用 V(mutex)和V(S2)来归还运输工具的使用权和把仓库中有设备的消息发送给销售部门。 销售部门应调用P(S2)来测试仓库中是否存有设备,调用P(mutex)来竞争运输工具的使用权。当仓库中有设备且运输工具空闲时就可以从仓库中取出一台设备, 否则等待。 当取出一台设备后应调用V(mutes) 和V(S1)来归还运输工具的使用权和把仓库中有空位可以存放设备的消息发送给生产部门。 

这个自动调度管理系统的程序如下:

begin

  mutex, S1, S2: semaphore;

mutex : =1; S1 : =8;S2 : =0;

cobegin

Process A

begin

L1 :   {生产一台设备};

        P(S1);               /**测试仓库中是否还可存放设备**/

       P(mutex);         /**测试能否使用运输工具*/

       {把设备送入仓库} ;

      V(mutex);      /**归还运输工具的使用权**/

      V(S2);       /**发送仓库中又存了一台设备的消息**/

      goto     L1;

end;

Process  B

begin

   L2 :  P(S2);      /**测试仓库中是否有可供销售的设备**/

           P(mutex);    /**测试能否使用运输工具 **/

           {从仓库取出一台设备};

           V(mutex);       /**归还运输工具的使用权**/

           V(S1);             /**发送仓库中有空位可存设备的消息 **/

           {把设备销售给客户};

            goto    L2;

end;

coend;

end;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值