2012-07-05 66 views
1

它在ARM11说,高速缓存的物理处理,解决许多缓存锯齿问题,并减少上下文切换开销什么是ARM11的提高缓存

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

+0

参见:维基百科的CPU高速缓存(http://en.wikipedia.org/wiki/CPU_cache#Address_translation)。 – 2015-01-05 20:29:51

回答

8

缓存有三种常见类型。

  • VIVT =虚地址索引虚拟标记
  • VIPT =虚地址索引物理标记
  • PIPT =物理变址物理标记

还有

  • PIVT =物理虚地址索引已标记为

PIPT通常用于二级和更深入的高速缓存,因为物理地址必须在那一刻,反正知道,但ARMv7的还推出PIPT L1 DCaches。 PIVT并非真正实用,因此在现实世界中不被使用。

区别在于缓存行如何连接到底层内存。

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

如果标记与虚拟地址,然后两个进程碰巧使用相同的虚拟地址可能绊倒对方,因为一个进程可以访问哪些其他进程放到缓存中的数据来完成。所以对于VIVT缓存的CPU,内核必须在上下文切换器上刷新整个缓存。所以新进程不会无意中访问不正确的数据,这意味着对于VIVT缓存的CPU来说,上下文切换通常是非常昂贵的操作。在ARMv5及更高版本中,支持所谓的快速上下文切换扩展(Fast Context Switch Extensions),它使用标签修改虚拟地址。但是这涉及很多限制。

相反VIPT仍将使用虚拟地址找到的缓存行,但随后将检查对物理地址的标签,所以MMU查找可以并行完成高速缓存行查找。

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