信号量机制

  • 信号量是OS提供的管理公有资源的有效手段。
  • 信号量是一个整数,当信号量大于等于零时,代表可供并发进程使用的资源数量,当信号量小于零时,表示处于阻塞态进程的个数

Wait 操作:

  • 申请资源,减量操作,S.value:=S.value-1
  • 当S.value<0时,表示资源分配完,进行自我阻塞

Signal操作:

  • 释放资源,增量操作,S.value:=S.value+1
  • 当S.value≤=0,唤醒S.L链表中的等待进程

1、利用信号量实现进程互斥

为使多个进程互斥的访问某临界资源,须为该资源设置一互斥信号量mutex,并设其初始值为1,然后将各进程访问资源的临界区CS置于wait(mutex)和signal(mutex)之间即可。

由于只允许一个进程进入,因此信号量中整型值的初始值应 该为1。当该值<0时,其绝对值就是等待队列中的进程数。而当一个进程从临界区出来时,就会将整型值加1,如果等 待队列中还有进程,则调入一个新的进程进入(唤醒)。

例:用记录型信号量实现三个进程互斥使用一台打印机

例:假设系统有n个进程共享资源R,且资源R的可用数为3,其中n≥3 。
若采用PV操作,则信号量S的取值范围应为-(n-3)~3

实现互斥时,信号量S初值为打印机的个数;
实现前驱时,信号量S初值为0,且有几个有向边便设置几个信号量。

2、利用信号量实现前驱关系

设有两个并发执行的进程P1和P2,P1中有语句S1,P2中有语句S2,希望在S1执行后再执行S2。

使进程P1和P2共享一个公用信号量S,并赋予其初值为0。

多个并发执行的进程实现前驱关系:

例:进程P1、P2、P3、P4和P5 的前趋图如下, 若用 PV操作控制进程 P1~P5并发执行的过程,则需要设置 6 个信号量S1、S2、S3、S4、S5和 S6,且信号量 S1~S6的初值都等于零。下图中 a和 b 处应分别填写 ( V(S1) V(S2) 和V(S3) V(S4) ) ;c和 d处应分别填写 ( P(S1) P(S3) 和V(S5) V(S6) ) ,e和 f处应分别填写 ( P(S2) P(S5) 和P(S4) P(S6) ) 。