轮转变量或严格轮换法

2025年3月17日 | 阅读 3 分钟

轮转变量或严格轮换法是在用户模式下实现的一种软件机制。它是一种忙等待解决方案,只能用于两个进程。在这种方法中,使用了一个称为“轮转变量”的变量,它实际上是一个锁。

此方法只能用于两个进程。通常,令这两个进程为 Pi 和 Pj。它们共享一个名为 turn variable 的变量。程序的伪代码可以给出如下。

对于进程 Pi

对于进程 Pj

锁变量方法的实际问题在于,进程只有在锁变量为 1 时才进入临界区。多个进程可能同时看到锁变量为 1,因此互斥无法得到保证。

这个问题在轮转变量方法中得到了解决。现在,进程只能在轮转变量的值等于进程的 PID 时才能进入临界区。

轮转变量只有两个可能的值,即 i 或 j。如果它的值不是 i,则一定是 j,反之亦然。

在入口段,通常,进程 Pi 必须等到其值为 j 才能进入临界区,或者进程 Pj 必须等到其值为 i 才能进入临界区。

最初,有两个进程 Pi 和 Pj 可用,并希望在临界区执行。


os For Process Pi

轮转变量的值为 i,因此 Pi 将有机会进入临界区。Pi 的值将保持为 I,直到 Pi 完成临界区。


os For Process Pi 1

Pi 完成其临界区,并将 j 赋给轮转变量。Pj 将有机会进入临界区。轮转变量的值将保持为 j,直到 Pj 完成其临界区。


os Process Pj

严格轮换法分析

让我们根据四个要求来分析严格轮换法。

互斥

严格轮换法在任何情况下都提供了互斥。此过程仅适用于两个进程。每个进程的伪代码是不同的。进程只有在看到轮转变量等于其进程 ID 时才能进入,否则不能。因此,无论其轮转如何,都没有进程可以进入临界区。

进度

该机制不能保证前进性。如果 Pi 在其轮到它时不想进入临界区,那么 Pj 将被无限期阻塞。Pj 必须长时间等待其轮到它,因为轮转变量将保持为 0,直到 Pi 将其分配给 j。

可移植性

该解决方案提供了可移植性。它是一种纯软件机制,在用户模式下实现,不需要操作系统提供任何特殊指令。


os Analysis of Strict Alternation approach