操作系统_信号量

理解信号量首先需要了解进程间通讯的基本概念。

进程间通讯

  • 进程间通讯 (IPC)要解决的问题:1.进程间传递信息   2.保证两个以上的进程在关键活动处不会互相影响   3.进程间有依赖关系时,保证恰当的顺序
  • 进程间的关系 _同步
  • 进程间的关系_互斥

信号量问题

  荷兰学者 Dijkstra规定 信号量只能做所谓的P 操作和 V操作。信号量为非负初值的整型变量,并且有一个队列(存放关于该信号量的阻塞进程)与信号量关联。
  当执行 P(S)操作时,信号量S的值减 1,小于0阻塞。V操作反之。

  • 分析问题:用信号量解决问题之前首先要确定进程间的关系是同步还是互斥
  • 互斥关系:信号量初值设置为1,进程间进行上锁

                               信号量不需要忙等,条件不满足时阻塞。

semaphore mutex = 1;/*set mutex.count = 1*/
DOWN(mutex);
   -临界区-
UP(mutex);

                              互斥信号量只有两种状态:未上锁或者上锁

  • 同步关系:进程有一定的执行顺序多个信号量一般实现同步的信号量的初值可以设为0。

在需要等待的进程中执行P(S1)操作,如果之前的进程没做完,则当前进程进入等待,之前的进程得以执行。


这些进程可以使用以下信号量实现同步:semaphore S1, S2, S3 = 0, 0, 0;

进程A:

- do work of A-
UP(S1);         /* Let B or C start */

进程B:

DOWN(S1);     /* Block until A is finished */
 - do work of B
UP(S2);
进程C:

DOWN(S1);
- do work of C
UP(S3);
进程D:

DOWN(S2);
DOWN(S3);
 - do work of D

  1. 同步关系中,配对的 P、V 操作分别在不同的进程里。有的时候P操作和 V操作的个数并不相等。
  1. 分析哪个进程不可以先执行,在不允许直接进行的操作前面加上 P操作来进行条件限制。在相对的基础进程操作后面加上对同一个信号量的V 操作。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值