操作系统 锁变量

操作系统 锁变量

这是最简单的同步机制。这是一种在用户模式下实现的软件机制。这是一种可以用于两个以上进程的繁忙等待解决方案。

在这种机制中,使用一个锁变量 lock 。锁的值可以是0或1。锁的值为0意味着临界区是空闲的,而锁的值为1意味着它被占用。

想要进入临界区的进程首先检查锁变量的值。如果为0,则将锁的值设置为1并进入临界区,否则等待。

机制的伪代码如下所示。

Entry Section → 
While (lock! = 0); 
Lock = 1;
//Critical Section 
Exit Section →
Lock =0;

假设我们看一下伪代码,我们可以发现代码中有三个部分。入口部分、临界区和退出部分。

初始时 锁变量 的值是 0 。需要进入 临界区 的进程首先进入入口区,并检查while循环中提供的条件。

如果 的值为1(在while循环中已隐含),进程将无限等待。由于第一次临界区为空,因此进程将通过将锁变量设置为1进入临界区。

当进程从临界区退出时,在退出区中将锁的值重新赋为0。

每种同步机制都根据四个条件进行评估。

  1. 互斥
  2. 进展
  3. 有界等待
  4. 可移植性

在这四个参数中,互斥和进展必须由任何解决方案提供。我们将根据上述条件分析该机制。

互斥

在某些情况下,锁变量机制不提供互斥。从操作系统的角度来看,可以通过查看程序的汇编代码来更好地描述。让我们将代码转换为汇编语言。

  1. Load Lock, R0
  2. CMP R0, #0
  3. JNZ Step 1
  4. Store #1, Lock
  5. Store #0, Lock

假设我们有两个进程P1和P2。进程P1希望执行其临界区。P1进入入口区。由于锁的值为0,因此P1将其值从0改为1并进入临界区。

同时,P1被CPU抢占,P2被调度。此时临界区没有其他进程,锁变量的值为0。P2也希望执行其临界区。它通过将锁变量设置为1进入临界区。

现在,CPU将P1的状态从等待更改为运行。P1还没有完成其临界区。P1已经检查了锁变量的值,并记住先前检查时的值为0。因此,它也在不检查锁变量的更新值的情况下,进入临界区。

现在,我们有两个进程在临界区。根据互斥条件,临界区中不应该同时存在多个进程。因此,锁变量机制不能保证互斥。

锁变量机制的问题在于,同时可以有多个进程看到空标签,并且可以有多个进程进入临界区。因此,锁变量不能提供互斥,因此不能在一般情况下使用。

由于该方法在基本步骤上失败了,因此无需讨论其他需要满足的条件。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程