Cache采用存取速度快的SRAM器件構(gòu)成。通常分為兩級(jí):集成在CPU芯片中的Cache稱為一級(jí)(L1 Cache),其速度與CPU相匹配,但 容量較小,一般為幾KB到幾十KB;安裝在主板上的Cache稱為二級(jí)(L2 Cache),容量較大,從幾百千字節(jié)到幾兆字節(jié)不等。
80486 CPU芯片內(nèi)有8KB的Cache,存放程序和數(shù)據(jù)。Pentium芯片內(nèi)有16KB的Cache,分為兩個(gè)獨(dú)立的8KB區(qū)域,其中一個(gè)用 于存放程序,另一個(gè)用于存放數(shù)據(jù)。80486和Pentium支持L2 Cache, PentiumⅡ以后的CPU則將L2 Cache與CPU內(nèi)核一 起封裝在一只金屬盒內(nèi),或者直接把L2 Cache也集成到CPU芯片內(nèi),進(jìn)一步提高了速度,改善了性能。
5.5.1 Cache的工作原理
Cache介于CPU和主存之間,并和主存有機(jī)地結(jié)合起來,借助于輔助硬件組成Cache-主存層次結(jié)構(gòu),其工作原理。
Cache中的信息是主存中信息的一部分。Cache和主存都被分成若干個(gè)大小相等的塊,每塊由若干字節(jié)組成,由于Cache的容量遠(yuǎn)小于主存的容量, 所以Cache中的塊數(shù)要遠(yuǎn)少于主存中的塊數(shù),它保存的信息只是主存中最活躍的若干塊的副本。當(dāng)CPU讀/寫信息時(shí),首先通過Cache控制部件的地址變 換機(jī)構(gòu)訪問Cache,如果Cache被命中,就直接對(duì)Cache進(jìn)行訪問,與主存無關(guān);如果Cache未命中,則仍須訪問主存,并把要訪問的信息塊一次 從主存調(diào)入Cache內(nèi),若此時(shí)Cache已滿,則須根據(jù)某種置換算法,用新塊的信息置換舊塊中的信息。
5.5.2 Cache的地址映射
為了把信息從主存中取出送入Cache中,必須使用某種地址變換機(jī)制把主存地址映射到Cache中定位,稱之為地址映射。其實(shí)現(xiàn)方法是:將主存和 Cache都分為大小相等的若干塊(或稱頁),每塊的大小為2n個(gè)字節(jié),通常為29(512B)或210(1024B)或211(2048B)等,以塊為 單位進(jìn)行映射。如假設(shè)某系統(tǒng)的主存容量為1MB,若每塊容量為1KB,則被分為1024塊;Cache容量為8KB,每塊容量也是1KB,則被分為8塊。 下面以此為例,介紹三種Cache的地址映射方法(見)。
1.直接地址映射
直接地址映射是指主存中每一個(gè)塊只能映射到某一固定的Cache塊中,如(a)所示。
把主存按Cache大小分為若干組,每一組按對(duì)應(yīng)的塊號(hào)進(jìn)行映射。如主存的第0塊,第8塊……,第1016塊,只能映射到Cache的第0塊;而主存的第1塊,第9塊……,第1017塊只能映射到Cache的第1塊,依次類推。
這種映射方法比較簡(jiǎn)單,且地址轉(zhuǎn)換速度快,但不夠靈活,使得Cache的存儲(chǔ)空間得不到充分利用。
2.全相聯(lián)地址映射
全相聯(lián)地址映射是指主存中的每一塊都可以映射到Cache的任何一塊位置上,如(b)所示。這種映射方法比較靈活,Cache的利用率高;但地址轉(zhuǎn)換速度慢,而且需要采用某種置換算法將Cache中的內(nèi)容調(diào)入調(diào)出,實(shí)現(xiàn)起來系統(tǒng)開銷大。
3.組相聯(lián)地址映射
組相聯(lián)地址映射是直接地址映射和全相聯(lián)地址映射的折中方案,如(c)所示。主存和Cache都分組,主存中一個(gè)組內(nèi)的塊數(shù)與Cache中的分組數(shù)相同。 組間采用直接地址映射,而組內(nèi)采用全相聯(lián)地址映射。主存中的各塊與Cache的組號(hào)間有固定的映射關(guān)系,但可自由映射到對(duì)應(yīng)的Cache組中的任何一塊。 如主存中的第0塊可映射到Cache的第0組的第0塊或第1塊;主存中的第1塊可映射到Cache的第1組的第2塊或第3塊……這種映射方法比直接地址映 射靈活,比全相聯(lián)地址映射速度快。
5.5.3 Cache的置換算法
在采用全相聯(lián)地址映射和組相聯(lián)地址映射方式時(shí),在主存向Cache傳送一個(gè)新塊時(shí),若Cache中的可用位置已被占用時(shí),就應(yīng)該調(diào)用置換算法,淘汰舊塊,調(diào)入新塊進(jìn)行置換。下面簡(jiǎn)要介紹兩種常用的置換算法。
1.先進(jìn)先出(FIFO)算法
FIFO算法的基本思想是:按調(diào)入Cache的先后決定淘汰的順序,即在需要更新時(shí),將最先進(jìn)入Cache的塊作為被置換的塊。這種算法不需要隨時(shí)記錄各個(gè)塊的使用情況,容易實(shí)現(xiàn),而且系統(tǒng)開銷;其缺點(diǎn)是可能會(huì)把一些需要經(jīng)常使用的程序塊被調(diào)入的新塊置換掉。
2.近期最少使用(LRU)算法
LRU算法的基本思想是:把CPU近期最少使用的塊作為被置換的塊。這種置換算法相對(duì)合理,但需要隨時(shí)記錄Cache中各塊的使用情況,以便確定哪個(gè)塊是近期最少使用的塊,實(shí)現(xiàn)起來比較復(fù)雜,系統(tǒng)開銷較大。