当前位置: 首页 > news >正文

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

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

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

相关文章:

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

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

Java面试题-数据库

数据库相关 MySQL的索引使用 默认会有主键索引。 索引分类:单值索引、复合索引、唯一索引 详细文章 MySQL explain 分析 MySQL通过explain关键字分析SQL的执行计划。(Oracle通过EXPLAIN PLAN FOR sql) IDSELECT_TYPETABLEPARTITIONSTYPEPOSS…...

select 与 where、group by、order by、limit 子句执行优先级比较

当 select 和 其他三种语句的一者或者多者同时出现时,他们之间是存在执行先后顺序的。 他们的优先级顺序是:where > group by > select > order by > limit 目录 1、select 与 where 2、group by 与 where 、select 2、select 与 order…...

【Docker】用开源umami监控你的站点访问量

新年到,祝大家兔年吉祥!🎉 1.介绍 umami是一个开源的站点访问量监看程序,其支持docker部署到自己的服务器上。相比较百度等收费的网站信息监看,这种方式对于小站长来说更加实惠一些 2.docker安装的坑 2.1 docker-co…...

java环境配置

java环境配置步骤下载jdk安装jdk配置环境变量通过控制台命令验证配置是否成功大功告成安装教程: https://blog.csdn.net/m0_37220730/article/details/103585266 下载jdk 若不理解JDK/JRE/JVM的关系,可以点此查看初识Java(概念、版本迭代、…...

Linux系统服务:Apache安装及配置应用

目录 一、Apache安装 1、Apache简介 2、Yum安装 3、编译安装 4、服务管理 5、编译安装实现systemctl服务管理 二、Apache配置应用 1、基础应用 2、隐藏版本号 3、更改监听端口 一、Apache安装 1、Apache简介 Apache即阿帕奇是一款开源的、世界使用排名第一的Web服务…...

动态规划(Dynamic Programming)——背包问题

动态规划(Dynamic Programming) 背包问题 目录动态规划(Dynamic Programming)背包问题01背包问题输入格式输出格式数据范围输入样例输出样例:二维一维完全背包问题多重背包问题输入格式输出格式数据范围输入样例输出样例:数据范围二进制优化分组背包问题…...

JVM学习02:内存结构

JVM学习02:内存结构 1. 程序计数器 1.1、定义 Program Counter Register 程序计数器(寄存器) 作用:是记住下一条jvm指令的执行地址 特点: 是线程私有的不会存在内存溢出 1.2、作用 程序计数器物理上是由寄存器来实…...

6年软件测试经验,从我自己的角度理解自动化测试

接触了不少同行,由于他们之前一直做手工测试,现在很迫切希望做自动化测试,其中不乏工作5年以上的人。 本人从事软件自动化测试已经近6年,从server端到web端,从API到mobile,切身体会到自动化带来的好处与痛楚…...

三种方式查看linux终端terminal是否可以访问外网ping,curl,wget

方法1:ping注意不要用ping www.google.com.hk来验证,因为有墙,墙阻止了你接受网址发回的响应数据。即使你那啥过,浏览器都可以访问Google,terminal里面也是无法得到响应 百度在墙内,所以可以正常拿到响应信…...

【Call for papers】SIGCOMM-2023(CCF-A/计算机网络/2023年2月15日截稿)

ACM SIGCOMM is the flagship annual conference of the ACM Special Interest Group on Data Communication (SIGCOMM). ACM SIGCOMM 2023, the 37th edition of the conference series, will be held in New York City, US, September 10 - 14, 2023. 文章目录1.会议信息2.时…...

Chapter5:机器人感知

ROS1{\rm ROS1}ROS1的基础及应用,基于古月的课,各位可以去看,基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。 ROS{\rm ROS}ROS版本:ROS1{\rm ROS1}ROS1的Melodic{\rm Melodic}Melodic;实际机器人:Ha…...

[acwing周赛复盘] 第 90 场周赛20230211 补

[acwing周赛复盘] 第 90 场周赛20230211 补 一、本周周赛总结二、 4806. 首字母大写1. 题目描述2. 思路分析3. 代码实现三、4807. 找数字1. 题目描述2. 思路分析3. 代码实现四、4808. 构造字符串1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 T1 模拟T2 模拟…...

数组

一、数组中重复的数字题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1…...

MicroBlaze系列教程(4):AXI_UARTLITE的使用

文章目录 @[toc]AXI_UARTLITE简介MicroBlaze添加串口IP常用函数使用示例参考资料工程下载本文是Xilinx MicroBlaze系列教程的第4篇文章。 AXI_UARTLITE简介 axi_uartlite是Xilinx提供axi-lite接口的通用串口IP核,用AXI-Lite总线接口和用户进行交互,速度可以根据不同的芯片调…...

GO 中的 init 函数

前言 go 语言中有一个非常神奇的函数 init ,它可以在所有程序执行开始前被执行,并且每个 package 下面可以存在多个 init 函数,我们一起来看看这个奇怪的 init 函数。 init 特性 init 函数在 main 函数之前执行,并且是自动执行&#xff1b…...

使用C#编写k8s CRD Controller

本文项目地址:k8s-crd - Repos (azure.com)CRDCRD指的是Custom Resource Definition。开发者更多的关注k8s对于容器的编排与调度,这也是k8s最初惊艳开发者的地方。而k8s最具价值的地方是它提供了一套标准化、跨厂商的 API、结构和语义。k8s将它拥有的一切…...

Ansible---playbook剧本

目录 引言:什么是playbook? 一、Playbook 1.1、playbook中的核心元素 1.2、playbook中的基础组件 1.3、playbook格式说明 1.4、实例:httpd服务剧本 二、playbook中的模块 2.1、Templates 模块 2.2、tags 模块 2.3、Roles 模块 引言&…...

Delphi 中TImageCollection和TVirtualImageList 控件实现high-DPI

一、概述RAD Studio允许你通过使用TImageCollection组件和TVirtualImageList组件,在你的Windows VCL应用程序中包含缩放、高DPI、多分辨率的图像。这两个组件位于Windows 10面板中:注意:如果你使用FireMonkey进行跨平台应用,请看T…...

Ros中如何给UR5配置自定义工具 | 在Rviz中给UR5机器人装载定义工具 | UR5配置自定义末端执行器

前言 在学习和项目研究的过程中,我需要在Ur5e上装上工具,以对现实场景进行仿真。网上会有一些装载/配置现成的夹爪,例如Robotiq等。但和我们装载自定义工具的场景还有些差异,因此写一篇博客记录,可能有偏差。如果有问…...

数据库 delete 表数据后,磁盘空间为什么还是被一直占用?

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 最近有个上位机获取下位机上报数据的项目&#xff0c…...

docker-微服务篇

docker学习笔记1.docker简介1.1为什么会出现docker?1.2docker理念1.3虚拟机(virtual machine)1.4容器虚拟化技术1.5一次构建到处运行2.docker安装2.1前提条件2.2docker基本构成2.3docker安装步骤*2.4测试镜像3.docker常用命令3.1 启动docker3…...

图像优化篇

目录(1)矢量图(2)位图 2.1 分辨率2,图像格式格式选择建议:(1)矢量图 被定义为一个对象,包括颜色,大小,形状,以及屏幕位置等属性&…...

在surface go 2上安装ubuntu 20.04

在surface go 2上安装ubuntu 20.04 1.制作安装盘 下载ubuntu系统的iso文件 使用Rufus软件将u盘制作为ubuntu系统的安装盘 2.在surface go 2上操作 禁用快速启动 在 Windows 中,禁用“电源选项”中的“快速启动”>选择电源按钮的功能 禁用 Bitlocker 在 Wi…...

Java:SpringMVC的使用(1)

目录第一章、SpringMVC基本了解1.1 概述1.2 SpringMVC处理请求原理简图第二章、SpringMVC搭建框架1、搭建SpringMVC框架1.1 创建工程【web工程】1.2 导入jar包1.3 编写配置文件(1) web.xml注册DispatcherServlet(2) springmvc.xml(3) index.html1.4 编写请求处理器【Controller…...

自动化测试岗位求职简历编写规范+注意事项,让你的简历脱颖而出

目录 前言 1.个人信息 2.教育背景(写最高学历) 3.个人技能(按精通/掌握/熟练/了解层次来写) 4.工作经历 5.工作经验/项目经历 6.自我评价 总结 前言 挑选一个阅读舒适度不错的模板 HR和面试官看的简历多,都是快速阅读,舒适度特别重要&#xff1b…...

C 字符串

在 C 语言中,字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。空字符(Null character)又称结束符,缩写 NUL,是一个数值为 0 的控制字符,\0 是转义字符&#…...

【每日一题Day115】LC2335装满杯子需要的最短总时长 | 贪心

装满杯子需要的最短总时长【LC2335】 You have a water dispenser that can dispense cold, warm, and hot water. Every second, you can either fill up 2 cups with different types of water, or 1 cup of any type of water. You are given a 0-indexed integer array amo…...

Flink流计算处理-旁路输出

使用Flink做流数据处理时,除了主流数据输出,还自定义侧流输出即旁路输出,以实现灵活的数据拆分。 定义旁路输出标签 首先需要定义一个OutputTag,代码如下: // 这需要是一个匿名的内部类,以便我们分析类型…...

nginx正向代理的配置和使用

nginx正向代理的配置和使用 nginx正向代理的配置和使用nginx正向代理的配置和使用安装包准备下载nginx安装包下载正向代理模块的包版本与模块对照表部署nginx服务上传nginx包和正向模块包解压,改名安装nginx配置正向代理创建nginx用户检查nginx配置并启动nginx服务所在服务器验…...

长春找工作哪个网站好/百度高级搜索功能

用PHP4.2书写安全的脚本_PHP在很长一段时间内,PHP作为服务器端脚本语言的最大卖点之一就是会为从表单提交的值自动建立一个全局变量。在PHP 4.1中,PHP的制作者们推荐了一个访问提交数据的替代手段。在PHP 4.2中,他们取消了那种老的做法&#…...

陕西响应式网站建设公司/网站推广优化怎样

本篇文章给大家带来的内容是关于vue和iview以及less如何实现换肤的功能(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。项目搭建用的vue—cli,css框架选择的iview1、首先安装less支持npm install --save-…...

wordpress plupload/百度关键词关键词大全

新员工是宁波银行上海分行未来三到五年的中坚力量,关注新员工培养,帮助新员工训练出良好的工作习惯和学习习惯,是宁波银行上海分行新员工队伍建设的整体目标。为提升新员工战斗力、提高新员工职业素养、加强新员工间的沟通协作,8月…...

电商网页制作素材/百度网站优化排名

告别枯燥,60秒学会一个小例子! 目前已发布jackzhenguo/python-small-examples​github.com 点击上面链接,下载PDF版本 包括:Python之基,Python之正,Python之例,Python之能章节,共计1…...

a5wordpress模板/免费引流在线推广

文章目录- 写在开头的话ssh的基本概念ssh的登录验证模式账户密码验证格式密钥对验证ssh(secure shell)的服务搭建Linux服务器的建立(VMware克隆形式)ssh(secure shell)服务的搭建安全防护的关闭Linux上用户名密码登录ssh服务器端查看是否安装openssh安装…...

没有备案的网站怎么访问不了/成人短期就业培训班

21日,以“向未来出发”为主题的秋季运动会在童心小学举行。现场,很多小朋友利用纸箱、报纸等废旧材料,每个人都制作了一身特别的时装,有的像机器人,有的像公主,有的像国王,引得全场观众热烈欢呼…...