緩衝存儲器
緩衝存儲器
緩衝存儲器(Cache)是一種高速緩衝存儲器,是為了解決CPU和主存之間速度不匹配而採用的一項重要技術。Cache是介於CPU和主存之間的小容量存儲器,但存取速度比主存快。目前主存容量配置幾百MB的情況下,Cache的典型值是幾百KB。Cache能高速地向CPU提供指令和數據,從而加快了程序的執行速度。從功能上看,它是主存的緩衝存儲器,由高速的SRAM組成。為追求高速,包括管理在內的全部功能均由硬體實現,因而對程序員是透明的。
當前隨著半導體器件集成度的進一步提高,緩衝存儲器已放入到CPU中,其工作速度接近CPU的速度,從而能組成兩級以上的Cache系統。
緩衝存儲器工作原理要求它盡量保存最新數據。當一個新的主存塊需要複製到Cache,而允許存放此塊的行位置都被其他主存塊佔滿時,就要產生替換。替換問題與Cache的組織方式緊密相關。對直接映射的Cache來說,因一個主存塊只有一個特定的行位置可存放,所以問題解決起來很簡單,只要把此特定位置上的原主存塊換出Cache即可。對全相聯和組聯Cache來說,就要從允許存放新主存塊的若干特定行中選取一行換出。
如何選取就涉及到替換策略,又稱替換演演算法。通過硬體實現的常用演演算法主要有以下3種。
最不經常使用(LFU)演演算法
LFU演演算法認為應將一段時間內被訪問次數最少的那行數據換出。為此,每行設置一個計數器。新行建立后從0開始計數,每訪問一次,被訪問行的計數器增1。當需要替換時,對這些特定行的計數值進行比較,將計數值最小的行換出,同時將這些特定行的計數器都清零。這種演演算法將計數周期限定在對這些特定行兩次替換之間的間隔內,因而不能嚴格反映近期訪問情況。
近期最少使用(LRU)演演算法
LRU演演算法將近期內長時間未被訪問過的行換出。為此,每行也設置一個計數器,但它們是Cache每命中一次,命中行計數器清零,其他各行計數器增1。當需要替換時,比較各特定行的計數值,將計數值最大的行換出。這種演演算法保護了剛複製到Cache中的新數據行,符合Cache工作原理,因而使Cache有較高的命中率。
對2路級聯的Cache來說,LRU演演算法的硬體實現可以簡化。因為一個主存塊只能在一個特定組的兩行中做存放選擇,二選一完全不需要計數器,只需一個二進位位即可。例如,規定一組中的A行複製進新數據可將此位置“1”,B行複製進新數據可將此位置“0”。當需要置換時,只需檢查此二進位的位狀態即可:為0換出A行,為1換出B行,實現了保護新行的原則。奔騰CPU內的數據Cache是一個2路級聯結構,就採用這種簡潔的LRU替換演演算法。
隨機替換策略實際上是不要什麼演演算法,從特定的行位置中隨機地選取一行換出即可。這種策略在硬體上容易實現,且速度也比前兩種策略快。缺點是隨意換出的數據很可能馬上又要使用,從而降低命中率和Cache工作效率。但這個缺陷隨Cache容量的增大而減小。研究表明,隨機替換策略的功效僅稍遜於前兩種策略。
緩衝存儲器在電腦上應用的比較多。每一個硬碟上面都含有一個緩衝存儲器,這個存儲器主要可以將硬碟內常使用的數據快取起來,以加速系統的讀取效能。通常這個緩衝存儲器越大越好,因為緩衝存儲器的速度要比數據從硬碟中被找出來的速度快!目前主流產品可達16MB 左右內存大小。