2.12、进程互斥的软件实现方法

news2024/9/21 19:40:23

image-20230129215232588

学习提示:

  1. 理解各个算法的思想、原理
  2. 结合上小节学习的 “实现互斥的四个逻辑部分”,重点理解各算法在进入区、退出区都做了什么
  3. 分析各算法存在的缺陷(结合 “实现互斥要遵循的四个原则” 进行分析)

1、单标志法

算法思想:两个进程在访问完临界区后会把使用临界区的权限转交给另一个进程。

  • 也就是说 每个进程进入临界区的权限只能被另一个进程赋予 \color{red}每个进程进入临界区的权限只能被另一个进程赋予 每个进程进入临界区的权限只能被另一个进程赋予

image-20230129223624058

turn 的初值为 0,即刚开始只允许 0 号进程进入临界区。

P1 先上处理机运行,则会一直卡在 ⑤。直到 P1 的时间片用完,发生调度,切换 P0 上处理机运行。

代码 ① 不会卡住 P0P0 可以正常访问临界区,在 P0 访问临界区期间即时切换回 P1P1 依然会卡在⑤。

只有 P0 在退出区将 turn 改为 1 后,P1 才能进入临界区。

因此,该算法可以实现 “同一时刻最多只允许一个进程访问临界区


turn 表示当前允许进入临界区的进程号,而只有当前允许进入临界区的进程在访问了临界区之后,才会修改 turn 的值。

  • 也就是说,对于临界区的访问,一定是按 P0→P1→P0→P1→…这样轮流访问。

这种必须 “轮流访问” 带来的问题是,

  • 如果此时允许进入临界区的进程是 P0,而 P0 一直不访问临界区,那么虽然此时临界区空闲,但是并不允许 P1 访问。

因此,单标志法存在的主要问题是:

  • 违背空闲让进原则 \color{red}违背空闲让进原则 违背空闲让进原则

2、双标志先检查法

算法思想:设置一个布尔型数组 flag[] ,数组中各个元素用来标记各进程想进入临界区的意愿

  • 比如 “flag[0] = true” 意味着 0 号进程 P0 现在想要进入临界区。

每个进程在进入临界区之前先检查当前有没有别的进程想进入临界区,

  • 如果没有,则把自身对应的标志 flag[i] 设为 true,之后开始访问临界区。

image-20230129225120954

若按照 ①⑤②⑥③⑦… 顺序执行,P0P1 将会同时访问临界区。

因此,双标志先检查法存在的主要问题是:

  • 违背忙则等待原则 \color{red}违背忙则等待原则 违背忙则等待原则

原因在于,进入区的 “检查” 和 “上锁” 两个处理不是一气呵成的。“检查” 后,“上锁” 前可能发生讲程切换

3、双标志后检查法

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

  • 因此,人们又想到先 “上锁” 后 “检查” 的方法,来避免上述问题。

image-20230129225707180

若按照 ①⑤②⑥… 的顺序执行,P0P1 将都无法进入临界区

  • 相当于死锁,两方都一直等待对方

因此,双标志后检查法虽然解决了 “忙则等待” 的问题,

  • 但是 又违背了空闲让进和有限等待原则 \color{red}又违背了空闲让进和有限等待原则 又违背了空闲让进和有限等待原则

会因各进程都长期无法访问临界资源而产生 “饥饿” 现象。

两个进程都争着想进入临界区,但是谁也不让谁,最后谁都无法进入临界区。

4、Peterson 算法

算法思想:双标志后检查法中,两个进程都争着想进入临界区,但是谁也不让谁,最后谁都无法进入临界区。

Gary L.Peterson 想到了一种方法,如果双方都争着想进入临界区,那可以让进程尝试 “孔融让梨” ,主动让对方先使用临界区。

image-20230129230951082

两种双标志法的问题都是由于进入区的几个操作不能一气呵成导致的。

我们可以推理验证在 Peterson 算法中,两个进程进入区中的各个操作按不同的顺序穿插执行会发生什么情况:

  • ①②③⑥⑦⑧…

  • ①⑥②③…

因为 turn 只有一个,必然有一个判断是 false,所以不会产生死锁

抛开 turn 不谈,就回到了双标志后检查法,所以不会出现单标志法的问题

  • 单标志法的问题:如果此时允许进入临界区的进程是 P0,而 P0 一直不访问临界区,那么虽然此时临界区空闲,但是并不允许 P1 访问。

进入区:

  1. 主动争取;
  2. 主动谦让;
  3. 检查对方是否也想使用,且最后一次是不是自己说了“客气话”

例如

  • 香香想用马桶,如果需要的话,可以先让臭臭用,

    检查发现臭臭不需要,于是香香访问临界区—―马桶。

  • 臭臭想用马桶,可以让香香先用

    香香想用马桶,可以让臭臭先用

    经检查发现香香也要使用,但最后是臭臭说了 “客气话”,因此臭臭循环等待


Peterson 算法用软件方法解决了进程互斥问题,

  • 遵循了空闲让进、忙则等待、有限等待三个原则 \color{red}遵循了空闲让进、忙则等待、有限等待三个原则 遵循了空闲让进、忙则等待、有限等待三个原则

  • 但是依然 未遵循让权等待 \color{red}未遵循让权等待 未遵循让权等待的原则。

Peterson 算法相较于之前三种软件解决方案来说,是最好的,但依然不够好。

5、整体框架

image-20230129232806721

上述并不是概览,不同的算法应该相应的分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/341574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SonicWall:请立即修复SMA 1000 漏洞

近日,网络安全供应商SonicWall发布了关于安全移动访问 (SMA) 1000设备的三个安全漏洞的紧急报告,其中包括一个高威胁性的身份验证绕过漏洞。SonicWall指出,攻击者可以利用这些漏洞绕过授权,并可能破坏易受攻击的设备。 从报告中可…

Cow Acrobats ( 临项交换贪心 )

题目大意: N 头牛 , 每头牛有一个重量(Weight)和一个力量(Strenth) , N头牛进行排列 , 第 i 头牛的风险值为其上所有牛总重减去自身力量 , 问如何排列可以使最大风险值最小 , 求出这个最小的最大风险值&am…

Java JCP

Java JCP目录概述需求:设计思路参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive. happy for hardess to solv…

GIS在地质灾害危险性评估与灾后重建中的实践技术应用及python机器学习灾害易发性评价模型建立与优化

地质灾害是指全球地壳自然地质演化过程中,由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下,地质灾害在世界范围内频繁发生。我国除滑坡灾害外,还包括崩塌、泥石流、地面沉…

手动部署ECS线上数据库及使用

文章参考自手动部署MySQL数据库(CentOS 7) (aliyun.com)MySQL是一个关系型数据库管理系统,常用于LAMP和LNMP等网站场景中。本教程介绍如何在Linux系统ECS实例上安装、配置以及远程访问MySQL数据库。前提条件已创建一台ECS实例。具体操作&…

[ 常用工具篇 ] CobaltStrike(CS神器)基础(一) -- 安装及设置监听器详解

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

YOLO-V5轻松上手

之前介绍了YOLO-V1~V4版本各做了哪些事以及相较于之前版本的改进。有的人或许会想“直接学习最近版本的算法不好吗”,在我看来,每一个年代的版本/算法都凝聚着当年学术界的智慧,即便是它被淘汰了也依旧有值得思考的地方,或是可以使…

工业无线物联网解决方案中的缺陷可让攻击者深入访问OT网络

运营技术 (OT) 团队通常通过无线和蜂窝解决方案将工业控制系统 (ICS) 连接到远程控制和监控中心,这些解决方案有时带有供应商运行的基于云的管理界面。 这些连接解决方案,也称为工业无线物联网设备,增加了 OT 网络的攻击面,并且可…

CentOS8基础篇6:文件属性的读取和修改

一、文件属性 每一行代表对应文件或目录的详细信息。从左到右具体的含义是文件属性、文件数、拥有者、所属的组、文件大小、建立月份、建立日期、建立年份或时间、以及文件名。其中“建立年份或时间”字段,如果文件是今年建立的,则显示具体时间&#xf…

文献阅读笔记 # GraphCodeBERT: Pre-training Code Representations with Data Flow

《GraphCodeBERT: Pre-training Code Representations with Data Flow》ICLR 2021 (TH-CPL A会,公认顶会,但未上 CCF 榜)作者部分与 CodeBERT 重叠,主要来自 MSRA Intern 和 MSRA 研究员,学生来自国内多个顶尖高校。资源&#xff…

java 黑马头条 day3 实名认证分布式事务问题 seata

1 完善实名认证功能 1.1 实名认证分布式事务问题 1.1.1 问题分析 在昨天的实名认证代码中,审核完毕后添加 id5的演示异常,重新使用postman进行测试, 会发现 出现异常后 本地方法因为有 Transactional注解 对ap_user ap_user_realname的操作会回滚 而…

【Docker】配置lsky pro兰空图床

Docker 部署 lsky pro 兰空图床的教程 本文首发于 慕雪的寒舍 1.使用Docker部署 命令比较简单,用下面的即可 docker run -d \ --name lsky \ -p 14728:80 \ -v /root/docker/lsky:/var/www/html \ halcyonazure/lsky-pro-docker:latest--name 设置容器名字为 lsky…

基于VS调试分析 + 堆栈观察问题代码段

文章目录问题代码段1 —— 阶乘之和问题代码段2 —— 越界的危害① 发现问题② 分析问题③ 思考问题【⭐堆栈原理⭐】④ 解决问题【DeBug与Release】👨程序员与测试人员👩✒总结与提炼问题代码段1 —— 阶乘之和 先来看一道C语言中比较基础的题目&#x…

新能源汽车PK燃油汽车,首次胜出,输赢真的那么重要?

新能源汽车PK燃油汽车,输赢真的那么重要?是的。【科技明说 | 每日看点】今天看到一个新能源汽车领域的消息,我觉得很有意思,是说中国新能源汽车满意度水平首次超过了燃油汽车,你们觉得是这样么?…

语义通信:DeepSC用于文本传输也太香了吧

论文标题:Deep Learning Enabled Semantic Communication Systems 论文链接:https://arxiv.org/abs/2006.10685v1 摘要 最近,人们开发了支持深度学习的端到端(E2E)通信系统,以合并传统通信系统中的所有物…

React中JSX的用法和理解

React的特点 React是用于构建用户界面的高效且灵活的 JavaScript 库,采用组件化模式和声明式编码;使用DOMdiff算法,最大限度地减少与DOM的交互。 相关js库 react.js:React核心库。react-dom.js:提供操作DOM的react扩…

Eclipse导出jar时的错误

文章目录一、发现问题二、解决问题三、新的问题今天,本来是风和日丽,轻风和畅的,复习的一天,直到我开始尝试导出 jar 可执行文件,兄弟们请记住这个词,我将被他折磨很久。一、发现问题 首先,我美…

RT-Thread MSH_CMD_EXPORT分析

RT-Thread MSH_CMD_EXPORT分析 1. 源码分析 在rt-thread中,使用FinSH,可以支持命令行。在源码中,使用MSH_CMD_EXPORT导出函数到对应命令。 extern void rt_show_version(void); long version(void) {rt_show_version();return 0; } MSH_CM…

实战超详细MySQL8离线安装

在RedHat中,RPM Bundle 方式安装MySQL8。建议一定要用 RPM Bndle 版本安装,包全。官网下载:https://dev.mysql.com/downloads/mysql/1.卸载mariadb,会与MySQL安装冲突。rpm -qa | grep mariadb 查看有无mariadb如果有&#xff0…

数据机构笔记哈夫曼编码

1.什么是哈夫曼树?哈夫曼树经典问题:合并果堆问题:如果有三个果堆,其质量分别是1,2,3,我们现在需要将这三堆合并成一堆果堆,合并过程消耗体力等于两堆果堆的质量之和,求最小体力消耗值&#xff…