ARM SWP指令与缓存

ARM SWP指令与缓存,arm,Arm,我一直在读ARM处理器中的同步方法。我遇到了一些关于这方面的问题。如果我使用SWP指令,我需要在内存中给出一些地址作为第三个参数。但是,如果系统是多核ARM,那么当这个内存地址的内容缓存在其他处理器的缓存中时会发生什么情况呢 在这种情况下,缓存会失效还是会发生其他情况?任何人都可以解释吗?正如一些答案所述,SWP不再使用,即使在非常旧的CPU上(在所有Cortex-A CPU上都不推荐使用) 虽然不是替代品,但必须使用LDREX/STREX。Cortex-A CPU能够直接共享其L1缓存中的数据

我一直在读ARM处理器中的同步方法。我遇到了一些关于这方面的问题。如果我使用SWP指令,我需要在内存中给出一些地址作为第三个参数。但是,如果系统是多核ARM,那么当这个内存地址的内容缓存在其他处理器的缓存中时会发生什么情况呢


在这种情况下,缓存会失效还是会发生其他情况?任何人都可以解释吗?

正如一些答案所述,
SWP
不再使用,即使在非常旧的CPU上(在所有Cortex-A CPU上都不推荐使用)


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

正如一些答案所述,
SWP
不再使用,即使在非常旧的CPU上(在所有Cortex-A CPU上都不推荐使用)


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

尽管arm仍不鼓励将SWP用于多核,但应将LDREX/STREX用于多核(SWP用于单核,因为单核芯片不需要支持LDREX/STREX)。基本上,继续挖掘,顺便说一句,不要使用linux源代码作为指导。如果你真的想共享一个资源(例如,一个与另一个内核进行锁定的内存位置),那么为任何内核缓存该地址(空间)有意义吗?假设LDREX/STREX在ARMs逻辑中运行良好,绕过缓存,最终进入供应商逻辑,1)他们是否实现了独占访问,2)它是否正常工作。了解LDREX/STREX不是swp的替代品。Ldrex/strex用于在核心之间共享信息。你会发现很多误解和对ldrex/strex的误用。这些应用程序之所以能够正常工作,是因为缓存处于打开状态,ARM在其自身的缓存逻辑中支持ldrex/strex,因此,如果您使用swp与自己对话(在一个内核中),并用ldrex/strex替换它,那么这些应用程序就能够正常工作(只要缓存线不会被逐出)。继续阅读arm文档…尽管arm仍然不鼓励在多核上使用SWP,但在多核上使用LDREX/STREX(单核的SWP作为LDREX/STREX不需要在单核芯片上得到支持)。基本上继续挖掘,顺便说一句,不要使用linux源代码作为指导。如果你真的想共享资源(例如,用于与另一个内核进行锁定的内存位置)为任何内核缓存该地址(空间)有意义吗?假定LDREX/STREX在ARMs逻辑中工作良好,绕过缓存,最终进入供应商逻辑和1)他们是否实现了独占访问,以及2)它是否正常工作。了解ldrex/strex不是swp的替代品。Ldrex/strex用于在核心之间共享信息。你会发现很多误解和对ldrex/strex的误用。这些应用程序之所以能够正常工作,是因为缓存处于打开状态,ARM在其自身的缓存逻辑中支持ldrex/strex,因此,如果您使用swp与自己对话(在一个内核中),并用ldrex/strex替换它,那么这些应用程序就能够正常工作(只要缓存线不会被逐出)。继续阅读arm文档。。。