Cache 基本概念

cache用來存放最近CPU訪問的一些memory的數值
L1 Cache:離CPU比較近的cache,有i-Cache,D-Cache
L2 Cache:離CPU比較遠的cache,如果沒有內部的,可以在外面加

CPU儘可能從cache裏取數據,就減少了向外面訪問的頻率
同時也減小了功耗,外部功耗會比較大,內部memory功耗較小
儘可能讓cpu對onchip的部件進行操作

Cache結構:
採用組相聯映射
RAM分爲Data RAM和Tag RAM 分別存數據和地址

在這裏插入圖片描述
一個line一般是4到8word
way由很多line組成,可以理解爲片,data RAM裏由很多位組成,
memory地址空間裏面的數據可以放在不同的way裏面
set是不同way中的同一個line
Tag用於標記memory地址,來自於訪問地址,往往是最上面的
存放在Tag RAM裏面
CPU訪問cache的時候,首先會訪問Tag RAM,有沒有對應的地址,如果匹配,那麼就從cache裏拿數據或者把數據寫到cache裏面
Index來自地址,查找到底數據在那個cache line裏面

地址由 組號 組內塊號 塊內地址組成,其中塊內地址又被進一步分開成offset 和bytes的選擇

舉例:
在這裏插入圖片描述
valid代表cache line是不是有效的
dirty bit 代表cacheline裏面的數據是不是最新的,和外面的是不是一致的
如果是dirty就是不一致的

在這裏插入圖片描述
cache line是怎麼分配的
在這裏插入圖片描述
根據index找到是哪個cache line,然後把tag的物理區域,和index找到的tag RAM裏存放的tag值進行比較,如果匹配,就cache hit 否則就cache miss
在兩個ways裏都會去找
在這裏插入圖片描述
這裏也是兩個ways,4個sets,但是CPU起始的位置變了,從0x70開始
CPU發出訪問地址的時候,會分配到set3,30也是,已經被分配好了
B0本來也應該分配到set3,但是set3已經被佔去了,這時候有三種策略

一、 隨機策略(Random):B0中的數據隨機分配到way0或者way1的某個set中
二、 輪詢方式(Round Robin),先是way0再是way1
三、 LRU(Least Recently Used) 看哪個最近最少使用

Read Allocation:
在這裏插入圖片描述
發生cachemiss的時候,這時候要分配cache line了,會讀一整行的數據到cache line裏面來,這個過程叫cache linefill

Write Allocation
寫的地址首先會到cache中,發現有cache miss的情況發生,同樣的,也需要cache linefill。之後把寫的東西寫到cache line裏面去或者memory裏面去。
write的時候有個策略:
把數值從memory寫到cache line裏面,然後CPU寫Cache line,就認爲結束了,等待cache一塊寫道memory中,稱爲Write Back。另一種是不光要寫Cache中的內容,還要寫Memory中的內容,這樣兩個存儲體裏的數據保持一致。

Cache 分類
根據Cache的index和tag來源,可以把cache分爲很多種類:
VIVT: Virtual Index Virtual Tag,顧名思義,索引Cache時的Index來自Virtual Address(虛擬地址),Tag同樣也來自虛擬地址
VIPT: Virtual Index Physical Tag,顧名思義,索引Cache時的Index來自Virtual Address(虛擬地址),Tag來自Physical Address(物理地址),通常用於Instruction cache
PIPT: Physical Index Physical Tag,顧名思義,索引Cache時的Index和Tag 都來自Physical Address(物理地址),通常用於Data cache

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章