Memory ARM单拷贝原子性

Memory ARM单拷贝原子性,memory,arm,atomic,cortex-a,Memory,Arm,Atomic,Cortex A,我目前正在阅读ARMv7核心的ARM架构手册。在关于内存访问原子性的第A3.5.3章中,它指出: 如果单拷贝原子加载与单拷贝原子存储重叠,则 对于任何重叠的字节,load返回由 由 单拷贝原子存储则加载必须从一个点返回数据 以一致性顺序,不早于插入到 所有原子的单拷贝原子存储的相干顺序 重叠字节 作为非英语母语的人,我承认我在理解这句话时有点困难 是否存在这样一种情况:对内存字节的写入未按一致性顺序插入,因此上述情况不适用?如果不是,我是否正确地将句子缩短并重新表述为以下内容: 如果加载碰巧返回

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

如果单拷贝原子加载与单拷贝原子存储重叠,则 对于任何重叠的字节,load返回由 由 单拷贝原子存储则加载必须从一个点返回数据 以一致性顺序,不早于插入到 所有原子的单拷贝原子存储的相干顺序 重叠字节

作为非英语母语的人,我承认我在理解这句话时有点困难

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

如果加载碰巧返回至少一个字节的 写入时,则加载必须从一个点返回所有重叠字节 不早于写入将其插入到 所有重叠字节的一致性顺序


仍然传达相同的含义?

我在ARMv8 ARM中看到了这种措辞,它确实试图消除许多地方可能存在的歧义(即使它确实使内存排序部分实际上无法读取)

就一般理解而言(与实际实施规范相反),一点模糊并不总是有害的,因此,虽然它不能绝对明确“内存位置”的含义,但我认为在这种情况下,旧的v7手册(DDI0406C.b)是更好的读物:

如果以下条件均为真,则读或写操作为单拷贝原子操作:

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

  • 当对同一存储器位置进行读操作和写操作时,通过读操作获得的值为:

    • 写入操作之前的内存位置值
    • 写入操作后的内存位置值
    读取操作的值部分是写入操作之前的内存位置的值,部分是写入操作之后的内存位置的值,这种情况永远不会发生

所以你的理解是正确的——单拷贝原子操作的定义点是,在任何给定的时间,你只能看到它的全部,或者根本看不到


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

这也是我的理解。我感觉到你的痛苦;读这篇文章让我头晕目眩。我不确定这是一个好问题,但这是一个好问题。不管怎么说,有很多学术论文,人们用段落和段落来表达一个简单的观点。可能一个重要的问题是保持事物的一致性。例如,全字上的
strb
到字节0,1,2,3和
ldr
的行为应该类似。我认为这是单拷贝原子位。添加到addr+2的
ldr
将不是单拷贝原子。也就是说,一个未对齐的读物。@Vromfondel,这是一个相当令人困惑的话题,作为一个以英语为母语的人,我也不清楚这句话。此外,由于您和我都参考了同一mcu系列的《技术参考手册》(A3.5.3)中完全相同的部分,因此我也想在这里发布我的相关问答,因为我认为这与讨论非常相关:。当您谈到多拷贝原子性时,它有助于记住,它的命名相当误导,实际上与这种“原子性”的感觉毫无关系。