操作系统信号量问答 #1

问题:解释信号量并在上面写一个简短的注释。

答案: Dijkestra 提出了一种重要的技术,用于管理复杂互斥问题的并发进程。 他介绍了一种名为 Semaphore 的新同步工具。

信号量有两种类型 −

  1. 二进制信号量

  2. 计数信号量

二进制信号量只能取值 0 & 1。 计数信号量可以取非负整数值。

在信号量上定义了两个标准操作,等待和信号。 进入临界区由等待操作控制,退出临界区由信号操作处理。 等待信号操作也称为 P 和 V 操作。 信号量 (S) 的操作发生如下:

  1. 等待命令 P(S) 将信号量值减 1。如果结果值变为负值,则延迟 P 命令直到满足条件。

  2. V(S) 即信号操作将信号量值增加 1。

在 P(S) 和 V(S) 内强制执行信号量的互斥。 如果多个进程同时尝试 P(S),则将只允许一个进程继续 & 其他进程将等待。这些操作定义如下 −

P(S) or wait(S): 
If S > 0 then
   Set S to S-1
Else
   Block the calling process (i.e. Wait on S)

V(S) or signal(S): 
If any processes are waiting on S
   Start one of these processes
Else
   Set S to S+1

信号量操作被实现为操作系统服务,因此等待和信号本质上是原子的,即一旦开始,这些操作的执行就不能被中断。

因此,信号量是一种简单而强大的机制,可确保并发进程之间的互斥。