首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM缓存行为:“清除”或“无效”是刷新缓存内存的正确命令吗?

ARM缓存行为:“清除”或“无效”是刷新缓存内存的正确命令吗?
EN

Stack Overflow用户
提问于 2017-06-07 19:59:28
回答 1查看 6K关注 0票数 5

这可能是一个愚蠢的问题,但我对ARM CMSIS Cache操作函数的措辞有些拘泥。

ARM CMSIS公开了可以“清除”缓存的函数、可以“失效”缓存的函数以及一组同时执行这两种功能的函数。

这些实际上做了什么还不清楚,而且arm文档坦率地让我感到困惑:

  • 您可以在一次操作中使整个数据缓存(刷新数据缓存)失效,而无需回写脏数据。
  • 您可以在不回写任何脏数据(刷新数据缓存单个条目)的情况下使单个行无效。
  • 你可以逐行进行清洗.只有当遇到脏行时,数据才会通过写缓冲区写回,并且已清除的行保留在缓存中(清洁数据缓存单个条目)。您可以使用数据缓存中的索引或内存中的地址来清理缓存行。
  • 您可以在一次操作中清理和刷新单个行,使用数据缓存中的索引或内存中的地址。

我的理解是,缓存中的“刷新”数据将导致将其写回主内存,而缓存中的“无效”数据将导致处理器在下一次访问有关数据的尝试中重新读取主内存。

然而,ARM文档似乎在暗示一个刷新操作实际上是一个无效操作,而我一直在想的是一个刷新操作实际上是一个“干净”操作。

我想我只是严重曲解了文件。有人能给我指明正确的方向吗?

我专门为皮层M7开发,如果它是相关的话。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-07 20:28:51

他们从armv7-m手臂上得到了这条短信。

这些行动的定义如下: 打扫 缓存清理操作确保控制高速缓存的观察者所做的更新对可以在执行该操作的点访问内存的其他观察者可见。清理完成后,新的内存值保证在执行操作的点上是可见的,例如,到统一点。从缓存中清除缓存项可以覆盖由另一个观察者写入的内存,只有当该条目包含一个已被该内存位置的共享域中的观察者写入的位置时。 无效 缓存失效操作确保在定义失效点时访问内存的观察者所做的更新对于控制缓存的观察者是可见的。这可能导致访问缓存的观察者写入的受无效操作影响的位置的更新丢失。如果无效操作的条目的地址没有正常的可缓存属性,或者如果缓存被禁用,则无效操作还会确保缓存中不存在此地址。

我读到这句话时说,清理会将那些没有保存到下一级内存的缓存中的项目写入内存中(像我这样的人称之为同花顺)。如果存在未写入的值,则无效,它将准备缓存,就像没有要保存的值一样,准备接受新的地址和数据。

我就是这么读的..。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44421754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档