实现临界区互斥的基本方法

#进程互斥的软件实现方法


  • 四个算法如下
  • 单标志法
  • 双标志先检查法
  • 双标志后检查法
  • Peterson算法
  • #进程互斥的硬件实现方法

    --

  • #中断屏蔽方法
  • 利用“开/关中断指令”实现(与原语的视线思想相同,即在某进程开始访问临界区到结束访问为止都不允许中断,故也不会发生进程切换)
  • *优点*:简单高效
  • *缺点*:不适用多处理机;只适用于操作系统内核进程,不适用于用户进程(因为开/关中断指令只能运行在内核态,不能让用户随意使用)
  • #TestAndSet指令
  • 简称TS指令
  • TSL指令是用硬件实现的,执行的过程不允许被中断,只能一气呵成
  • Pasted image 20260630192733.png
  • TestAndSet会将lock上锁,但是返回的又是lock未上锁之前的值
  • 这样一来,lock=false时,while跳过,并执行临界区代码段
  • lock=true时,卡while循环,直到某次循环传入的lock值变成了false(也就是其他进程释放了临界区资源)
  • 进入临界区后退出时会解锁,使lock=false,使其他进程能够再次进入临界区
  • *优点*:实现简单,无需软件实现方法那样严格检查是否会有逻辑漏洞;适用于多处理机环境
  • *缺点*:不满足“让权等待”原则,暂时无法进入临界区的进程会占用cpu并循环执行TSL指令,从而导致“忙等”
  • #Swap指令
  • 也叫Exchange指令,XCHG指令
  • Swap指令是用硬件实现的
  • Pasted image 20260630193849.png
  • 虽然逻辑上Swap和TSL指令并无太大区别,自己看图理解
  • *优缺点和TSL一样*
  • #互斥锁

  • 解决临界区最简单的工具就是*互斥锁*
  • 进程进入临界区获得锁,退出临界区是释放锁
  • 函数acquire()获得锁,release()释放锁
  • acquire()和release()必须是原子操作,故通常采用硬件机制来实现
  • *缺点*:“忙等待”,和TSL指令,swap指令,单标志法的原因相同,所以不太适用于单处理机
  • 一般这种“忙等待”也称之为*自旋锁*
  • *特性*:
  • 需忙等,进程时间片用完才会下处理机,违反“让权等待”
  • 优点:等待期间不用切换进程上下文,多处理机系统中,若上锁时间短,则等待代价很低
  • 常用于多处理机系统个,一个核忙等,其他和照常工作,并快速释放临界区
  • 不太适用于但处理机系统,忙等的过程不可能解锁