cache的組織結(jié)構(gòu)
Cache的容量很小,它保存的內(nèi)容只是主存內(nèi)容的一個子集,且Cache與主存的數(shù)據(jù)交換是以塊為單位的。為了把信息放到Cache中,必須應(yīng)用某種函數(shù)把主存地址定位到Cache中,這稱為地址映射。在信息按這種映射關(guān)系裝入Cache后,CPU執(zhí)行程序時,會將程序中的主存地址變換成Cache地址,這個變換過程叫做地址變換。
Cache的地址映射方式有直接映射、全相聯(lián)映射和組相聯(lián)映射。假設(shè)某臺計算機主存容量為l MB,被分為2048塊,每塊512B;Cache容量為8KB,被分為16塊,每塊也是512B。
基本的計算機都會是組相連映射,所以我只是總結(jié)下組相連的樣子:
組相聯(lián)映射
組相聯(lián)映射實際上是直接映射和全相聯(lián)映射的折中方案,其組織結(jié)構(gòu)如圖3-16所示。主存和Cache都分組,主存中一個組內(nèi)的塊數(shù)與Cache中的分組數(shù)相同,組間采用直接映射,組內(nèi)采用全相聯(lián)映射。也就是說,將Cache分成u組,每組v塊,主存塊存放到哪個組是固定的,至于存到該組哪一塊則是靈活的。例如,主存分為256組,每組8塊,Cache分為8組,每組2塊。

主存中的各塊與Cache的組號之間有固定的映射關(guān)系,但可自由映射到對應(yīng)Cache組中的任何一塊。例如,主存中的第0塊、第8塊……均映射于Cache的第0組,但可映射到Cache第0組中的第0塊或第1塊;主存的第1塊、第9塊……均映射于Cache的第1組,但可映射到Cache第1組中的第2塊或第3塊。
常采用的組相聯(lián)結(jié)構(gòu)Cache,每組內(nèi)有2、4、8、16塊,稱為2路、4路、8路、16路組相聯(lián)Cache。組相聯(lián)結(jié)構(gòu)Cache是前兩種方法的折中方案,適度兼顧二者的優(yōu)點,盡量避免二者的缺點,因而得到普遍采用。
下圖更清晰一點:

根據(jù)上圖我們知道:每隔
2^(c-r) - 1個字塊都映射向同一個cache set。我們稱這個距離為critical stride,critical stride 可有下列公式計算得:(critical stride) = (number of sets) * (line size) = (total cache size) / (number of ways);
一次內(nèi)存訪問示意圖
