王道操作系统考研笔记——2.3.2 进程互斥的软件实现方法

举报
ArimaMisaki 发表于 2022/08/09 22:25:25 2022/08/09
【摘要】 文章目录 2.3.2 进程互斥的软件实现方法2.3.2.1 单标志法2.3.2.2 双标志先检查法2.3.2.3 双标志后检查法2.3.2.4 Peterson算法2.3.2.5 小结 ...

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

知识总览

image-20220208171128877

2.3.2.1 单标志法

单标志法的算法思想是:两个进程在访问完临界区后会把使用临界区的权限转交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进程赋予。具体实现过程如下:

image-20220216175101867

对于turn表示当前允许进入临界区的进程号,而只有当前允许进入临界区的进程在访问了临界区之后,才会修改turn的值。也就是说,对于临界区的访问,一定是按p0→p1→p0→p1…这样轮流访问

这种必须轮流访问带来的问题是,如果此时允许进入临界区的进程是P0,而P0一直不访问临界区,那么虽然此时临界区空闲,但是并不允许P1访问。因此对于单标志法,其违背了空闲让进的原则。

2.3.2.2 双标志先检查法

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

image-20220216180541941

需要注意的是,如果按照152637的顺序执行,p0和p1将会同时访问临界区。因此对于双标志先检查法,其违背了忙则等待的原则。

之所以造成这种问题,就是因为进入区的检查上锁不是原子操作,在检查完的下一步还没上锁很有可能发生其他事件。

2.3.2.3 双标志后检查法

既然在前一个算法中,原因出在先检查后上锁,那我们调换一下顺序能否改变情况呢?

双标志后检查法的思想是:既然先检查后上锁不行,那我就先上锁,然后在检查。

image-20220216183243339

需要注意的是,如果按照1526的顺序执行,p0和p1将都无法进入临界区。

因此双标志后检查法虽然解决了忙则等待的问题,但是又违背了空闲让进有限等待原则,因为如果各进程都长期无法访问临界资源会产生饥饿现象。

2.3.2.4 Peterson算法

在双标志后检查法中,两个进程都争着想进入临界区,但是谁也不让谁,既然这样,那只需要有人礼让即可解决问题。

image-20220216184039531

如果按照123678的顺序,则相当于串行执行,这种方式肯定可以执行。

如果按照162378的顺序,那么进程0表明自己想进入临界区,进程1表明自己想进入临界区,回到2步骤,0进程表示愿意先让给1进程执行,然后在检查1也有意愿进入临界区和自己已经让位的情况下,自己处于等待状态。这时候回到7步骤,1号进程也表示自己愿意先让给0进程执行,然后在检查0也有意愿进入临界区和自己已经让位的情况下,自己也处于等待状态。此时回到步骤3,0号进程发现turn被修改为0了,说明自己可以不用等待让位了,先行一步作为后回到步骤8,进程P1也顺利做完了。

尽管Peterson算法用软件方法解决了进程互斥问题,遵循了空闲让进、忙则等待、有限等待三个原则,但是依然未遵循让权等待原则。但是相较于前面三种算法,其本身已然是最好。

2.3.2.5 小结

image-20220216185223288

文章来源: blog.csdn.net,作者:ArimaMisaki,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/chengyuhaomei520/article/details/123146717

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。