原文出處:http://gsqls.blog.163.com/blog/static/45971218201341310221675/
一、高速緩衝儲存空間的功能、結構與工作原理
高速緩衝儲存空間是存在於主存與CPU之間的一級儲存空間,由靜態儲存晶片(SRAM)組成,容量比較小但速度比主存高得多,接近於CPU的速度。
1、Cache的引入
請注意下面兩種情況:
①大容量主存一般採用DRAM,相對SRAM速度慢,而SRAM速度快,但價格高。
②程式和資料具有局部性,即在一個較短的時間內,程式或資料往往集中在很小的儲存空間位址範圍內。
因此,在主存和CPU之間可設定一個速度很快而容量相對較小的儲存空間,在其中存放CPU當前正在使用以及一個較短的時間內將要使用的程式和資料,這樣,可大大加快CPU訪問儲存空間的速度,提高機器的運行效率。
Cache基本工作原理如下圖:
Cache的功能是用來存放那些近期需要啟動並執行指令與資料,目的是提高CPU對儲存空間的訪問速度,為此需要解決2個技術問題:
一是主存地址與緩衝地址的映射及轉換;
二是按一定原則對Cache的內容進行替換。
Cache的結構和工作原理如下圖所示。
主要由三大部分組成:
Cache儲存體:存放由主存調入的指令與資料區塊。
地址轉換組件:建立目錄表以實現主存地址到緩衝地址的轉換。
替換組件:在緩衝已滿時按一定策略進行資料區塊替換,並修改地址轉換組件。
2.Cache的基本原理
Cache與主存都分成塊(常常將Cache塊說成Cache行),每塊由多個位元組組成,大小相等。在一個時間段內,Cache的某塊中放著主存某塊的全部資訊,即Cache的某一塊是主存某塊的副本(或叫映像),如下圖所示。
Cache除資料部分外,還應記錄放在某塊中的資訊是主存中哪一塊的副本。因此,還應有第二個組成部分,即標記(tag)——記錄主存塊的塊地址資訊。
採用Cache後,進行訪問儲存空間操作時,不是先訪問主存,而是先訪問Cache。所以存在訪問Cache時對主存地址的理解問題(指物理地址)。由於Cache資料區塊和主存塊大小相同,因此主存地址的低地址部分(塊內地址)可作為Cache資料區塊的塊內地址。
二、地址映射與轉換
地址映射是指某一資料在記憶體中的地址與在緩衝中的地址兩者之間的對應關係。下面介紹三種地址映射的方式。
1、全相聯映射方式
全相聯映射是指主存中任意一個塊都可以映射到Cache中任意一個塊的方式,也就是說,當主存中的某一塊需調入Cache時,可根據當時Cache的塊佔用或分配情況,選擇一個塊給主存Block Storage,所選的Cache塊可以是Cache中的任意一個塊。例如,設Cache共有2C塊,主存共有2M塊,當主存的某一塊j需調進Cache中時,它可以存入Cache的塊0、塊1、…、塊i、…或塊2C-1的任意一塊上。如下圖所示。
全相聯映射方式
在全相聯映射方式下,CPU的訪主存地址為如下形式:
其中,M為主存的塊號,W為塊內的字型大小。而CPU訪Cache的地址形式為:
其中,C為Cache的塊號,W為塊內的字型大小。
主存地址到Cache地址的轉換是通過尋找一個由相聯儲存空間實現的塊表來完成的,其形成過程如下圖所示。
全相聯映射的地址轉換
當一個主存塊調入Cache中時,會同時在一個儲存主存塊號和Cache塊號映射表的相聯儲存空間中進行登記。CPU訪存時,首先,根據主存地址中的主存塊號M在相聯儲存空間中尋找Cache塊號C,若找到,則本次訪Cache命中,於是將對應的Cache塊號取出,並送訪Cache地址的塊號C欄位,緊接著將主存地址的塊內字型大小W直接送Cache地址的塊內字型大小W欄位,從而形成一個訪Cache的地址,最後根據該地址完成對Cache單元的訪問。
優點:命中率比較高,Cache儲存空間利用率高。
缺點:相聯儲存空間龐大,比較電路複雜,訪問相關儲存空間時,每次都要與全部內容比較,速度低,成本高,因而只適合於小容量的Cache之用,應用少。
2.直接相聯映射
直接相聯映射方式是指主存的某塊j只能映射到滿足如下特定關係的Cache塊i中:
i=j mod 2C
直接相聯映射方式
上圖中,主存的第0、2C、2C+1、…塊只能映射到Cache的第0塊,主存的第1、2C+1、2C+1+1、…塊只能映射到Cache的第1塊,……,主存的第2C-1、2C+1-1、…2M-1塊只能映射到Cache的第2C-1塊。
對2C求餘後餘數相同的主存塊對應Cache中同一個塊。
在直接相聯映射方式下,CPU的訪主存地址為如下形式:
其中,T為標誌號,C為Cache的塊號,W為塊內的字型大小。在這裡,原主存的塊號M實際上被分成了兩個欄位:T和C,其中C用於指出主存的塊可以映射的Cache的塊,即對2C求餘後的餘數部分,而對於餘數相同的不同的主存塊來講,整除2C後的商(即上面的T)部分則不相同。
一般來講,主存的塊數是Cache的塊數的整數倍,也就是說主存的塊數2M和Cache的塊數2C滿足關係式:2M=n·2C。
在直接相聯映射方式下,標誌號T是隨Cache的每個塊一起儲存的,其地址轉換過程如下圖所示。
直接相聯映射的地址轉換
當一個主存塊調入Cache中時,會同時將主存地址的T標誌存入Cache塊的標誌欄位中。當CPU送來一個訪存地址時,首先,根據該主存地址的C欄位找到Cache的相應塊,然後將該塊標誌欄位中存放的標誌與主存地址的T標誌進行比較,若相符,說明主存的塊目前已調入該Cache塊中,則命中,於是使用主存地址的W欄位訪問該Cache塊的相應字單元;若不相符,則未命中,於是使用主存地址直接訪主存。
優點:比較電路最簡單,地址映射方式簡單,資料訪問時,只需檢查區號是否相等即可,因而可以得到比較快的訪問速度,硬體裝置簡單。
缺點:Cache塊衝突率較高,餘數相同的主存塊無法同時進入Cache,從而降低了Cache的利用率。由於主存的每一塊只能映射到Cache的一個特定塊上,當主存的某塊需調入Cache時,如果對應的Cache特定塊已被佔用,而Cache中的其它塊即使空閑,主存的塊也只能通過替換的方式調入特定塊的位置,不能放置到其它塊的位置上,替換操作頻繁,命中率比較低。
3.組相聯映射
以上兩種方式各有優缺點,而且非常有趣的是,它們的優缺點正好相反,也就是說,對於全相聯映射方式來說為優點的恰是直接相聯映射方式的缺點,而對於全相聯映射方式來說為缺點的恰是直接相聯映射方式的優點。那麼,可否找到一種能較好地兼顧這兩種方式的優點的映射方式呢。下面我們就來看看組相聯映射方式在這種方式下,將Cache分成2u組,每組包含2v塊。主存的塊與Cache的組之間採用直接相聯映射,而與組內的各塊則採用全相聯映射。也就是說,主存的某塊只能映射到Cache的特定組中的任意一塊。主存的某塊j與Cache的組k之間滿足如下關係:
k=j mod 2u
設主存共有2s×2u塊(即M=s+u),則它們的映射關係如下圖所示。
組相聯映射方式
圖中,主存的塊0、2u、2u+1