?為什麼要引入Cache

cache,高速緩衝存儲器,是一種以RAM為材料製成的高速存儲器。引入的原因主要有:

1. I/O設備向主存的訪問級別高於CPU,在I/O訪存期間,CPU將處於空閑狀態。

2. 主存速度的提高始終跟不上CPU的發展,主存與CPU的速度明顯不匹配

局部性原理

程序訪問的局部性原理包括時間局部和空間局部性。前者是指最近未來要用到的信息很可能是正在使用的信息,這是因為程序存在循環。後者是指指令和數據在內存中都是連續存放的並且有些指令和數據往往會被多次調用(如子程序,循環程序和一些常數)。因此只要將CPU近期要用到的程序和數據前從主存送到Cache,這樣大多數情況下,CPU都能直接從Cache中取得指令和數據。

Cache的工作原理

Cache是一種容量小而速度快的高度緩衝器,由快速的SRAM組成,直接做在CPU內,速度幾乎與CPU一樣快,任何時刻都有一些主存塊處於緩存之中,因此,CPU欲訪問主存的時候,有兩種可能: 1. 所需要的字已經在緩存中,於是CPU直接訪問Cache,(通常一次傳送一個字,主存不參與) 2. 所需要的字不在緩存中,那麼此時需要將字所在的主存塊整塊一次調入Cache中,(即主存-Cache之間以塊為單位進行傳送 )。主存塊調入緩存的過程,稱為建立對應關係。

我們將第一種情況稱為 CPU訪問Cache命中,簡稱Cache命中。第二種情況為不命中。由於緩存塊數目遠小於主存數,因此每個緩存快要設立一個標識,用來表明當前存放的是哪一個主存塊。 Cache的容量與長度是影響Cache效率的重要因素,通常用命中率來衡量Cache的效率 。 在一個程序執行期間,設總的命中次數為Nc,訪問主存的次數為Nm,那麼命中率可以這樣表示:

設Tc為命中時Cache的訪問時間,那麼Tm為未命中時的主存訪問時間,那麼平均訪問時間為;

其中H為命中率,顯然1 - H就是未命中率。 顯然,越好的Cache,其Ta值越接近Tc(即H接近於1)。

Cache與主存之間的映射

在Cache中,地址映射是指把主存地址空間映射到Cache地址空間,在將主存塊複製到Cache中的時候遵循一定的映射規則,標誌位為1時候,表示其Cache映射的主存塊數據有效。(注意與地址變換的區別,地址變換是指CPU在訪存的時候,將主存地址按照映射規則換算成Cache地址的過程 )。 地址映射有三種方式:直接映射,全相聯映射,組相聯映射、

1. 直接映射

這種方式主存塊只能裝入Cache的唯一位置,若該位置已有內容,則產生塊衝突,原來在Cache中的塊將無條件被替換出去,直接映射的關係可以定義為:

j = i mod2^c

其中,j為Cache的塊號或者行號。i為主存塊號,2^c為Cache的總塊數,因此主存的

只能映射到第0行,依次類推,其地址結構為:

CPU的訪存過程:首先根據地址中間的Cache字塊地址,直接找到對應的Cache塊號,若塊號的有效位為1,則表示命中,否則為不命中此時從主存中讀取該地址所在的主存塊號,並將其內容送到對應的Cache塊並將有效位置1,同時將內容送到CPU。 缺點:這種方式映射不夠靈活

2. 全相聯映射 這種方式可以把主存數據塊裝入Cache的任意一塊, 方式可以從已佔滿的Cache存儲塊中,替換出任一舊塊,顯然這種方式靈活,命中率也高,縮短了塊衝突,與直接相聯映射相比,其主存字塊位數增加,使得Cache標記位增多地址變換速度慢。通常使用「按內容定址的」相聯存儲器。其地址結構為:

3. 組相聯映射

將Cache空間分成大小相同的組,主存的一個數據塊可以裝到組內的任一個位置,即組間採取直接映射,組內採取全相聯映射。 如果把Cache分成Q組,每組有R塊,那麼有: i= j % q 其中i為緩存的組號,j為主存塊號主存地址分為三個欄位:

當組內2塊的時候,稱為2路組相聯映射。

CPU訪存過程:首先根據中間的組地址,找到對應的Cache組,若其標記位為1,說明命中,此時根據塊內地址,在對應得Cache行中,存取信息,若不命中,那麼此時從主存中讀出該地址所在的主存號塊,送到對應的Cache組的任一行,有效位置1,同時將內容送到CPU中。

下一篇將介紹一下Cache相關的演算法跟計算。


推薦閱讀:
相关文章