进程互斥的软件实现方法,硬件实现方法以及互斥锁

1.进程互斥的软件实现方法

1.单标志法

1.算法思想:

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

2.例子

在这里插入图片描述
在这里插入图片描述
因此,该算法可以实现“同一时刻最多只允许一个进程访问临界区”。

3.主要问题

只能按P0 ⟶ \longrightarrow P1 ⟶ \longrightarrow P0 ⟶ \longrightarrow P1 ⟶ \longrightarrow …………这样轮流访问。
这种必须“轮流访问”带来的问题是,如果此时允许进入临界区的进程是P0,
而P0一直不访问临界区,那么虽然此时临界区空闲,但是并不允许P1访问。

因此,单标志法存在的主要问题是:违背“空闲让进”原则。

2.双标志先检查

1.算法思想:

设置一个布尔型数组flag],数组中各个元素用来标记各进程想进入临界区的意愿
比如“ f l a g [ 0 ] = t u r e flag[0] =ture flag[0]=ture”意味着0号进程P0现在想要进入临界区。
每个进程在进入临界区之前先检查当前有没有别的进程想进入临界区,
如果没有,则把自身对应的标志 f l a g [ l i ] flag[li] flag[li]设为 t r u e true true,之后开始访问临界区。

2.例子

在这里插入图片描述

3.主要问题

若按照①⑤②⑥③⑦…的顺序执行,P0和P1将会同时访问临界区。
因此,双标志先检查法的主要问题是:违反“忙则等待”原则。
原因在于,进入区的“检查”和“上锁”两个处理不是一气呵成的。
“检查”后,“上锁”前可能发生进程切换。

3.双标志后检查

1.算法思想:

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

2.例子

在这里插入图片描述

3.主要问题

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

4.Peterson算法

1.算法思想:

结合双标志法、单标志法的思想。
如果双方都争着想进入临界区,那可以让进程尝试“孔融让梨”(谦让)。
做一个有礼貌的进程。

2.例子

在这里插入图片描述

3.主要问题

Peterson算法用软件方法解决了进程互斥问题,遵循了空闲让进、忙则等待、有限等待三个原则,但是依然未遵循让权等待的原则。

2.进程互斥的硬件实现方法

1.中断屏蔽方法

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

1.优缺点
  • 优点:简单、高效
  • 缺点:不适用于多处理机;只适用于操作系统内核进程,不适用于用户进程(因为开/关中断指令只能运行在内核态,这组指令如果能让用户随意使用会很危险)

2.TestAndSet (TS指令/TSL指令)

简称TS指令,也有地方称为TestAndSetLock指令,或TSL指令。
TSL指令是用硬件实现的,执行的过程不允许被中断,只能一气呵成。
以下是用c语言描述的逻辑:
在这里插入图片描述

  1. 若刚开始lock是false,则TSL返回的old值为false,while循环条件不满足,直接跳过循环,进入临界区。
  2. 若刚开始lock是true,则执行TLS后old返回的值为true,while循环条件满足,会一直循环,直到当前访问临界区的进程在退出区进行“解锁”。
  3. 相比软件实现方法,TSL指令把“上锁”和“检查”操作用硬件的方式变成了一气呵成的原子操作。
1.优缺点
  • 优点:实现简单,无需像软件实现方法那样严格检查是否会有逻辑漏洞;适用于多处理机环境
  • 缺点:不满足“让权等待”原则,暂时无法进入临界区的进程会占用CPU并循环执行TSL指令,从而导致“忙等”。

3.Swap指令(XCHG指令)

有的地方也叫Exchange指令,或简称XCHG指令。
Swap指令是用硬件实现的,执行的过程不允许被中断,只能一气呵成。
以下是用c语言描述的逻辑:
在这里插入图片描述
逻辑上来看Swap和TSL并无太大区别,都是先记录下此时临界区是否已经被上锁
(记录在old变量上),再将上锁标记lock设置为 true,最后检查old,
如果old为 false则说明之前没有别的进程对临界区上锁,则可跳出循环,进入临界区。

1.优缺点
  • 优点:实现简单,无需像软件实现方法那样严格检查是否会有逻辑漏洞;适用于多处理机环境
  • 缺点:不满足“让权等待”原则,暂时无法进入临界区的进程会占用CPU并循环执行TSL指令,从而导致“忙等”。

3.互斥锁

1.解决临界区最简单的工具就是互斥锁( mutex lock)。

一个进程在进入临界区时应获得锁;在退出临界区时释放锁。
函数acquire()获得锁,而函数release()释放锁。

每个互斥锁有一个布尔变量 available,表示锁是否可用。
如果锁是可用的,调用acqiure()会成功,且锁不再可用。
当一个进程试图获取不可用的锁时,会被阻塞,直到锁被释放。
在这里插入图片描述

acquire()或release()的执行必须是原子操作,因此互斥锁通常采用硬件机制来实现。

2.缺点:

互斥锁的主要缺点是忙等待,当有一个进程在临界区中,
任何其他进程在进入临界区时必须连续循环调用acquire()。
当多个进程共享同一CPU时,就浪费了CPU周期。
因此,互斥锁通常用于多处理器系统,一个线程可以在一个处理器上等待,不影响其他线程的执行。

3.自旋锁

需要连续循环忙等的互斥锁,都可称为自旋锁(spin lock),如TSL指令、swap指令、单标志法。

  • 需忙等,进程时间片用完才下处理机,违反“让权等待”
  • 优点:等待期间不用切换进程上下文,多处理器系统中,若上锁的时间短,则等待代价很低常用于多处理器系统,一个核忙等,其他核照常工作,并快速释放临界区
  • 不太适用于单处理机系统,忙等的过程中不可能解锁

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

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

相关文章

Polygon Mide状态模型:解决状态膨胀,而不牺牲隐私和去中心化

1. 引言 前序博客有: Polygon Miden:扩展以太坊功能集的ZK-optimized rollupPolygon Miden zkRollup中的UTXO账户混合状态模型Polygon Miden交易模型:Actor模式 ZKP > 并行 隐私 在Polygon Miden交易模型:Actor模…

定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”

各位CSDN的uu们好呀,今天,小雅兰的内容是51单片机中的定时器以及按键控制LED流水灯模式&定时器时钟,下面,让我们进入51单片机的世界吧!!! 定时器 按键控制LED流水灯模式 定时器时钟 源代…

微服务技术栈-Docker应用部署

文章目录 前言一、数据卷二、Docker 应用部署1、MySQL部署2、Tomcat部署3、Nginx部署4、Redis部署5、Kafka部署 总结 前言 之前文章讲到过,docker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器,接下来我们将…

数据结构与算法-(7)---栈的应用-(4)后缀表达式求值

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

vue 使用 创建二维数组响应数据 渲染 echarts图标

目前我遇到的情况就是用动态的二维数组数据渲染echarts图标,我们从后端收到的接口一般是个一维数组,需要手动构建并且保证响应式。接下来我做了个案例 一、案例总逻辑 1. 先创建一个vue项目 2. 添加 echarts依赖 3. 模拟数据请求,构建二维数组…

DevicData-D-XXXXXXXX勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

引言: 在数字时代,数据安全成为一项至关重要的挑战。DevicData-D-XXXXXXXX勒索病毒(以下简称DevicData病毒)是这场战斗中的新敌人,它能够以毁灭性的方式加密您的数据,迫使您在数据和时间之间做出艰难的选择…

59. 螺旋矩阵 II

题目描述 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2: 输入:n …

基于SpringBoot的房屋租赁管理系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 屋主管理 房屋信息管理 房屋租赁公告 租用订单管理 房屋信息管理 保洁管理 房屋信息 租用订单管理 取消订单管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 互联网发展至今,无论是其理论还是…

java Spring Boot在配置文件中关闭热部署

之前更大家一起搭建了一个热部署的开发环境 但是 大家要清楚一个情况 我们线上程序运行突然内部发生变化这是不可能的。 所以 他就只会对我们开发环境有效 是否开启 我们可以通过 application配置文件来完成 我这里是yml格式的 参考代码如下 spring:devtools:restart:enabled…

OpenWrt使用Privoxy插件修改UA

OpenWrt使用privoxy修改UA 1.安装privoxy插件 SSH连接到路由器 更新插件列表 update opkg安装插件 opkg install privoxy luci-app-privoxy luci-i18n-privoxy-zh-cn重启路由器 2.配置privoxy 打开配置页面 文件和目录 访问和控制 转发 杂项 日志 编辑配置 浏览器打开 …

代码随想录算法训练营第五十八天 | 动态规划 part 16 | 583. 两个字符串的删除操作、72. 编辑距离

目录 583. 两个字符串的删除操作思路思路2代码 72. 编辑距离思路代码 583. 两个字符串的删除操作 Leetcode 思路 dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。递推公…

云原生Kubernetes:简化K8S应用部署工具Helm

目录 一、理论 1.HELM 2.部署HELM2 3.部署HELM3 二、实验 1.部署 HELM2 2.部署HELM3 三、问题 1.api版本过期 2.helm初始化报错 3.pod状态为ImagePullBackOff 4.helm 命令显示 no repositories to show 的错误 5.Helm安装报错 6.git命令报错 7.CentOS 7 下git c…

volatile关键字使用总结

先说结论 1. volatile关键字可以让编译器层面减少优化,每次使用时必须从内存中取数据,而不是从cpu缓存或寄存器中获取 2. volatile关键字不能完全禁止指令重排,准确地说是两个volatile修饰的变量之间的命令不会进行指令重排 3. 使用volati…

常用Redis界面化软件

对于Redis的操作,前期有过介绍【Centos 下安装 Redis 及命令行操作】。而在Redis的日常开发调试中,可使用可视化软件方便进行操作。 本篇主要介绍Redis可视化的两款工具:Redis Desktop Manager和AnotherRedisDesktopManager。 1、Redis Desk…

C# 图解教程 第5版 —— 第1章 C# 和 .NET 框架

文章目录 1.1 在 .NET 之前1.2 .NET 时代1.2.1 .NET 框架的组成1.2.2 大大改进的编程环境 1.3 编译成 CIL1.4 编译成本机代码并执行1.5 CLR1.6 CLI1.7 各种缩写1.8 C# 的演化1.9 C# 和 Windows 的演化(*) 1.1 在 .NET 之前 MFC(Microsoft Fou…

[python 刷题] 4 Median of Two Sorted Arrays

[python 刷题] 4 Median of Two Sorted Arrays 题目: Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays. The overall run time complexity should be O ( l o g ( m n ) ) O(log (mn)) O(lo…

设计模式探索:从理论到实践的编码示例 (软件设计师笔记)

😀前言 设计模式,作为软件工程领域的核心概念之一,向我们展示了开发过程中面对的典型问题的经典解决方案。这些模式不仅帮助开发者创建更加结构化、模块化和可维护的代码,而且也促进了代码的复用性。通过这篇文章,我们…

Springboot+vue的开放性实验室管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的开放性实验室管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的开放性实验室管理系统,采用M&#xff08…

最新AI智能创作系统源码SparkAi系统V2.6.3/AI绘画系统/支持GPT联网提问/支持Prompt应用/支持国内AI模型

一、智能AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统,已支持OpenAIGPT全模型国内AI全模型,已支持国内AI模型 百度文心一言、微软Azure、阿里云通义千问模型、清华智谱AIChatGLM、科大讯飞星火大模型等。本期针对源码…

【立体视觉(五)】之立体匹配与SGM算法

【立体视觉(五)】之立体匹配与SGM算法 一、立体匹配一)基本步骤二)局部立体匹配三)全局立体匹配四)评价标准1. 均方误差(RMS)2. 错误匹配率百分比(PBM) 二、半全局(SGM)立体匹配一)代价计算二&a…