【问题标题】:ARM SWP instruction and cacheARM SWP 指令和缓存
【发布时间】:2018-03-16 09:19:23
【问题描述】:

我一直在阅读 ARM 处理器中的同步方法。我遇到了一些关于这个领域的问题。如果我使用 SWP 指令,我需要在内存中提供一些地址作为第三个参数。但是如果系统是多核 ARM - 如果这个内存地址的内容被缓存在其他处理器的缓存中怎么办?

在这种情况下缓存会失效还是会发生其他事情?谁能解释一下?

【问题讨论】:

  • 虽然仍然存在 arm 不鼓励将 SWP 用于多核,而是将 LDREX/STREX 用于多核(SWP 用于单核,因为单核芯片不需要支持 LDREX/STREX)。跨度>
  • 基本上一直在挖,顺便说一句,不以linux源码为指导。
  • 如果你真的想共享一个资源(例如,一个用来与另一个核心进行锁定的内存位置),为任何核心缓存该地址(空间)是否有意义?当然,LDREX/STREX 在 ARM 逻辑中工作得很好,绕过缓存,你最终会进入供应商逻辑,1)他们是否实现了独占访问,2)它是否工作正常。
  • 了解 ldrex/strex 不是 swp 的替代品。 Ldrex/strex 用于在内核之间共享信息。你会发现那里有很多误解和对 ldrex/strex 的误用。这些应用程序恰好可以工作,因为缓存已打开并且 ARM 在其自己的缓存逻辑中支持 ldrex/strex,因此如果您使用 swp 与自己对话(在一个内核内)并用 ldrex/strex 替换它,它恰好可以工作(这么久因为缓存行不会被驱逐)。继续阅读 arm 文档...

标签: arm


【解决方案1】:

正如一些答案所述,SWP 已不再使用,即使在相当旧的 CPU 上也是如此(在所有 Cortex-A CPU 上已弃用)。

虽然不是替代品,但必须使用LDREX/STREX。 Cortex-A CPU 能够直接共享其 L1 缓存中的数据(请参阅 https://fr.wikipedia.org/wiki/Protocole_MESI),而无需失效。

【讨论】:

    猜你喜欢
    • 2011-02-16
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2014-04-19
    • 1970-01-01
    • 2014-07-29
    • 2012-07-14
    相关资源
    最近更新 更多