arm缓存刷新到未缓存的区域

时间:2017-10-06 10:53:33

标签: operating-system arm embedded cpu-cache cortex-a8

我想知道缓存子系统如何在以下情况下起作用: 我们来考虑Cortex-a8和VIPT L1-cache。 假设创建了可缓存的虚拟内存映射[A,B],有一段时间该映射使用了此内存区域,因此数据缓存已填满。在此之后,假设映射[A,B]被不可缓存替换。之后,我们在虚拟区域[A,B]上执行刷新操作(DCCIMVAC)。在这种情况下会发生什么?缓存数据将被丢弃(无效)?或者数据将被刷新到不可缓存的页面?或其他什么?

更新

我要问的主要原因是 - 在我上面描述的上下文中的一个刷新指令后,我的板卡住了。我只是不知道为什么会这样。更确切地说,它挂在页面中间,在偏移量0xd80处刷新其中一个缓存行。如果跳过此缓存行刷新 - 它会更进一步。如果将attrs更改为可缓存(来自不可缓存),则可以正常工作。并且看起来它应该被改为可缓存,但我试着弄清楚这段代码做了什么。我最感兴趣的是 - 如果我描述的场景是合法的,或者它可能导致一些未定义的行为。

0 个答案:

没有答案