ARM11对缓存的改进是什么?

Jus*_*tin 1 arm cpu-cache

据ARM11称,Cache是​​物理地址,解决了许多缓存别名问题并减少了上下文切换开销

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

Nic*_*rth 8

缓存有三种常见类型.

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

还有

  • PIVT =物理索引虚拟标记

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

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

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

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

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

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