并发控制互斥笔记

整理总结自蒋炎岩老师的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://xiahunao.cn/news/3014960.html

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

相关文章

JSP语法——[JSP]4

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

(双指针) 有效三角形的个数 和为s的两个数字 三数之和 四数之和

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 一、有效三角形的个数(medium) 1.1、题目 1.2、讲解算法原理 1.3、编写代码 二、和为s的两个数字 2.1、题目 2.2、讲解算…

纯干货分享|源代码泄露的有效方法

企业的源代码怎么加密? 源代码防泄密的重点和方法到底是怎样的? 源代码开发环境复杂,涉及的开发软件、文件类型庞杂多变,究竟有什么源代码加密软件能够适应众多开发软件而不影响原有的工作效率? 相信这是很多IT管理…

宋仕强论道之餐饮业的效率

宋仕强论道之餐饮业的效率,现在餐饮业的竞争非常大,经常会看到很多店转让和倒闭。我们就从客流量、客单量、翻台率、毛利率、营业高峰期、有效营业时间等几个餐饮业的基本要素来分析。对于快餐店来说,客单小、毛利低是短板,只有吸…

搭建Harbor仓库

文章目录 Harbor仓库搭建Harbor仓库安装 docker 服务修改配置文件 Harbor仓库 搭建Harbor仓库 下载 Harbor 仓库 安装 docker 服务 # step 1: 安装必要的一些系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 yum-config-m…

SH-PEG-SH,聚乙二醇二巯基广泛用于生物学应用、纳米技术和材料研究中

【试剂详情】 英文名称 SH-PEG-SH 中文名称 聚乙二醇二巯基,双硫醇PEG, 双巯基聚乙二醇,双巯基封端聚乙二醇 外观性状 白色固体粉末 分子量 0.4k,0.6k,1k,2k,3.4k,5k&#x…

NVIDIA Omniverse Cloud API支持数字孪生开发,可解决复杂AI问题 | 最新快讯

在全球范围内,价值超过 50 万亿美元的重工业市场,正在竞相实现数字化。 基于此,为帮助数字孪生技术更好地赋能千行百业,AI 企业 NVIDIA 在架构底层算力的同时,也搭建了 NVIDIA AI Enterprise 和 Omniverse 两大平台。 …

Python Flask框架(一)初识Flask

Flask是使用Python编写的Web微框架。Web框架可以使我们不用关心底层的请求响应处理,更方便高效的编写Web程序。Flask有两个主要依赖,一个是WSGI(Web Server Gateway Interface,web服务器网关接口)工具集,另…

PD芯片取电:电子设备的动力之源6020 6500

随着现代电子技术的迅猛发展,电源管理技术在各种电子设备中扮演着越来越重要的角色。特别是近年来,随着USB Power Delivery(PD)技术的普及,PD芯片取电技术因其高效、灵活和安全的特点,成为了电子设备充电和…

炒股自动化:散户如何通过API查询资产和持仓,Python接口

券商官方的接口,个人账户可申请,入金门槛低,接入文档完善,技术支持好的,经过我们筛选后,只有一家符合,会编程,有基础,只是需要API接口的朋友不用看这些内容,不…

【代码随想录——哈希表】

1.哈希表理论基础 首先什么是 哈希表,哈希表(英文名字为Hash table,国内也有一些算法书籍翻译为散列表,大家看到这两个名称知道都是指hash table就可以了)。 那么哈希表能解决什么问题呢,一般哈希表都是用…

什么是CC攻击?CC攻击怎么防御?

随着互联网的发展和技术的进步,网络安全问题日益严峻,网络攻击手段层出不穷,其中CC攻击就是一种比较常见的网络攻击手段。那么,什么是CC攻击?CC攻击怎么防御? 一、什么是CC攻击? CC攻击&#…

如何永久删除服务和相关文件夹

如何永久删除服务和文件夹? How can I remove the service and folder permanently? 以AlibabaProtect服务为例 takeown /f "C:\Program Files (x86)\AlibabaProtect sc delete AlibabaProtect我运行了上述操作,并通过任务管理器杀死了“阿里巴巴…

电能表自动抄表系统

1.电能表自动抄表系统简述 电能表自动抄表系统是一种现代化电力工程管理方法,旨在提升能源利用效率,提升电力网经营,同时提供最准确、及时地电费计算服务。该系统通过自动化的形式,取代了传统式手动抄水表方法,大大提…

【竞技宝】DOTA2:LGD微博发图引热议 xiao8将复活LGD?

北京时间2024年5月7日,最近刀圈最火的就是斗鱼举办的超梦杯比赛了,很多职业选手、退役选手、高分主播参与其中,但这毕竟是业余的比赛,大家更喜爱的还是世界大赛,而下一个大赛将是PGL瓦拉几亚S1。国内战队方面,XG将携手IG参加本次比赛。 今年的国内战队中,AR、XG、IG是表现最好的…

kaggle叶子分类比赛(易理解)

说实话网上很多关于叶子分类比赛的代码能取得的成绩都很好,但对于我这个业余人员太专业了,而且很多文章都有自己的想法,这让我这个仿写沐神代码的小菜鸡甚是头痛。 但好在我还是完成了,虽然结果并不是很好,但是如果跟着沐神走的同…

VM虚拟机提示内存不足

VMware虚拟机,k8s集群搭建内存不足的问题 疑问:我的电脑是8G8G双通道的内存,当我在搭建k8s集群时给master-2G内存,node1-3G内存,node2-3G内存; 当依次打开虚拟机到node2时VM提示“物理内存不足,…

自动控制原理MATLAB:控制系统模型构建

在MATLAB中,常用的系统建模方法有传递函数模型、零极点模型以及状态空间模型等。 1系统传递函数模型描述: 命令格式: systf(num,den,Ts); 其中,num、den为分子多项式降幂排列的系数向量,Ts表示采样时间,缺省时描述…

Google搜索广告怎么开户?谷歌广告开户投放引流技巧、账户搭建、谷歌ads广告推广投放策略 #搜索引擎 #谷歌广告#互联网营销

Google搜索广告开户步骤: 选择代理商:首先,您需要选择一个经验丰富、信誉良好的Google广告代理商。可以选择上海上弦来广告开户和代运营。 初步咨询:与代理商进行初步沟通,了解他们的服务内容、成功案例、收费标准等。…

如何从Mac上的清空垃圾箱中恢复已删除的文件?

Mac用户几乎每天都会删除文件。当您将文档删除到 Mac 垃圾箱时,该文件将被剪切到 Mac 垃圾箱中,并且可以轻松放回原处。但是,在某些情况下,您错误地删除了文档和文件,并在您意识到自己犯了一个大错误之前清空了垃圾箱。…