2012-07-05 51 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-緩存。因爲兩個虛擬地址可能指向相同的物理內存位置(在用戶和內核空間之間共享內存時可能會發生這種情況)。因此,您可以在緩存中使用不同數據的兩個位置,這可能非常難以正確管理(按照正確順序顯式清空緩存並使緩存失效)。