先看一張Alan Jay Smith《Cache Memory》里的一張插圖:A typical cache andTLB design
來源:cache-mem.pdf?Figure 2
尋址及數(shù)據(jù)獲取
CPU對cache和內(nèi)存(這里指主存mainmemory爽茴,通常是DDR內(nèi)存)的尋址類似鹏溯,都需要被訪問對象的地址,但尋址過程有點差別:
CPU訪問內(nèi)存時卧惜,通常有兩個動作:
1.在EPN(Effective Page Number,上圖中的PageNumber部件)完成虛實地址轉換真屯,EPN經(jīng)過Hash Function后在TLB中查找并得到RPN(RealPage Number),如果TLB Miss柴底,RPN將通過慢速的頁表查找來獲得,最終完成虛擬地址到物理地址:頁框(PageNumber)的轉換础倍;
2.CLN(Cache Line Number,上圖中的Line Number部件)查找合適的CacheBlock胎挎。
Cache Block的查找和Page Number的轉換可以同步進行沟启。
在多處理器系統(tǒng)中,CLN索引得到的CacheBlock中的數(shù)據(jù)可能不是有效的數(shù)據(jù)犹菇,因此還需要做進一步的比較:PA與CacheBlock中的Address進行比較德迹,如果結果相同且狀態(tài)位匹配,表明CacheHit揭芍,此時CPU通過ByteSelect and Align部件獲得所需的數(shù)據(jù)胳搞。如果Cachemiss,則需要通過PA進一步索引在內(nèi)存中獲取數(shù)據(jù)
Cache Block組成
一個CacheBlock由地址沼沈、狀態(tài)位和數(shù)據(jù)單元組成:
·Data:Cache Block中的數(shù)據(jù)流酬,其長度為32或64,視CPU而定
·Status:Cache Block的狀態(tài)列另,在大部分處理器中芽腾,該字段包含的是MESI、MOESI或者MESIF這些信息狀態(tài)页衙。某些處理器還包含一個L位摊滔,表示當前CacheBlock是否可用鎖定阴绢,許多將Cache模擬成SRAM的處理器就是利用了這個L位。
·Real Address Tag:簡稱RAT艰躺,記錄當前Cache中存放的數(shù)據(jù)和哪個地址相關呻袭,RAT中存放一部分物理地址信息,雖然CPU的物理地址可能有48位腺兴,但Cache中的地址位不需要這么多:
CPU訪問Cache使用的地址
從Cache的角度來看左电,CPU的地址可用劃分為:
·Real Address Tag:該字段以單個Cache中的RAT的字段長度相同,CPU使用地址中的RAT字段與Cache中對應的字段以及狀態(tài)位進行聯(lián)合比較页响,判斷其訪問數(shù)據(jù)是否命中
·Cache Line Index:和CLN的作用類似篓足,CPU使用該字段在Cache中選擇某一個Entry,如果是組相聯(lián)(Set-Associative)方式組織的Cache闰蚕,則選擇某一組Entry.
·Bank:在Multi-Bank的系統(tǒng)中栈拖,CPU訪問Cache時,不同Bank可用并發(fā)訪問没陡。
·Byte:Cache的端口位寬涩哟,目前大部分系統(tǒng)的Cache總線位寬為128位或64位
Bank和Byte字段之和確定了單個Cache的Data字段長度,也就是通常說的CacheLine的長度盼玄,上圖所示的CacheLine長度為26= 64 Bytes贴彼,目前大部分的CacheLine大小都為64Bytes,部分原因是因為DDR3SDRAM的一次BurstLine為8埃儿,一次Burst操作訪問的數(shù)據(jù)大小為64Bytes
------------
補充一些基本概念锻弓,from?https://cseweb.ucsd.edu/classes/su07/cse141/cache-handout.pdf
cache block - The basic unit for cache storage. May contain multiple bytes/words of data.
cache line - Same as cache block. Note that this is not the same thing asa “row” of cache.
cache set - A “row” in the cache. The number of blocks per set is deter-mined by the layout of the cache (e.g. direct mapped, set-associative,
or fully associative).
tag - A unique identifier for a group of data. Because different regions ofmemory may be mapped into a block, the tag is used to differentiate
between them.
valid bit - A bit of information that indicates whether the data in a block is valid (1) or not