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

事务的原子性

文章目录

      • 🧩 事务是什么?
      • 🔧 RMW 指令(Read-Modify-Write)产生什么事务?
      • 指令 和事务的关系
      • 事务和总线交互的关系
      • 事务的原子性

🧩 事务是什么?

“We refer to a write operation as a write transaction and a read operation as a read transaction, implying that each operation has to be atomic with respect to one another.”

这句话的含义是:

  • “读”和“写”不仅仅是一个CPU的操作指令,还包括:

    • 在cache中查找
    • 与总线交互(广播、监听)
    • 与其他缓存交互(snoop)
    • 与主存交互(读写)
  • 整个“操作”是一个 复合动作的集合,这就是所谓的一个 transaction(事务)

并且:

  • 要求这个事务是“原子的”:不能被打断、不能被看到一半完成一半没完成。
  • 要求多个事务之间“串行化”:多个处理器发出的事务必须能定义出一个总顺序,大家都能一致地观察到。

🔧 RMW 指令(Read-Modify-Write)产生什么事务?

RMW(Read-Modify-Write)操作,比如:

  • LOCK XCHG(x86)
  • LDREX/STREX(ARM)
  • atomic_add, compare-and-swap

这些操作看起来像一个复合指令:它从内存中读取数据,修改它,然后再写回去。但 对系统一致性而言,它必须是一个原子事务。可以称为 RMW事务

RMW 指令产生的不是两个独立的读事务 + 写事务,而是一个“复合的原子事务”。
这个事务内部可能包含如下步骤:

步骤描述
1. PrRd处理器先读取该地址的 cache line
2. BusRd/BusRdX若 miss,则发起总线读取(或读-独占)
3. 获得独占访问权限(exclusive)通过总线协议,将其他 cache line 置为 Invalid
4. PrWr执行写入(如是 write-through,还会触发 BusWr)

指令 和事务的关系

  • 只要是会仿存动作的指令(无论普通还是原子操作),都只会产生一个事务,且这个事务是原子的。
  • 这个事务中,访存动作的次数是指令决定的.

事务和总线交互的关系

  • 一条访存指令产生的事务 = 若干个总线交互(和cache状态转移)的集合
  • 但从 一致性语义角度看,这个集合是 一个逻辑原子单元
  • CpuWr / BusRd 一般被理解为 请求类型(Request Type),或者 事务子动作(Transaction Subaction)

事务的原子性

一致性模型实现中的核心细节:逻辑原子性 vs 物理原子性。

只要是事务,在逻辑上一定是原子性的。
在物理上是否可以交错穿插要看情况.
读事务和写事务的执行在物理上(时刻上)可以交错穿插 ,在逻辑上是原子的.

读事务和写事务在物理上是可以被穿插的,因为它们通常不要求物理原子性,只要求逻辑一致性(即最终行为符合一致性模型)。

RMW事务的执行在物理上必须是不可穿插的,在逻辑上是原子的.

物理上的穿插很好理解,即 对同一个地址core 0 的 事务开始和结束 和 core1的 事务开始结束 是重叠的
逻辑上的原子性
http://www.lryc.cn/news/581204.html

相关文章:

  • 自建双因素认证器 2FAuth 完美替代 Google Auth / Microsoft Auth
  • CSS 文字浮雕效果:巧用 text-shadow 实现 3D 立体文字
  • 虚拟机与容器技术详解:VM、LXC、LXD与Docker
  • HarmonyOS学习3---ArkUI
  • 《Redis》哨兵模式
  • ✨ OpenAudio S1:影视级文本转语音与语音克隆Mac整合包
  • 构建未来交互体验:AG-UI 如何赋能智能体与前端通信?
  • openai和chatgpt什么关系
  • hono框架绑定cloudflare的d1数据库操作步骤
  • 2025最新Telegram快读助手:一款智能Telegram链接摘要机器人
  • 【leetcode100】最长回文子串
  • 探索 .NET 桌面开发:WinForms、WPF、.NET MAUI 和 Avalonia 的全面对比(截至2025年7月)
  • MAX3485在MCU芯片AS32S601-485通信外设中的应用
  • Java 创建对象过程 JVM 内存分配并发安全笔记
  • 介绍Flutter
  • 2025最新软件测试面试八股文
  • 在SoC数据加解密验证中使用 Python 的 gmssl 库
  • 【论文笔记】OctoThinker:突破 Llama 推理瓶颈的中期训练范式
  • web前端面试-- MVC、MVP、MVVM 架构模式对比
  • 硬件嵌入式工程师学习路线终极总结(二):Makefile用法及变量——你的项目“自动化指挥官”!
  • WEB攻防-文件包含LFIRFI伪协议编码算法无文件利用黑白盒
  • Go语言的web框架--gin
  • NX二次开发——NX二次开发-检查点是否在面上或者体上
  • MyChrome.exe与Selenium联动避坑指南:User Data目录冲突解决方案
  • 一篇文章快速入门TypeScript基础语法
  • 超详细yolov8/11-segment实例分割全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c++/python)详解
  • Zigbee/Thread
  • Xshell使用技巧
  • 七牛云前端面试题及参考答案 (上)
  • 2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--下篇