测试设置锁机制2025年3月17日 | 阅读 3 分钟 汇编代码的修改在锁变量机制中,有时进程会读取锁变量的旧值并进入临界区。由于这个原因,多个进程可能会进入临界区。然而,以下部分的第 1 部分中所示的代码可以用第 2 部分中所示的代码替换。这不会影响算法,但通过这样做,我们可以在一定程度上提供互斥,但不能完全提供。 在更新版本的代码中,锁的值被加载到局部寄存器 R0 中,然后锁的值被设置为 1。 然而,在步骤 3 中,锁的先前值(现在存储在 R0 中)与 0 进行比较。如果为 0,则进程将简单地进入临界区,否则将通过在循环中连续执行来等待。 进程本身立即将锁设置为 1 的好处是,现在进入临界区的进程携带着锁变量的更新值,即 1。 在它被抢占并再次调度的情况下,即使锁变量的当前值如何,它也不会进入临界区,因为它已经知道锁变量的更新值是什么。
TSL 指令然而,上述片段中提供的解决方案在一定程度上提供了互斥,但它不能确保互斥将始终存在。临界区中可能存在多个进程。 如果在执行第 2 节中编写的汇编代码的第一条指令后,进程立即被抢占怎么办?在这种情况下,它将携带锁变量的旧值,并且无论是否知道锁变量的当前值,它都将进入临界区。这可能导致两个进程同时存在于临界区中。 为了摆脱这个问题,我们必须确保在加载锁变量的先前值之后和将其设置为 1 之前,不会发生抢占。如果我们可以将前两条指令合并,这个问题就可以解决。 为了解决这个问题,操作系统提供了一个特殊的指令,称为 **测试设置锁 (TSL)** 指令,它简单地将锁变量的值加载到局部寄存器 R0 中并同时将其设置为 1。 首先执行 TSL 的进程将进入临界区,之后在第一个进程退出之前,没有其他进程可以进入。即使第一个进程被抢占,也没有进程可以执行临界区。 该解决方案的汇编代码如下所示。
让我们根据四个条件来检查 TSL。
TSL 机制保证了互斥,因为进程在设置锁变量之前永远不会被抢占。在特定时间只有一个进程可以将锁变量视为 0,因此保证了互斥。 根据进度的定义,不希望进入临界区的进程不应阻止其他进程进入临界区。在 TSL 机制中,进程只会在希望进入临界区时执行 TSL 指令。如果没有任何进程希望进入临界区,则锁的值将始终为 0,因此 TSL 始终保证进度。 TSL 不保证有界等待。某些进程可能长时间没有机会。我们无法预测进程在一定时间后一定会获得进入临界区的机会。 TSL 不提供架构中立性。它取决于硬件平台。TSL 指令由操作系统提供。某些平台可能不提供。因此,它不是架构中立的。 ![]() 下一主题TSL 中的优先级反转 |
(操作系统)当两个或多个进程相互协作时,它们的执行顺序必须得到保证,否则它们的执行可能发生冲突,并可能产生不适当的输出。协作进程是指可以影响其他进程执行的进程...
阅读1分钟
简介:计数信号量是介于 [0, n] 之间的同步机制,其中 n 是大于一 (1) 的非负整数。通过以这种方式计数信号量,可以提供许多关键组件的访问令牌。这使得多个实体可以访问关键...
阅读 8 分钟
(生产者-消费者问题) 让我们检查基本的 sleep 和 wake 模型。假设我们有两个系统调用:sleep 和 wake。调用 sleep 的进程将被阻塞,而调用 wake 的进程将被唤醒。有一个流行的例子叫做生产者...
阅读 4 分钟
或互斥量简介:称为二进制信号量的同步机制的整数值介于 0 和 1 之间。因此,此类信号量提供对临界区的单一访问点。这意味着关键组件仅对一个人可用...
阅读 4 分钟
机制 我们必须确保我们的同步机制能够提供进展。在 turn 变量机制中,由于不希望进入临界区的进程不考虑其他...,因此没有提供进展。
阅读 4 分钟
无忙等待的同步机制 我们到目前为止看到的所有解决方案都旨在通过忙等待提供互斥。然而,忙等待不是最优的资源分配,因为它会一直占用 CPU 来持续检查 while 循环条件...
阅读1分钟
Lock 变量 这是最简单的同步机制。这是一种在用户模式下实现的软件机制。这是一种忙等待解决方案,可用于两个以上的进程。在此机制中,使用了一个 Lock 变量 lock。lock 可以有两种值,...
阅读 3 分钟
或 Strict Alternation Approach 或 Strict Alternation Approach 是在用户模式下实现的软件机制。它是一种忙等待解决方案,只能用于两个进程。在此方法中,使用了一个 turn 变量,它实际上是一个锁。此方法可以...
阅读 2 分钟
操作系统 (OS) 中的信号量简介 在本教程中,我们将学习最重要的主题——信号量。在口试、面试、考试甚至实习中,100% 会有关于信号量主题的问题...
11 分钟阅读
这是一种在用户模式下实现的软件机制。它是一种忙等待解决方案,只能用于两个进程。它使用两个变量:turn 变量和 interested 变量。解决方案的代码如下 # define N 2 # define TRUE...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India