主存和cache的三種mapping

2021-06-01 00:27:01 字數 3505 閱讀 1428

cpu對儲存器的訪問,通常是一次讀寫乙個字單元。當cpu訪cache不命中時,需將儲存在主存中的字單元連同其後若干個字一同調入cache中,之所以這樣做,是為了使其後的訪存能在cache中命中。因此,主存和cache之間一次交換的資料單位應該是乙個資料塊。資料塊的大小是固定的,由若干個字組成,且主存和cache的資料塊大小是相同的。

從cache-主存層次實現的目標看,一方面既要使cpu的訪存速度接近於訪cache的速度,另一方面為使用者程式提供的執行空間應保持為主存容量大小的儲存空間。在採用cache-主存層次的系統中,cache對使用者程式而言是透明的,也就是說,使用者程式可以不需要知道cache的存在。因此,cpu每次訪存時,依然和未使用cache的情況一樣,給出的是乙個主存位址。但在cache-主存層次中,cpu首先訪問的是cache,並不是主存。為此,需要一種機制將cpu的訪主存位址轉換成訪cache位址。而主存位址與cache位址之間的轉換是與主存塊與cache塊之間的對映關係緊密聯絡的,也就是說,當cpu訪cache未命中時,需要將欲訪問的字所在主存中的塊調入cache中,按什麼樣的策略調入,直接影響到主存位址與cache位址的對應關係,這也就是本小節要解決的主存與cache的位址對映問題。

主要有三種位址對映方式,分別為全相聯對映、直接相聯對映和組相聯對映。

全相聯對映是指主存中任一塊都可以對映到cache中任一塊的方式,也就是說,當主存中的一塊需調入cache時,可根據當時cache的塊占用或分配情況,選擇乙個塊給主存塊儲存,所選的cache塊可以是cache中的任意一塊。例如,設cache共有2c塊,主存共有2m塊,當主存的某一塊j需調進cache中時,它可以存入cache的塊0、塊1、…、塊i、… 或塊2c -1的任意一塊上。如圖4-28所示。

圖4-28 全相聯對映方式

其中,c為cache的塊號,w為塊內的字型大小。

主存位址到cache位址的轉換是通過查詢乙個由相聯儲存器實現的塊表來完成的,其形成過程如圖4-29示。

圖4-29 全相聯對映的位址轉換

當乙個主存塊調入cache中時,會同時在乙個儲存主存塊號和cache塊號對映表的相聯儲存器中進行登記。cpu訪存時,首先,根據主存位址中的主存塊號m在相聯儲存器中查詢cache塊號,若找到,則本次訪cache命中,於是將對應的cache塊號取出,並送訪cache位址的塊號c欄位;緊接著將主存位址的塊內字型大小w直接送cache位址的塊內字型大小w欄位,從而形成乙個訪cache的位址;最後根據該位址完成對cache單元的訪問.

全相聯對映方式的優點是cache的空間利用率高,但缺點是相聯儲存器龐大,比較電路複雜,因此只適合於小容量的cache之用。

直接相聯對映方式是指主存的某塊j只能對映到滿足如下特定關係的cache塊i中:

i=j mod 2c

(4.2)

圖4-30 直接相聯對映方式

上圖中,主存的第0、2c、2c

+1、… 塊只能對映到cache的第0塊,主存的第1、2c+1、2c

+1+1、… 塊只能對映到cache的第1塊,… … ,主存的第2c-1、2c

+1-1、…2m-1塊只能對映到cache的第2c-1塊。

其中,t為標誌號,c為cache的塊號,w為塊內的字型大小。在這裡,原主存的塊號m實際上被分成了兩個字段:t和c,其中c用於指出主存的塊可以對映的cache的塊。一般來講,主存的塊數是cache的塊數的整數倍,也就是說主存的塊數2m和cache的塊數2c滿足關係式:

2m=n·2c

在直接相聯對映方式下,標誌號t是隨cache的每個塊一起儲存的,其位址轉換過程如圖4-31所示。

圖4-31 直接相聯對映的位址轉換

當乙個主存塊調入cache中時,會同時將主存位址的t標誌存入cache塊的標誌欄位中。當cpu送來乙個訪存位址時,首先,根據該主存位址的c欄位找到cache的相應塊,然後將該塊標誌欄位中存放的標誌與主存位址的t標誌進行比較,若相符,說明主存的塊目前已調入該cache塊中,則命中,於是使用主存位址的w欄位訪問該cache塊的相應字單元;若不相符,則未命中,於是使用主存位址直接訪主存。

直接相聯對映方式的優點是比較電路最簡單,但缺點是cache塊衝突率較高,從而降低了cache的利用率。由於主存的每一塊只能對映到cache的乙個特定塊上,當主存的某塊需調入cache時,如果對應的cache特定塊已被占用,而cache中的其它塊即使空閒,主存的塊也只能通過替換的方式調入特定塊的位置,不能放置到其它塊的位置上。

以上兩種方式各有優缺點,而且非常有趣的是,它們的優缺點正好相反,也就是說,對於全相聯對映方式來說為優點的恰是直接相聯對映方式的缺點,而對於全相聯對映方式來說為缺點的恰是直接相聯對映方式的優點。那麼,可否找到一種能較好地兼顧這兩種方式的優點的對映方式呢?下面我們就來看看組相聯對映方式

在這種方式下,將cache分成2u組,每組包含2v塊。主存的塊與cache的組之間採用直接相聯對映,而與組內的各塊則採用全相聯對映。也就是說,主存的某塊只能對映到cache的特定組中的任意一塊。主存的某塊j與cache的組k之間滿足如下關係:

k=j mod 2u                             (4.3)

設主存共有2s×2u塊(即m=s+u),則它們的對映關係如下圖4-32示。

圖4-32 組相聯對映方式                                       

圖中,主存的塊0、2u、2u

+1、…、(2s-1)2u可以對映到cache的第0組的任意一塊,主存的塊1、2u+1、2u

+1+1、…、(2s-1)2u+1可以對映到cache的第1組的任意一塊,… … ,主存的塊2u-1、2u

+1-1、…、2m-1可以對映到cache的第2u-1組的任意一塊。

其中,u為cache的組號,v為組內的塊號。cache的塊號c=u+v,而主存的塊號m=s+u。也就是說,主存塊位址的後u位指出了主存的這一塊所能對映的cache的組。

與全相聯對映方式類似的是,在組相聯對映方式下,主存位址到cache位址的轉換也是通過查詢乙個由相聯儲存器實現的塊表來完成的,其形成過程如圖4-33所示。

圖4-33 組相聯對映的位址轉換

當乙個主存塊調入cache中時,會同時將其主存塊位址的前s位寫入乙個由相聯儲存器實現的快表的對應cache塊項的s欄位中。例如,設主存的某塊調入cache的第1組的第2塊中,則在快表的組1第3項的s欄位會登記下該主存塊位址的前s位。

cpu訪存時,首先,根據主存位址中的主存塊號中的u欄位找到快表的相應組,然後將該組的所有項的前s位同時與主存位址的s欄位作比較,若相符,則說明主存塊在cache中,於是將cache中該項的v欄位取出,作為cache位址的v欄位,而cache位址的u、w欄位直接由主存位址的u、w欄位形成,最後形成乙個完整的訪cache位址。當然,若比較結果是沒有相符項,則未命中,由主存位址直接訪主存。

其實,全相聯對映和直接相聯對映可以看成是組相聯對映的兩個極端情況。若u=0,v=c,則cache只包含1組,此即全相聯對映方式;若u=c,v=0,則組內的塊數等於1,此即直接相聯對映。

在實際應用中,相聯對映方式每組的塊數一般取值較小,典型值為2、4、8、16等,分別稱為兩路組相聯、四路組相聯等。這樣一方面使得比較器的規模較小,實現較容易,例如兩路組相聯採用兩路比較,四路組相聯採用四路比較等;另一方面,cache每組增加的可對映塊數可有效減少衝突,提高cache訪問的命中率。

主存和cache的位址對映

cache是一種高速緩衝暫存器,是為解決cpu和主存之間速度不匹配而採用的一項重要技術。主存與cache的位址對映方式有全相聯方式 直接方式和組相聯方式三種。多對一的對映關係,但乙個主存塊只能拷貝到cache的乙個特定行位置上去。cache的行號i和主存的塊號j有如下函式關係 i j mod m m...

Cache和主存的效率計算問題

第一,看命中率的定義 cpu欲訪問的資訊已經在cache中的比率稱之為命中率。設程式在執行期間,cache的命中次數是nc,訪問主存的次數是nm,則命中率h nc nc n m 平均訪問時間ta h tc 1 h tm 看一道習題理解兩種策略的不同 同時訪問cache和主存,cache命中時中斷訪存...

三種Cache寫入方式原理簡介

三種cache寫入方式原理簡介 在386以上檔次的微機中,為了提高系統效率,普遍採用cache 高速緩衝儲存器 現在的系統甚至可以擁有多級cache。cache實際上是位於cpu與dram主儲存器之間少量超高速的靜態儲存器 sram 通常的大小為8kb 512kb。對cache的工作原理可以進行如下...