高速緩沖存儲器是存在于主存與CPU之間的一級存儲器, 由靜態(tài)存儲芯片(SRAM)組成,容量比較小但速度比主存高得多, 接近于CPU的速度。在計算機存儲系統(tǒng)的層次結構中,是介于中央處理器和主存儲器之間的高速小容量存儲器。它和主存儲器一起構成一級的存儲器。高速緩沖存儲器和主存儲器之間信息的調度和傳送是由硬件自動進行的。高速緩沖存儲器最重要的技術指標是它的命中率。
CPU在Cache中找到有用的數(shù)據被稱為命中,當Cache中沒有CPU所需的數(shù)據時(這時稱為未命中),CPU才訪問內存。從理論上講,在一顆擁有2級Cache的CPU中,讀取L1Cache的命中率為80%。也就是說CPU從L1Cache中找到的有用數(shù)據占數(shù)據總量的80%,剩下的20%從L2Cache讀取。由于不能準確預測將要執(zhí)行的數(shù)據,讀取L2的命中率也在80%左右(從L2讀到有用的數(shù)據占總數(shù)據的16%)。那么還有的數(shù)據就不得不從內存調用,但這已經是一個相當小的比例了。在一些高端領域的CPU中,我們常聽到L3Cache,它是為讀取L2Cache后未命中的數(shù)據設計的—種Cache,在擁有L3Cache的CPU中,只有約5%的數(shù)據需要從內存中調用,這進一步提高了CPU的效率。為了保證CPU訪問時有較高的命中率,Cache中的內容應該按一定的算法替換。一種較常用的算法是“最近最少使用算法”(LRU算法),它是將最近一段時間內最少被訪問過的行淘汰出局。因此需要為每行設置一個計數(shù)器,LRU算法是把命中行的計數(shù)器清零,其他各行計數(shù)器加1。當需要替換時淘汰行計數(shù)器計數(shù)值最大的數(shù)據行出局。這是一種高效、科學的算法,其計數(shù)器清零過程可以把一些頻繁調用后再不需要的數(shù)據淘汰出Cache,提高Cache的利用率。Cache的替換算法對命中率的影響。 當新的主存塊需要調入Cache并且它的可用空間位置又被占滿時,需要替換掉Cache的數(shù)據,這就產生了替換策略(算法)問題。根據程序局部性規(guī)律可知:程序在運行中,總是頻繁地使用那些最近被使用過的指令和數(shù)據。這就提供了替換策略的理論依據。 替換算法目標就是使Cache獲得最高的命中率。Cache替換算法是影響代理緩存系統(tǒng)性能的一個重要因素,一個好的Cache替換算法可以產生較高的命中率。常用算法如下:
(1)隨機法(RAND法) 隨機替換算法就是用隨機數(shù)發(fā)生器產生一個要替換的塊號,將該塊替換出去,此算法簡單、易于實現(xiàn),而且它不考慮Cache塊過去、現(xiàn)在及將來的使用情況,但是沒有利用上層存儲器使用的“歷史信息”、沒有根據訪存的局部性原理,故不能提高Cache的命中率,命中率較低。
(2)先進先出法(FIFO法) 先進先出(First-In-First-Out,F(xiàn)IFO)算法。就是將最先進入Cache的信息塊替換出去。FIFO算法按調入Cache的先后決定淘汰的順序,選擇最早調入Cache的字塊進行替換,它不需要記錄各字塊的使用情況,比較容易實現(xiàn),系統(tǒng)開銷小,其缺點是可能會把一些需要經常使用的程序塊(如循環(huán)程序)也作為最早進入Cache的塊替換掉,而且沒有根據訪存的局部性原理,故不能提高Cache的命中率。因為最早調入的信息可能以后還要用到,或者經常要用到,如循環(huán)程序。此法簡單、方便,利用了主存的“歷史信息”, 但并不能說最先進入的就不經常使用,其缺點是不能正確反映程序局部性原理,命中率不高,可能出現(xiàn)一種異?,F(xiàn)象。(
3)近期最少使用法(LRU法) 近期最少使用(Least Recently Used,LRU)算法。這種方法是將近期最少使用的Cache中的信息塊替換出去。該算法較先進先出算法要好一些。但此法也不能保證過去不常用將來也不常用。 LRU法是依據各塊使用的情況,總是選擇那個最近最少使用的塊被替換。這種方法雖然比較好地反映了程序局部性規(guī)律,但是這種替換方法需要隨時記錄Cache中各塊的使用情況,以便確定哪個塊是近期最少使用的塊。LRU算法相對合理,但實現(xiàn)起來比較復雜,系統(tǒng)開銷較大。通常需要對每一塊設置一個稱為計數(shù)器的硬件或軟件模塊,用以記錄其被使用的情況。