【计算机操作系统】进程互斥的实现方法

进程互斥的软件实现方法

单标志法

算法思想:一个进程在访问完临界区后会把使用临界区的权限转交给另一个进程,也就是说每个进程进入临界区的权限只能被另一个进程赋予

在这里插入图片描述

分析
turn 的初值为 0,即刚开始只允许 0 号进程进入临界区
若 P1 先上处理机运行,则会一直卡在 ⑤,直到 P1 的时间片用完,发生调度,切换 P0 上处理机运行
代码 ① 不会卡住 P0,P0 可以正常访问临界区,在 P0 访问临界区期间即使切换回 P1,P1 依然会卡在 ⑤
只有 P0 在退出区将 turn 改为 1 后,P1 才能进入临界区

结合以上例子可以看出,该算法可以实现“同一时刻最多只允许一个进程访问临界区”

缺点违背“空闲让进”原则,各进程只能轮流访问,轮流到不需要访问临界区的进程时,即使临界区空闲,也不允许其他进程访问

双标志先检查

算法思想:设置一个布尔型数组 flag[ ],数组中各个元素用来标记各进程想进入临界区的意愿(比如 flag[0]=true意味着 0 号进程 P0 现在想要进入临界区),每个进程在进入临界区之前先检查当前有没有别的进程想进入临界区,如果没有,则把自身对应的标志 flag[i] 设为 true,之后开始访问临界区

在这里插入图片描述

缺点违反“忙则等待”原则,比如上例中如果按照 ①⑤②⑥③⑦… 的顺序执行, P0 和 P1 将会同时进入临界区
原因在于,进入区的 “检查” 和 “上锁” 两个处理不是一气呵成的,“检查后上锁前” 可能发生进程切换

双标志后检查

算法思想:双标志先检查法的改版,前一个算法的问题是先“检查”后“上锁”,但是这两个操作又无法一气呵成,因此导致了两个进程同时进入临界区的问题,因此人们又想到**先“上锁”后“检查”**的方法,来避免上述问题

在这里插入图片描述

缺点:双标志后检查法虽然解决了“忙则等待”的问题,但是又违背了“空闲让进”和“有限等待“原则,会因各进程都长期无法访问临界资源而产生“饥饿”现象,比如上例中若按照 ①⑤②⑥… 的顺序执行,P0 和 P1 将都无法进入临界区

Peterson算法

算法思想:结合双标志法、单标志法的思想,为了防止两个进程为进入临界区而无限期等待,又设置了变量 turn,每个进程在先设置自己的 flag[ ] 标志后再设置 turn 标志,这时再同时检测另一个进程状态标志和允许进入标志,以便保证两个进程同时要求进入临界区时,只允许一个进程进入临界区

在这里插入图片描述

缺点:Peterson 算法用软件方法解决了进程互斥问题,遵循了空闲让进、忙则等待、有限等待 三个原则,但是依然未遵循让权等待的原则,但是相较于前面三个算法是最好的

进程互斥的硬件实现方法

中断屏蔽方法

利用“开/关中断指令”实现(与原语的实现思想相同,即在某进程开始访问临界区到结束访问为止都不允许被中断,也就不能发生进程切换,因此也不可能发生两个同时访问临界区的情况)

优点:简单高效

缺点:不适用于多处理机(因为关中断指令只对执行关中断指令的那个处理机有用);只适用于操作系统内核进程,不适用于用户进程(因为开/关中断指令只能运行在内核态,这组指令如果能让用户随意使用会很危险)

TestAndSet / TestAndSetLock(TS指令/TSL指令)

TestAndSet指令:这条指令是原子操作,即执行该代码时不允许被中断,其功能是读出指定标志后把该标志设置为真

以下是用 C 语言描述的 TSL 指令的逻辑

在这里插入图片描述

分析

若刚开始 lock 是 false,则 TSL 返回的 old 值为 false,while 循环条件不满足,直接跳过循环,进入临界区
若刚开始 lock 是 true,则执行 TLS 后 old 返回的值为 true,while 循环条件满足,会一直循环,直到当前访问临界区的进程在退出区进行“解锁”

相比软件实现方法,TSL指令把“上锁”和“检查”操作用硬件的方式变成了一气呵成的原子操作

优点:实现简单,无需像软件实现方法那样严格检查是否会有逻辑漏洞;适用于多处理机环境

缺点不满足“让权等待”原则,暂时无法进入临界区的进程会占用CPU并循环执行TSL指令,从而导致“忙等”

Swap指令(XCHG指令)

Swap指令:该指令的功能是交换两个字(字节)的内容

以下是用 C 语言描述的 Swap 指令的逻辑

在这里插入图片描述

分析

逻辑上来看 Swap 和 TSL 并无太大区别,都是先记录下此时临界区是否已经被上锁(记录在 old 变量上),再将上锁标记 lock 设置为 true,最后检查 old,如果 old 为 false 则说明之前没有别的进程对临界区上锁,则可跳出循环,进入临界区

优点:实现简单,无需像软件实现方法那样严格检查是否会有逻辑漏洞;适用于多处理机环境

缺点不满足“让权等待”原则,暂时无法进入临界区的进程会占用CPU并循环执行Swap指令,从而导致“忙等”


计算机操作系统】 专栏的文章 均有参考 《王道计算机考研 操作系统》 课程视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值