我知道如何通過TLB &緩存幫助cpu訪問數據。 但我很困惑,無論是數據緩存& TLB共享相同的CPU緩存或MMU硬件有單獨的緩存TLB。在發生上下文切換時,誰將刷新TLB和數據緩存的內容?關於TLB和數據緩存
回答
這非常依賴於CPU。
既然你談論「MMU硬件」,我假設你有一個非常古老的書。至少在過去的20年中,MMU已經非常緊密地集成到大多數CPU中。
無論如何,讓我們從緩存開始。在大多數你每天都會遇到的CPU上,比如i386和x86_64,這些高速緩存都是物理索引的。這意味着他們緩存物理內存訪問內容,因此不需要在上下文切換時刷新它們。
在其他具有虛擬高速緩存的CPU架構上,有多種機制來確保高速緩存一致性。在一些完全虛擬地址緩存的情況下,操作系統的工作是在上下文切換時刷新整個緩存。在某些情況下,虛擬索引緩存也有一個物理標記,以確保無論我們從緩存獲得的是正確的(緩存行查找與TLB查找並行,因此檢查物理地址不是問題)。在其他情況下,操作系統爲每個不同的上下文都分配一個明確的上下文編號,這也是高速緩存查找的一部分,並且不需要在上下文切換時刷新高速緩存。
對於TLB,基本上有三種主要口味。一個是具有顯式上下文編號的緩存,因此您不需要在上下文切換上進行任何操作。當新頁面表被加載時(這是i386和x86_64),第二種風格自動刷新TLB。加載新頁面表後,一些較舊的CPU需要顯式TLB刷新。做TLB的第三種方式是用特殊的陷阱處理程序完全用軟件填充它們。
對於TLB和普通緩存是否共享內存的問題。通常沒有。在您需要多少TLB與緩存之間很難取得平衡。另外,在TLB和緩存中查找事情的方式完全不同,並且需要保持一致性。這就是說,通常TLB總是從物理內存中加載,有些CPU甚至需要在TLB加載之前緩存刷新。在酷睿2英特爾開始從CPU緩存而導致錯誤的熱鬧量在早期的Core 2 CPU和加載TLB低級別的內存管理文件,甚至一些重寫基本上所做的所有未來英特爾CPU不向下兼容,並有許多老操作系統內核無法在Core 2和更新的Intel CPU上正常運行。
- 1. TLB翻譯vs緩存
- 2. 緩存相關數據
- 3. 關閉數據緩存asp.net
- 4. 關於select_related()緩存
- 5. 緩存和保存數據
- 6. 緩存未命中,TLB未命中和頁面錯誤
- 7. 關於sharepoint和SQL數據存儲
- 8. 數據的URI和緩存
- 9. 緩存數據和sqlite3的
- 10. 關於緩存算法
- 11. 關於休眠緩存
- 12. 關於緩存控制
- 13. 什麼是非數據緩存未命中的跡象(指令,TLB等)?
- 14. .Net 4.0在SqlServer數據庫中緩存數據相當於內存緩存
- 15. 用於緩存相關數據的模式
- 16. Rails:關閉數據庫緩存
- 17. 關於TLB和Cache在典型程序中的不同之處
- 18. 多態關係和計數器緩存
- 19. phpfastcache用於緩存數據集
- 20. 由於SVN緩存的SQLite數據庫
- 21. 關於HTML5離線存儲和緩存的iPad應用程序
- 22. 緩存數據庫數據
- 23. 虛擬內存系統,頁表和TLB
- 24. 關於habtm關係的計數器緩存?
- 25. Codeigniter Web頁面緩存和數據庫緩存?
- 26. AppFabric緩存 - 正確使用DataCacheFactory和數據高速緩存
- 27. 數據緩存和指令緩存是什麼意思?
- 28. 加載和緩存基於時間的數據
- 29. 適用於Android應用和數據緩存的Rails Web服務
- 30. angularJS緩存數據
的TLB緩存通常是分開的,也不同的高速緩存用於指令和數據。無效緩存是操作系統的責任。 – 2014-08-28 09:43:00
爲什麼'C'標籤? – dragosht 2014-08-28 09:49:49