【问题标题】:ARM single-copy atomicityARM 单拷贝原子性
【发布时间】:2014-06-03 08:57:51
【问题描述】:

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

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

作为非英语母语者,我承认我在理解这句话时有些困难。

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

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

还是一样的意思吗?

【问题讨论】:

  • 这也是我的理解。我感觉到你的痛苦;读到这让我头晕目眩。我不确定这是一个很好的 SO 问题,但这是一个很好的问题。无论如何,有很多学术论文,人们用段落和段落来说明一个简单的观点。可能一个重要的问题是保持一致。例如,strb 到字节 0、1、2、3 和完整单词上的 ldr 应该表现相似。我认为这是 single-copy atomic 位。 ldraddr+2 不会是单拷贝原子。即,未对齐的读取。
  • @Vroomfondel,这是一个非常令人困惑的话题,作为一个以英语为母语的人,我也不清楚这句话。此外,由于您和我都引用了同一 mcu 系列的技术参考手册 (A3.5.3) 的完全相同的部分,因此我也想在此处发布我的相关问答,因为我认为这与讨论非常相关:@ 987654321@.

标签: memory arm atomic cortex-a


【解决方案1】:

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

就一般理解而言(与实际实现规范相反),一点含糊并不总是有害的,因此虽然它无法做到绝对 em> 清楚“内存位置”是什么意思,我认为旧的 v7 手册 (DDI0406C.b) 在这种情况下读起来更好:

如果以下条件都为真,则读取或写入操作是单副本原子:

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

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

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

    永远不会出现读操作的值部分是写操作之前内存位置的值,部分是写操作之后内存位置的值的情况。

所以您的理解是正确的 - 单副本原子操作的定义点是,在任何给定时间您只能看到它的 allnone 的。

在 v7 中有一个案例(如果我的解释正确的话)两个通常单副本的原子存储同时发生在同一位置但大小不同,这会破坏原子性的任何保证,所以理论上你可能会在那里观察到一些意想不到的字节混合 - 这看起来已在 v8 中被删除。

【讨论】:

  • 当您谈到多副本原子性时,请记住它的命名相当具有误导性,并且与这种“原子性”的感觉几乎没有任何关系。
猜你喜欢
  • 2020-11-26
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多