临界区管理

110 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 21 天,点击查看活动详情


互斥和临界区

  • 并发进程中与共享变量有关的程序段称为临界区。
  • 共享变量所代表的资源称为临界资源,即一次仅能供一个进程使用的资源。

共享变量的并发进程应遵守临界区调度的三个原则:

  1. 一次至多只有一个进程进入临界资源内执行
  2. 如果已有进程在临界资源,试图进入临界资源的进程应进行等待
  3. 进入临界区的进程应在有限时间内退出,以便让等待队列中的一个进程进入。

临界区管理的基本思路

  1. 找到临界区
  2. 在临界区前面增加一段用于进行检测的代码,当不满足进入条件的时候,就不进入,直到满足条件才能进入,称为进入区。
  3. 在临界区后面加上一段称为离开区的代码,作为善后处理。

image.png

实现临界区管理的软件算法

此方法为每个进程设置一个标识,当这个标识值为true时表示此进程要求进入临界区,另外在设置一个指示器turn以指示可以由哪个进程进入临界区,当turn = i的时候表示pi进程可以进入临界区。

实现临界区管理的硬件设施

关中断

我们知道一个进程切换到另一个进程会发生中断,如果把中断关闭,那么在处理器上的进程会一直运行,不会被打断。

关中断的方法简单、有效,但关中断的时间过长会影响性能和系统效率;不适合用于多处理器系统,一个处理器关中断,并不能防止进程在其他处理器上执行相同的临界区代码。

测试并设置指令

机器指令TS(Test and Set)的缩写,它有布尔参数x和返回条件码,当TS(&x)时,x为true时则把x设置为false

TS指令管理临界区时,可把一个临界区与一个布尔变量S相连,由于变量S代表了临界资源的状态,可把它看成一把锁。

初始值设为true,表示没有进程在临界区内,系统利用TS指令实现在临界区内的上锁和开锁。

在进入临界区时,把s值置为true,当退出临界区的时候,把s值置为true

对换指令

对换指令的功能就是交换两个字的内容。

为每个临界区设置布尔型锁变量,如lock,当其值为false的时候表示无进程在临界区。

题目练习

image.png

image.png

image.png

image.png

image.png

image.png

image.png