1
A
回答
8
缓存有三种常见类型。
- VIVT =虚地址索引虚拟标记
- VIPT =虚地址索引物理标记
- PIPT =物理变址物理标记
还有
- PIVT =物理虚地址索引已标记为
PIPT通常用于二级和更深入的高速缓存,因为物理地址必须在那一刻,反正知道,但ARMv7的还推出PIPT L1 DCaches。 PIVT并非真正实用,因此在现实世界中不被使用。
区别在于缓存行如何连接到底层内存。
虚地址索引意味着纯粹的缓存行的查找与虚拟地址来实现的,因此可以之前的任何虚拟到物理地址转换来完成。然后,标记将决定缓存行是真正映射到底层内存还是包含恰好映射到相同缓存行的其他内存位置的数据。
如果标记与虚拟地址,然后两个进程碰巧使用相同的虚拟地址可能绊倒对方,因为一个进程可以访问哪些其他进程放到缓存中的数据来完成。所以对于VIVT缓存的CPU,内核必须在上下文切换器上刷新整个缓存。所以新进程不会无意中访问不正确的数据,这意味着对于VIVT缓存的CPU来说,上下文切换通常是非常昂贵的操作。在ARMv5及更高版本中,支持所谓的快速上下文切换扩展(Fast Context Switch Extensions),它使用标签修改虚拟地址。但是这涉及很多限制。
相反VIPT仍将使用虚拟地址找到的缓存行,但随后将检查对物理地址的标签,所以MMU查找可以并行完成高速缓存行查找。
别名是另一个大问题VIVT-缓存。因为两个虚拟地址可能指向相同的物理内存位置(在用户和内核空间之间共享内存时可能会发生这种情况)。因此,您可以在缓存中使用不同数据的两个位置,这可能非常难以正确管理(按照正确顺序显式清空缓存并使缓存失效)。
相关问题
- 1. 提高缓存命中率
- 2. 什么是热身缓存?
- 3. 什么是多层缓存?
- 4. 什么是直通缓存?
- 5. 什么是Azure Redis缓存?
- 6. 什么是缓存标记?
- 7. CacheFilterAttribute MVC /什么是缓存
- 8. 什么是Android Picasso的高性能最佳缓存设置?
- 9. Apache反向高速缓存代理 - 为什么不高速缓存?
- 10. 提高MySQL中的表缓存
- 11. 提高Mule中的缓存性能
- 12. 什么是共享点中的缓存
- 13. 使用Smarty +缓存提高性能?
- 14. “缓存写入”是什么意思?
- 15. 什么是缓存配置文件?
- 16. ASP.NET缓存,什么是最佳做法
- 17. 什么是缓存AppData \ Local \ assembly \ dl3?
- 18. 什么是预热清除缓存?
- 19. 什么意思是“缓存线对齐”?
- 20. C++缓存文件是什么意思?
- 21. 什么是缓存标签目录?
- 22. 禁用高速缓存中的缓存
- 23. 较大的高速缓存大小是否总能提高性能?
- 24. 什么是缓冲区缓存中的临时CLOB?
- 25. 在ASP.NET中强制高速缓存到期的最佳方法是什么?
- 26. 在服务器上缓存数据是否会提高性能?
- 27. 检测Web API请求是否由高速缓存提供
- 28. Firebase - 缓存是否可以提高性能?
- 29. Symfony缓存是什么:clear实际上做了什么?
- 30. 什么是高度?
参见:维基百科的CPU高速缓存(http://en.wikipedia.org/wiki/CPU_cache#Address_translation)。 – 2015-01-05 20:29:51