2.3_3 进程互斥的硬件实现方法

文章目录

  • 2.3_3 进程互斥的硬件实现方法
    • (一)中断屏蔽方法
    • (二)TestAndSet指令
    • (三)Swap指令
  • 总结
    • (四)互斥锁

2.3_3 进程互斥的硬件实现方法

image-20240304030703149

学习提示:

1.理解各方法的原理

2.了解各方法的优缺点

(一)中断屏蔽方法

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

时访问临界区的情况)

image-20240304121413039

  优点:简单、高效。

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

为什么“不适用于多处理机”——因为关中断只对当前处理机有用。例如在处理机A上执行关中断,那么处理机B仍然是正常状态,处理机B上的进程仍然能够访问该临界区。

(二)TestAndSet指令

  简称TS指令,也有地方称为TestAndSetLock指令,或TSL指令。

  TSL指令是用硬件实现的,执行的过程不允许被中断,只能一气呵成。以下是用C语言描述的逻辑

image-20240304125307225

  若刚开始lock是false,则TSL返回的old值为false,while循环条件不满足,直接跳过循环,进入临界区。

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

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

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

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

(三)Swap指令

  有的地方叫Exchange指令,或简称XCHG指令。

  Swap指令是用硬件实现的,执行的过程不允许被中断,只能一气呵成。以下是用C语言描述的逻辑

image-20240304131627670

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

  所以,Swap指令的优点、缺点,和TSL大体上也是一样的。

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

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

总结

image-20240304132925679

(四)互斥锁

  解决临界区最简单的工具就是互斥锁(mutex lock)。一个进程在进入临界区时应获得锁;在退出临界区时释放锁。函数acquire()获得锁,而函数release()释放锁。

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

acquire() {		//获得锁while(!available);	//忙等待available = false;	//获得锁
}release() {		//释放锁available = true;	//释放锁
}

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

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

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

特性

  1.需忙等,进程时间片用完才下处理机,违反“让权等待”。

  2.优点:等待期间不用切换进程上下文,多处理器系统中,若上锁的时间短,则等待代价很低。

  3.常用于多处理器系统,一个核忙等,其他核照样工作,并快速释放临界区。

  4.不太适用于单处理机系统,忙等的过程中不可能解锁。

image-20240304134034138

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

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

相关文章

宝塔Linux面板迁移网站数据的详细步骤是什么?

宝塔Linux面板迁移网站数据的详细步骤是什么? 准备工作:确保宝塔面板处于最新版本并与服务器环境一致。如果需要迁移到其他机器,需要将迁入服务器的宝塔面板信息和API秘钥填写好。秘钥的有效期为7天,建议在使用后手动关闭接口以保…

Python从0到100(二):Python语言介绍及第一个Pyhon程序

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

springcloud:3.3测试重试机制

服务提供者【test-provider8001】 Openfeign远程调用服务提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相关接口 测试远程调用:http://localhost:8001/payment/index 服务消费者【test-consumer-resilience4j8004】 Openfeign远程调用消费者搭建 文章地址http:/…

Vue 3 中如何使用全局 API?

Vue 3 中的全局 API 使用详解 Vue 3 相较于 Vue 2 在全局 API 的使用上有了较大的变化。Vue 3 引入了新的全局 API 创建方式,并通过 createApp 方法替代了 Vue 2 中的 new Vue()。这种变化使得 Vue 3 在全局 API 的使用上更加灵活,也更好地支持了 tree-…

UNIapp实现局域网内在线升级

首先是UNIapp 生成apk 用Hbuilder 进行打包 可以从网站https://www.yunedit.com/reg?gotocert 使用自有证书,目测比直接使用云证书要快一些。 发布apk 网站 用IIS发布即可 注意事项中记录如下内容 第一、需要在 iis 的MiMe 中添加apk 的格式,否则无法…

如何本地创建websocket服务端并发布到公网实现远程访问

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

如何实现飞书与金蝶无缝对接,提升业务效率与客户满意度?

一、客户介绍 某贸易有限公司是一家专业从事进口葡萄酒和高端烈酒销售的企业。在市场竞争日益激烈的今天,该公司始终坚持以客户为中心,以市场为导向,不断创新和进步。公司不仅注重传统销售渠道的拓展,还积极拥抱互联网&#xff0…

processing绘制笑脸

笑脸效果图: processing代码: void setup(){size(1000,1000);//Canvas sizebackground(#ffcc33);//Canvas background color } void draw(){ strokeWeight(12);//face-width12px fill(#ffffcc);//face arc(500,500,200,200,0,TWO_PI);//face-size strok…

Python中的自然语言处理和文本挖掘

在Python中,自然语言处理(NLP)和文本挖掘通常涉及对文本数据进行清洗、转换、分析和提取有用信息的过程。Python有许多库和工具可以帮助我们完成这些任务,其中最常用的包括nltk(自然语言处理工具包)、spaCy…

统计C语言代码行数的pyton代码

首先是白嫖以下大神的代码:统计python代码行数小工具_linecount工具-CSDN博客 然后,让ChatGPT帮我改为如下的完整代码: import os from tkinter import Tk, Label, Button, filedialog def open_file(file_path, encoding): try: file op…

【推荐算法系列十八】:DSSM 召回算法

参考 推荐系统中 DSSM 双塔模型汇总(二更) DSSM 和 YouTubeDNN 都是比较经典的 U2I 模型。 U2I 召回 U2I 召回也就是 User-to-Item 召回,它基于用户的历史行为以及用户的一些个人信息,对系统中的候选物品进行筛选,挑…

备考2024年上海高考数学:历年选择题真题练一练(2014~2023)

今天距离2024年高考还有三个多月的时间,今天我们来看一下2014~2023年的上海高考数学的选择题,从过去十年的真题中随机抽取5道题,并且提供解析。 后附六分成长独家制作的在线练习集,科学、高效地反复刷这些真题,吃透真题…

Dockerfile执行的时候没有执行CMD

参考:https://blog.csdn.net/Zx13170918986/article/details/130831052 在dockerfile中编写CMD后,发现如果执行docker run -itd这样的指令,是没法启动CMD脚本的,例如以下的dockerfile FROM node:16 WORKDIR /home/ COPY start_…

Sora爆火,数字人IP如何借助AIGC视频生成软件制作短视频营销?

ChatGPT、Sora等大模型的出现,创新了短视频内容创作生产方式。但目前Sora模型无法准确模拟复杂场景的物理特性,并且可能无法理解因果关系导致视频失真。 广州虚拟动力基于用户使用需求,推出了AIGC数字人视频生成平台,企业、品牌可…

c++基础学习第三天(指针,结构体)

c基础学习第三天(指针,结构体) 文章目录 1、指针1.1、指针的基本概念1.2、指针变量的定义和使用1.3、 指针所占内存空间1.4、空指针和野指针1.5、 const修饰指针1.5.1、const修饰指针-常量指针1.5.2、const修饰常量-指针常量1.5.3、const即修…

Android MediaCodec 简明教程(五):使用 MediaCodec 编码 ByteBuffer 数据,并保存为 MP4 文件

系列文章目录 Android MediaCodec 简明教程(一):使用 MediaCodecList 查询 Codec 信息,并创建 MediaCodec 编解码器Android MediaCodec 简明教程(二):使用 MediaCodecInfo.CodecCapabilities 查…

php:实现字符串补零str_pad()

说明 str_pad($input_string, $total_length, $pad_string, $pad_type); $input_string 是要填充的原始字符串。$total_length 是填充后的字符串总长度,包括原始字符串的长度。$pad_string 是用于填充的字符,通常是零。$pad_type 是填充的位置&#xff0…

欲哭无泪,2024年软考有变!中高项只考1次了

今天可能最重磅的消息是:2024年软考工作安排及有关事项的通知文件在疯传,这份文件中提到了: 软考高级方面: 信息系统项目管理师从2次改为了1年只考1次,放在了上半年考。 系统规划与管理师依然保持1次,但是…

每日一练:LeeCode-707. 设计链表 【链表+虚拟头结点+设计】

每日一练:LeeCode-707. 设计链表 【链表虚拟头结点设计】 思路设置虚拟头节点 本文是力扣 每日一练:LeeCode-707. 设计链表 【链表虚拟头结点设计】 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode-70…

0101二阶与三阶行列式-行列式-线性代数

一 引例 求解二元一次方程组 { a 11 x 1 a 12 x 2 b 1 a 21 x 1 a 22 x 2 b 2 \begin{cases} a_{11}x_1a_{12}x_2b_1\\ a_{21}x_1a_{22}x_2b_2\\ \end{cases} {a11​x1​a12​x2​b1​a21​x1​a22​x2​b2​​ 解: 1 a 21 − 2 a 11 ⇒ x 2 a 11 b 2 − a…