操作系统_信号量

来源:互联网 发布:js判断不等于0 编辑:程序博客网 时间:2024/06/08 09:47

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

进程间通讯

  • 进程间通讯 (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 BUP(S2);
进程C:

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

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

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