并发控制互斥笔记

整理总结自蒋炎岩老师的b站课程,https://jyywiki.cn/OS/2022/index.html

  • 多处理器系统中数据的一致性和互斥访问

    • 所有的CPU的一级缓存都是连着的,如果是多个CPU的话,用在内存中放置标志位,来保证对当前内容的原子性读取,Xchg指令。
      在这里插入图片描述

    • Lock 指令的现代实现(自旋锁)(类似于悲观锁)

      • int table = YES;void lock() {
        retry:int got = xchg(&table, NOPE);if (got == NOPE)goto retry;assert(got == YES);
        }void unlock() {xchg(&table, YES)
        }
        
      • 通常描述

      • int locked = 0;
        void lock() { while (xchg(&locked, 1)) ; }
        void unlock() { xchg(&locked, 0); }
        
      • 在 L1 cache 层保持一致性 (ring/mesh bus)

        • 相当于每个 cache line 有分别的锁(实际上,这不是传统意义上的锁。在硬件层面,通过缓存一致性协议和高速互连网络,处理器能够确保当一个核心在其L1缓存中修改了某个缓存行时,其他核心能够即时地了解到这一变化。这种机制确保了数据的一致性,而无需显式的锁。)
        • store(x) 进入 L1 缓存即保证对其他处理器可见
          • 但要小心 store buffer 和乱序执行
      • Icache line 根据状态进行协调

        • M (Modified), 脏值
        • E (Exclusive), 独占访问
        • S (Shared), 只读共享
        • I (Invalid), 不拥有 cache line
    • Load-Reserved/Store-Conditional(LR/SC)(类似于乐观锁)

      • LR: 在内存上标记 reserved (盯上你了),中断、其他处理器写入都会导致标记消除

        lr.w rd, (rs1)rd = M[rs1]reserve M[rs1]
        
      • SC: 如果 “盯上” 未被解除,则写入

        sc.w rd, rs2, (rs1)if still reserved:M[rs1] = rs2rd = 0else:rd = nonzero
        
    • 自旋锁的缺陷

      • 性能问题 (0)

        • 自旋 (共享变量) 会触发处理器间的缓存同步,延迟增加
      • 性能问题 (1)

        • 除了进入临界区的线程,其他处理器上的线程都在空转
        • 争抢锁的处理器越多,利用率越低
      • 性能问题 (2)

        • 获得自旋锁的线程

          可能被操作系统切换出去

          • 操作系统不 “感知” 线程在做什么
          • (但为什么不能呢?)
        • 实现 100% 的资源浪费

    • 自旋锁的使用场景

      • 临界区几乎不 “拥堵”
      • 持有自旋锁时禁止执行流切换

      使用场景:操作系统内核的并发数据结构 (短临界区)

      • 操作系统可以关闭中断和抢占
        • 保证锁的持有者在很短的时间内可以释放锁
    • 线程+长临界区的互斥可以解决

      • 把锁的实现放到操作系统里就好啦!

        • syscall(SYSCALL_lock, &lk);
          
          • 试图获得 lk,但如果失败,就切换到其他线程
        • syscall(SYSCALL_unlock, &lk);
          
          • 释放 lk,如果有等待锁的线程就唤醒
        • 其他的线程仍然能继续执行

  • 关于互斥的一些分析

    • 自旋锁 (线程直接共享 locked)
      • 更快的 fast path
        • xchg 成功 → 立即进入临界区,开销很小
      • 更慢的 slow path
        • xchg 失败 → 浪费 CPU 自旋等待
    • 睡眠锁 (通过系统调用访问 locked)
      • 当没有获取到锁将线程转为就绪状态(会频繁切换上下文)
      • 更快的 slow path
        • 上锁失败线程不再占用 CPU
      • 更慢的 fast path
        • 即便上锁成功也需要进出内核 (syscall)
  • 互斥锁

    • 睡眠锁+自旋锁=互斥锁

    • 先在用户空间自旋

      • 如果获得锁,直接进入

      • 未能获得锁,系统调用

      • 解锁以后也需要系统调用

        class Futex:locked, waits = '', ''def tryacquire(self):if not self.locked:# Test-and-set (cmpxchg)# Same effect, but more efficient than xchgself.locked = '🔒'return ''else:return '🔒'def release(self):if self.waits:self.waits = self.waits[1:]else:self.locked = ''@threaddef t1(self):while True:if self.tryacquire() == '🔒':     # Userself.waits = self.waits + '1' # Kernelwhile '1' in self.waits:      # Kernelpasscs = True                         # Userdel cs                            # Userself.release()                    # Kernel@threaddef t2(self):while True:if self.tryacquire() == '🔒':self.waits = self.waits + '2'while '2' in self.waits:passcs = Truedel csself.release()

        Python模拟操作系统实现

        • 更好的设计可以在 fast-path 不进行系统调用

下篇聊并发控制同步

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

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

相关文章

第六代移动通信介绍、无线网络类型、白皮书

关于6G 即第六代移动通信的介绍, 图解通信原理与案例分析-30:6G-天地互联、陆海空一体、全空间覆盖的超宽带移动通信系统_6g原理-CSDN博客文章浏览阅读1.7w次,点赞34次,收藏165次。6G 即第六代移动通信,6G 将在5G 的基…

经常发文章的你是否想过定时发布是咋实现的?

前言 可乐他们团队最近在做一个文章社区平台,由于人手不够,前后端都是由前端同学来写。后端使用 nest 来实现。 某一天周五下午,可乐正在快乐摸鱼,想到周末即将来临,十分开心。然而,产品突然找到了他,说道:可乐,我们要做一个文章定时发布功能。 现在我先为你解释一…

「代码与养生」 :当下程序员的养生指南

前言 众所周知,程序员是死的比较快的一类人。因为天天加班、睡眠不足、久坐不动、长时间面对电子屏幕辐射、长时间高强度用脑等不好避免的问题。因此,要想活的时间长一点,就要多了解一些养生之道 下面,根据个人看的一些博客、书…

表空间的创建

目录 表空间创建的语法 表空间创建的例子 创建一个永久性表空间,设置表空间初始大小为100MB,自动扩展为 100MB,无最大大小限制,并且该表空间为在线状态,产生日志 创建一个永久性表空间,通过本地化管理方…

面向新手在无人机竞速场景下的飞行辅助系统——浙大 FAST-Lab 高飞团队 ICRA 论文三项 Best Paper 入围

恭喜浙江大学 FAST-Lab 钟宇航同学的论文 A Trajectory-based Flight Assistive System for Novice Pilots in Drone Racing Scenario 顺利发表 ICRA 2024,并同时入选三项 Finalist: the IEEE ICRA Best Conference Paper Awardthe IEEE ICRA Best Pape…

深入理解Java虚拟机(JVM)

引言: Java虚拟机(JVM)是Java平台的核心组件,它负责将Java字节码转换成平台特定的机器指令,并在相应的硬件和操作系统上执行。JVM的引入使得Java语言具有“一次编写,到处运行”的跨平台特性。本文将深入探…

ICC2:optimize_routability

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 在postroute阶段,一些pin access引起的绕线问题,通常以end of line和short/spacing的形式扎堆出现,总量兴许不多,但是反复绕线仍难解决,返回preplace去设置keepout margin或placement label又得…

绘画作品3d数字云展厅提升大众的艺术鉴赏和欣赏能力

3D虚拟展厅作为未来艺术的展示途径,正逐渐成为文化创意产业蓬勃发展的重要引擎。这一创新形式不仅打破了传统艺术展览的局限性,更以其独特的魅力吸引着全球观众的目光。 3D虚拟艺术品展厅以其独特的魅力,助力提升大众的艺术鉴赏和欣赏能力。观…

什么是多模态大模型,有了大模型,为什么还要多模态大模型?

随着人工智能技术的愈演愈烈,其技术可以说是日新月异,每隔一段时间就会有新的技术和理念被创造出来;而多模态大模型也是其中之一。 什么是多模态 想弄明白什么是多模态大模型,那么首先就要弄明白什么是多模态。 简单来说&#x…

红海云OA存在任意文件上传漏洞【附poc】

漏洞复现 1、fofa poc见文末 body"RedseaPlatform" 打开burp进行抓包发送到repeater,如下图所示: 打入poc(文末获取),成功上传。 「你即将失去如下所有学习变强机会」 学习效率低,学不到实战内…

【Linux】基础命令

常用命令及参数:dir表示文件夹,file表示文件(file可表示其他目录下的文件) pwd命令;查看当前所属文件夹(print working directory) ls [选项] dir;查看当前、指定文件夹目录内容&am…

后仿真中的关于延时问题(物理特性角度)

大家都知道,后仿真讲究仿真时序。那么,在网表阶段,接触到后仿延时问题。今天总结一下。 一 延时概念和分类 1.1 分布式延迟(Distributed Delays) 一般用来指定模块内部信号通过逻辑单元或者线网耗费的时间。 1.2 模…

解决 idea代码不能自动提示功能

idea有可能没有代码提示,是非常不方便的,找了好几个办法,这个方法对了 如下输入psv或者psvm按下回车自动生成main方法,除此还有很多也可以代码提示,包括写好的接口调用,如果有对应的方法,输入也…

【iOS逆向与安全】网上gw如何自动登录与签到SM2,SM3,SM4算法加解密

1.下载 app 2.frida 调试 3.抓包查看接口 4.分析加密数据 5.易语言编写代码 1 .开始下载 下载好发现有越狱检测,检测点为: -[AppDelegate isJailBreak]; 于是编写插件xm代码 : %hook AppDelegate- (void)isJailBreak{NSLog("AppDelegate is…

JZ71 变态跳台阶

😀前言 本文探讨了一个有关青蛙跳台阶的变体问题,与传统的台阶跳跃不同,这只青蛙每次可以跳上任意多的台阶。我们需要解决的问题是:对于给定的台阶数,计算青蛙跳上该台阶的所有可能方法。本文将通过动态规划和数学推导…

如何获得一个Oracle 23ai数据库(Virtual Appliance)

准确的说,是Oracle 23ai Free Developer版,因为企业版目前只在云上(OCI和Azure)和ECC上提供。 方法包括3种,本文介绍第1种: Virtual ApplianceRPM安装Docker 从此处下载虚拟机。 可以看到虚拟机需要4G内…

力扣437. 路径总和 III

Problem: 437. 路径总和 III 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义int类型函数rootSum(root, targetSum),用于求取每一个节点等于目标函数的路径数: 1.1.易知rootSum(root, targetSum)求出的数量等于rootSum(root.left, targetSum - va…

2024年4月17日华为春招实习试题【三题】-题目+题解+在线评测,2024.4.17,华为机试

2024年4月17日华为春招实习试题【三题】-题目题解在线评测 🔮题目一描述:扑克牌消消乐输入描述输出描述样例一样例二Limitation解题思路一:模拟,遇到连续3张相同牌号的卡牌,直接删除解题思路二:栈解题思路三…

【notepad++】使用

1 notepad 下载路径 https://notepad-plus.en.softonic.com/download 2 设置护眼模式 . 设置——语言格式设置——前景色——黑色 . 背景色——RGB :199 237 204 . 勾选“使用全局背景色”、“使用全局前景色” . 保存并关闭

2009-2022年上市公司华证ESG评级评分数据(含细分项)

2009-2022年上市公司华证ESG评级评分数据(含细分项) 1、时间:2009-2022年 2、来源:华证ESG 3、指标:证券代码、证券简称、综合评级、年度、综合得分、E评级、E得分、S评级、S得分、G评级、G得分 4、范围&#xff1…