cache的組織結(jié)構(gòu)
Cache的容量很小,它保存的內(nèi)容只是主存內(nèi)容的一個(gè)子集,且Cache與主存的數(shù)據(jù)交換是以塊為單位的。為了把信息放到Cache中,必須應(yīng)用某種函數(shù)把主存地址定位到Cache中顾稀,這稱為地址映射。在信息按這種映射關(guān)系裝入Cache后坝撑,CPU執(zhí)行程序時(shí)静秆,會(huì)將程序中的主存地址變換成Cache地址,這個(gè)變換過程叫做地址變換巡李。
Cache的地址映射方式有直接映射抚笔、全相聯(lián)映射和組相聯(lián)映射。假設(shè)某臺(tái)計(jì)算機(jī)主存容量為l MB侨拦,被分為2048塊殊橙,每塊512B;Cache容量為8KB狱从,被分為16塊膨蛮,每塊也是512B。
基本的計(jì)算機(jī)都會(huì)是組相連映射季研,所以我只是總結(jié)下組相連的樣子:
組相聯(lián)映射
組相聯(lián)映射實(shí)際上是直接映射和全相聯(lián)映射的折中方案敞葛,其組織結(jié)構(gòu)如圖3-16所示。主存和Cache都分組与涡,主存中一個(gè)組內(nèi)的塊數(shù)與Cache中的分組數(shù)相同惹谐,組間采用直接映射持偏,組內(nèi)采用全相聯(lián)映射。也就是說氨肌,將Cache分成u組综液,每組v塊,主存塊存放到哪個(gè)組是固定的儒飒,至于存到該組哪一塊則是靈活的谬莹。例如,主存分為256組桩了,每組8塊附帽,Cache分為8組,每組2塊井誉。
主存中的各塊與Cache的組號(hào)之間有固定的映射關(guān)系蕉扮,但可自由映射到對(duì)應(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)點(diǎn),盡量避免二者的缺點(diǎn)悔捶,因而得到普遍采用铃慷。
下圖更清晰一點(diǎn):
根據(jù)上圖我們知道:每隔
2^(c-r) - 1
個(gè)字塊都映射向同一個(gè)cache set。我們稱這個(gè)距離為critical stride蜕该,critical stride 可有下列公式計(jì)算得:(critical stride) = (number of sets) * (line size) = (total cache size) / (number of ways);