实现临界区互斥的基本方法
#进程互斥的软件实现方法
四个算法如下
单标志法
双标志先检查法
双标志后检查法
Peterson算法
#进程互斥的硬件实现方法
--
#中断屏蔽方法
利用“开/关中断指令”实现(与原语的视线思想相同,即在某进程开始访问临界区到结束访问为止都不允许中断,故也不会发生进程切换)
*优点*:简单高效
*缺点*:不适用多处理机;只适用于操作系统内核进程,不适用于用户进程(因为开/关中断指令只能运行在内核态,不能让用户随意使用)
#TestAndSet指令
简称TS指令
TSL指令是用硬件实现的,执行的过程不允许被中断,只能一气呵成
TestAndSet会将lock上锁,但是返回的又是lock未上锁之前的值
这样一来,lock=false时,while跳过,并执行临界区代码段
lock=true时,卡while循环,直到某次循环传入的lock值变成了false(也就是其他进程释放了临界区资源)
进入临界区后退出时会解锁,使lock=false,使其他进程能够再次进入临界区
*优点*:实现简单,无需软件实现方法那样严格检查是否会有逻辑漏洞;适用于多处理机环境
*缺点*:不满足“让权等待”原则,暂时无法进入临界区的进程会占用cpu并循环执行TSL指令,从而导致“忙等”
#Swap指令
也叫Exchange指令,XCHG指令
Swap指令是用硬件实现的
虽然逻辑上Swap和TSL指令并无太大区别,自己看图理解
*优缺点和TSL一样*
#互斥锁
解决临界区最简单的工具就是*互斥锁*
进程进入临界区获得锁,退出临界区是释放锁
函数acquire()获得锁,release()释放锁
acquire()和release()必须是原子操作,故通常采用硬件机制来实现
*缺点*:“忙等待”,和TSL指令,swap指令,单标志法的原因相同,所以不太适用于单处理机
一般这种“忙等待”也称之为*自旋锁*
*特性*:
需忙等,进程时间片用完才会下处理机,违反“让权等待”
优点:等待期间不用切换进程上下文,多处理机系统中,若上锁时间短,则等待代价很低
常用于多处理机系统个,一个核忙等,其他和照常工作,并快速释放临界区
不太适用于但处理机系统,忙等的过程不可能解锁