【发布时间】: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