Skip to content

进程互斥

概念

进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。

我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源

对临界资源的访问,必须互斥地进行

  • 进入区
  • 临界区
  • 退出区
  • 剩余区

为了禁止两个进程同时进入临界区,需遵循以下准则

  • 空闲让进
  • 忙则等待
  • 有限等待
  • 让权等待

软件实现

进入区设置并检查一些标志 来标明是否有进程在临界区中,若已有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志

单标志法

单进程完成后让权给下一个进程

违背空闲让进

双标志先检查法

检查有没有别的在临界,没有就标志上锁

违背忙则等待,因为检查后上锁可能出现进程切换

双标志后检查法

先检查法反过来,先上锁再检查

违背空闲让进和有限等待,可能会饥饿死

Peterson算法

后检查+争抢的时候轮流让权

硬件实现

  • 开/关中断指令
  • TSL指令
  • Swap指令

信号量

上述方法都有缺陷,不能实现让权等待

为了更好的解决进程互斥与同步的问题,我们引入信号量机制

信号量即为一个变量,用于表示系统中资源的数量

同时我们还有一对原语: 进入原语wait(S),退出原语signal(S),简化为P(S),V(S) [1]

这里分为整数型信号量和记录型信号量

记录型信号量在整数型的基础上加入了阻塞队列机制

  • 整数型信号量
  • 记录型信号量: 引入队列

  1. 源自荷兰语wait和signal的首字母 ↩︎