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