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. 什麼是多層緩存?
- 8. 什麼是熱身緩存?
- 9. 什麼是「懶惰緩存」?
- 10. 提高緩存命中率
- 11. 什麼是Android Picasso的高性能最佳緩存設置?
- 12. 什麼是使用可高速緩存的註釋
- 13. Apache反向高速緩存代理 - 爲什麼不高速緩存?
- 14. 提高錯誤的目的是什麼?
- 15. 本代碼文章中提到的「緩存函數」是什麼?
- 16. 什麼意思是溫暖的緩存?
- 17. 什麼是Blur.js中的緩存前綴?
- 18. 什麼是共享點中的緩存
- 19. 提高MySQL中的表緩存
- 20. 提高Mule中的緩存性能
- 21. 爲什麼我使用Spring緩存服務的高速緩存未命中
- 22. 冷緩存和熱緩存概念是什麼意思?
- 23. 數據緩存和指令緩存是什麼意思?
- 24. 什麼是緩存大小和緩存行大小?
- 25. 什麼是緩存標籤目錄?
- 26. 這是什麼意思「語句緩存」?
- 27. windows azure緩存:PREVIEW是什麼意思?
- 28. 什麼是GWT字節緩存文件?
- 29. 什麼是中間JavaScript靜態緩存
- 30. 什麼是緩存配置文件?
參見:維基百科的CPU高速緩存(http://en.wikipedia.org/wiki/CPU_cache#Address_translation)。 – 2015-01-05 20:29:51