1️⃣ 基本概念

⭐️ 临界资源

🔴 两种资源的共享方式:

  • 互斥共享方式:一段时间内只允许应该进程访问该资源,被称为临界资源、互斥资源、共享变量
  • 同时共享方式:一段时间内允许多个进程"同时"访问资源

⭐️ 临界区

在每个进程中访问临界资源的程序叫做临界区

do{
    entry section; //进入区 负责检查是否可进入临界区,若可进入,则对临界区上锁
    critical section; //临界区  坊问临界区的那段代码
    exit section; //退出区 解锁
    remainder section //剩余区 进程中除了进入区、退出区其他之外部分的代码
}

为了防止对临界区资源的互斥访问,同时要保证系统整体性能需要遵循以下原则

  1. 空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区;
  2. 忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待;
  3. 有限等待。对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿);
  4. 让权等待。当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。

⭐️ 互斥实现的方法

image-20240919213738883

硬件实现:当一个进程进入临界区,就屏蔽所有中断,成本高

软件实现方式:在进入区设置标识符来标记是否有进程在临界区

🌟 软件实现

⭕️ 单标志法

image-20240919213840743

image-20240919213845071

⭕️ 双标志先检查法

image-20240919213902000

image-20240919213905983

⭕️ 双标志后检查法

image-20240919214006093

image-20240919214010351

⭕️ Peterson算法

image-20240919214022853

image-20240919214026331

image-20240919214030537

🌟 硬件实现

⭕️ 中断屏蔽

image-20240919214100824

⭕️ TS指令/TSL指令

image-20240919214116827

⭕️ Swap指令XCHG指令

image-20240919214129682

⭐️ 同步

多个相互合作的进程,在一些关键点上可能需要互相等待或互相交换信息,这种相互制约的关系称为进程同步(直接制约)

也就是一个进程运行到某一时刻是,需要另一个进程为它提供消息,在消息还未达到之前,就处于等待状态,消息达到就唤醒该进程

2️⃣ 信号量

image-20240919214211234

⭐️ 整型

🔴 如果wait操作中的信号量S<= 0,就会不断测试,因此该机制没有遵循让权等待,而是使进程进入了一个忙等的状态

image-20240919214228191

⭐️ 记录型

image-20240919214253439

image-20240919214256813

image-20240919214300769