ARM 单拷贝原子性

2023-12-21

我目前正在费力地阅读 ARMv7 内核的 ARM 架构手册。在关于内存访问原子性的章节 A3.5.3 中,它指出:

如果单副本原子加载与单副本原子存储重叠并且 对于任何重叠字节,加载返回的数据写入 写入插入到该字节的一致性顺序中 单副本原子存储,则加载必须从一个点返回数据 的一致性顺序不早于插入到的写入 所有的单副本原子存储的一致性顺序 重叠字节。

作为非英语母语人士,我承认我在理解这句话时遇到了一些挑战。

是否存在对内存字节的写入未插入一致性顺序因此上述情况不适用的情况?如果不是,我的说法是否正确,将句子缩短并改写为以下内容:

如果加载恰好返回至少一个字节 写入,然后加载必须返回来自某个点的所有重叠字节 不早于写入将它们插入到的位置 所有重叠字节的一致性顺序。

仍然传达相同的含义吗?


我在 ARMv8 ARM 中看到了这种措辞,它确实试图消除很多地方可能存在的歧义(即使它确实使内存排序部分几乎不可读)。

就一般理解而言(而不是实际情况)实施规范),一点点模糊并不总是有害的,所以虽然它无法做到这一点绝对地清楚“内存位置”的含义,我认为旧的 v7 手册(DDI0406C.b)在这种情况下更好读:

如果同时满足以下条件,则读取或写入操作是单副本原子操作:

  • 对某个内存位置进行任意次数的写入操作后,该内存位置的值就是其中一次写入操作写入的值。内存位置的部分值不可能来自一个写操作,而另一部分值来自不同的写操作

  • 当对同一内存位置进行读操作和写操作时,读操作获得的值为以下之一:

    • 写操作之前内存位置的值
    • 写操作后内存位置的值。

    读操作的值绝不会部分是写操作之前的存储位置的值,部分是写操作之后的存储位置的值。

所以你的理解是正确的 - 单副本原子操作的定义点是在任何给定时间你只能看到其中一个all其中,或none of it.

v7 中有一种情况,其中(如果我解释正确的话)两个通常单副本原子存储同时出现在同一位置但大小不同,破坏了原子性的任何保证,因此理论上您可以观察到一些意外的字节混合 - 这看起来已在 v8 中删除。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM 单拷贝原子性 的相关文章

  • Objective-C:int值无故改变

    Objective C 我需要帮助保留 int 的值 无需我的命令 它就在我身上发生变化 最初的问题是 如何声明和保留 int 这在另一篇文章中得到了满足 Objective C 如何声明和保留 int https stackoverflo
  • 什么是遗留中断?

    我正在开发一个项目 试图弄清楚 ARM 架构的全局中断控制器中如何处理中断 我正在使用 pl390 中断控制器 我看到有一条线被称为传统中断 它绕过了分配器逻辑 假设有 2 个中断可以被编程为传统中断 任何人都可以帮助解释一下什么是遗留中断
  • GCC C++ (ARM) 和指向结构体字段的 const 指针

    假设有一个简单的测试代码 typedef struct int first int second int third type t define ADDRESS 0x12345678 define REGISTER type t ADDRE
  • iOS 视图控制器内存在被关闭后未释放

    当用户单击按钮时 它会显示一个带有两个视图控制器的新选项卡栏视图控制器 我是这样做的 ACLevelDownloadController dvc ACLevelDownloadController alloc initWithNibName
  • 如何获取结构体中任意成员的位位置

    如何获取结构体中任意成员的位位置 在示例中 gt typedef struct BitExamStruct unsigned int v1 3 unsigned int v2 4 unsigned int v3 5 unsigned int
  • 设备树不匹配:.probe 从未被调用

    我无法理解设备树的工作原理 或者具体来说为什么该驱动程序无法初始化 这是在 android 版本 3 10 的 rockchip 供应商内核中 驱动程序 看门狗 rk29 wdt c 为了可读性而减少 static const struct
  • 如何提高包含大量小图像的 UCollectionView 的性能?

    在我的 iOS 应用程序中我有UICollectionView显示大约 1200 个小 35x35 点 图像 图像存储在应用程序包中 我正确地重用了UICollectionViewCell但仍然存在性能问题 具体取决于我处理图像加载的方式
  • NUMA 在虚拟内存中是如何表示的?

    有许多资源 https en wikipedia org wiki Non uniform memory access从硬件角度描述NUMA的架构性能影响 http practical tech com infrastructure num
  • IBOutlet、实例变量和属性:最佳实践

    今天 我对有关声明 IBOutlet 和实例变量 管理它们 使用正确的访问器以及正确释放它们的最佳实践进行了各种研究 我已经差不多了 但我有一些小问题 我希望有人能够就最佳实践提出建议 我会将它们格式化为代码并注释问题 以便更容易理解 我排
  • 对于 1GB 堆,在可视虚拟机中运行计算保留大小需要多长时间?

    我有一个来自 java 进程的 1 GB 堆转储 该进程耗尽了堆空间 我已将堆上传到 java6 发行版附带的 jvisualm 中 我大约 16 小时前开始了 计算保留大小 过程 它仍在运行 计算 1GB 堆上前 20 个对象的保留大小需
  • 已删除的类实例上的方法仍然有效吗?

    我在 Visual C 2010 上有这段代码 include
  • 堆栈内存未释放

    我有以下循环 它从此处的实现中弹出我拥有的 C 并发队列 https juanchopanzacpp wordpress com 2013 02 26 concurrent queue c11 https juanchopanzacpp w
  • Java 中内存高效的稀疏数组

    关于时间高效的稀疏数组存在一些问题 但我正在寻找内存效率 我需要相当于List
  • 打包布尔数组需要通过 int (numpy 1.8.2)

    我正在寻找更紧凑的方式来存储布尔值 numpy 内部需要 8 位来存储一个布尔值 但是np packbits允许打包 他们 这真是太酷了 问题是要打包在4e6字节数组a32e6字节我们需要首先使用的布尔值数组256e6字节将布尔数组转换为
  • 为什么 ATOMIC_FLAG_INIT 为假?

    In C 11有std atomic flag这对于线程循环很有用 static std atomic flag s done ATOMIC FLAG INIT void ThreadMain while s done test and s
  • 了解 Linux oom-killer 日志

    我的应用程序被 oom killer 杀死了 它是在实时 USB 上运行的 Ubuntu 11 10 无需交换 PC 具有 1 Gig 的 RAM 唯一运行的应用程序 除了所有内置的 Ubuntu 东西 是我的程序 flasherav 请注
  • Java堆和栈内存分配

    class Person private String name public Person public Person String name this name name public static void main String a
  • 在 python 中 pickling 数据时出现内存错误

    我正在尝试使用 python 中提供的 dump 命令将字典转储为 pickle 格式 字典的文件大小约为 150 mb 但仅转储 115 mb 的文件时会出现异常 例外情况是 Traceback most recent call last
  • 用eclipse测试java程序的内存消耗[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • “benaphores”值得在现代操作系统上实施吗?

    当我还是一名 BeOS 程序员时 我读过本文 http www haiku os org legacy docs benewsletter Issue1 26 html Engineering1 26作者 Benoit Schillings

随机推荐

  • 制作时钟 UWP (C#)

    我正在为 Windows 10 编写应用程序 需要在 UI 中显示时间 我把显示器做了这样的 Time Text DateTime Now ToString h mm ss tt 但我需要更新它 关于如何做到这一点有什么建议吗 在您的 XA
  • Android 中匹配正则表达式模式的问题

    我正在尝试搜索这个字符串 tt ABC r 725 00 a 55 30 For r 725 00 这是我当前的代码 Pattern p Pattern compile r 0 9 0 9 0 9 Matcher m p matcher r
  • Androidcamera2createCaptureRequest在获取YUV_420_888图像时返回所有黑色像素

    我有一个 Android Camera2 APIpreview在 Kotlin 中使用 suspendCoroutine 进行所有表面设置和回调 运行正常 但是 当我尝试在应用程序启动后 5 秒拍照时 TEMPLATE STILL CAPT
  • ARM 单拷贝原子性

    我目前正在费力地阅读 ARMv7 内核的 ARM 架构手册 在关于内存访问原子性的章节 A3 5 3 中 它指出 如果单副本原子加载与单副本原子存储重叠并且 对于任何重叠字节 加载返回的数据写入 写入插入到该字节的一致性顺序中 单副本原子存