操作系统中的信号量
信号量是用于解决临界区问题的整型变量,它使用两个原子操作(wait 和 signal)来实现进程同步。
wait 和 signal 的定义如下:
- Wait
如果 wait 操作的参数 S 为正,则将其值减 1。如果 S 为负或零,则不执行任何操作。
wait(S) { while (S<=0); S--; }
- Signal
signal 操作将参数 S 的值加 1。
signal(S) { S++; }
信号量的类型
信号量主要有两种类型:计数信号量和二元信号量。详情如下:
- 计数信号量
这些是整数值信号量,具有不受限制的值域。这些信号量用于协调资源访问,其中信号量计数是可用资源的数量。如果添加了资源,信号量计数会自动递增;如果删除了资源,计数会递减。
- 二元信号量
二元信号量类似于计数信号量,但其值限制为 0 和 1。只有当信号量为 1 时,wait 操作才有效;只有当信号量为 0 时,signal 操作才成功。有时,实现二元信号量比实现计数信号量更容易。
信号量的优点
信号量的一些优点如下:
- 信号量只允许一个进程进入临界区。它们严格遵循互斥原则,并且比其他一些同步方法效率更高。
- 由于信号量中没有忙等待,因此不会浪费资源,因为处理器时间不会被不必要地浪费在检查条件是否满足以允许进程访问临界区。
- 信号量在微内核的机器无关代码中实现。因此,它们是机器无关的。
信号量的缺点
信号量的一些缺点如下:
- 信号量很复杂,因此必须以正确的顺序实现 wait 和 signal 操作以防止死锁。
- 信号量不适用于大规模使用,因为它们的用途会导致模块化丢失。这是因为 wait 和 signal 操作阻止了为系统创建结构化布局。
- 信号量可能导致优先级反转,其中低优先级进程可能首先访问临界区,而高优先级进程稍后访问。
广告