ARM11对缓存的改进是什么?

时间:2012-07-05 13:25:43

标签: arm cpu-cache

在ARM11中说,缓存是物理寻址的,解决了许多缓存别名问题并减少了上下文切换开销

如何理解实际解决? 它如何帮助解决缓存别名问题并减少上下文切换开销?

1 个答案:

答案 0 :(得分:8)

有三种常见的缓存类型。

  • VIVT =虚拟索引虚拟标记
  • VIPT =虚拟索引物理标记
  • PIPT =物理标记的物理标记

还有

  • PIVT =物理索引虚拟标记

PIPT通常用于二级和更深的缓存,因为无论如何必须知道物理地址,但armv7还引入了PIPT L1 DCaches。 PIVT并不实用,因此在现实世界中没有使用。

不同之处在于缓存行如何连接到底层内存。

虚拟索引意味着纯缓存行查找是使用虚拟地址完成的,因此可以在任何虚拟到物理地址转换之前完成。然后,标记将决定缓存行是否真正映射到底层内存,或者是否包含恰好映射到同一缓存行的其他内存位置的数据。

如果使用虚拟地址完成标记,则恰好使用相同虚拟地址的两个进程可能会相互跳闸,因为一个进程可能访问另一个进程放入缓存的数据。因此对于VIVT缓存的cpu,内核必须在上下文切换上刷新整个缓存。因此,新进程不会意外访问不正确的数据,这意味着一般情况下,上下文切换对VIVT缓存的CPU来说是一项非常昂贵的操作。在ARMv5及更高版本上,支持所谓的快速上下文切换扩展,它使用标记修改虚拟地址。但这涉及很多限制。

相比之下,VIPT仍将使用虚拟地址来查找缓存行,但随后将根据物理地址检查标记,因此MMU查找可以与缓存行查找并行完成。

别名是VIVT缓存的另一个大问题。因为两个虚拟地址可能指向相同的物理内存位置(当您在用户和内核空间之间共享内存时可能会发生这种情况)。因此,您的缓存中可能有两个位置具有不同的数据,这可能非常难以正确管理(以正确的顺序显式刷新和使缓存无效)。