1. 程式人生 > >計算機組成原理補充——主存與Cache的地址對映

計算機組成原理補充——主存與Cache的地址對映

  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的地址對映問題。

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

 1. 全相聯對映

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

主存與Cache的地址對映 - zjfzjf - zjfzjf

 

  

 

圖4-28全相聯對映方式

 

 在全相聯對映方式下,CPU的訪主存地址為如下形式:

 

主存與Cache的地址對映 - zjfzjf - zjfzjf

 

  

 

 其中,M為主存的塊號,W為塊內的字號。而CPU訪Cache的地址形式為:

 

主存與Cache的地址對映 - zjfzjf - zjfzjf

 

  

 

 其中,C為Cache的塊號,W為塊內的字號。

 

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

 

 

 

主存與Cache的地址對映 - zjfzjf - zjfzjf

 

 

 

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

 

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

 

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

 

 

 

 2. 直接相聯對映

 

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

 

i=j mod 2C                               (4.2)

 

 

 

主存與Cache的地址對映 - zjfzjf - zjfzjf

 

  

 

圖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塊。

 

 在直接相聯對映方式下,CPU的訪主存地址為如下形式:

 

 主存與Cache的地址對映 - zjfzjf - zjfzjf

 

 

 

 其中,T為標誌號,C為Cache的塊號,W為塊內的字號。在這裡,原主存的塊號M實際上被分成了兩個欄位:T和C,其中C用於指出主存的塊可以對映的Cache的塊。一般來講,主存的塊數是Cache的塊數的整數倍,也就是說主存的塊數2M和Cache的塊數2C滿足關係式:2M=n·2C

 

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

 

主存與Cache的地址對映 - zjfzjf - zjfzjf

 

  

 

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

 

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

 

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

 

 3. 組相聯對映

 

 以上兩種方式各有優缺 點,而且非常有趣的是,它們的優缺點正好相反,也就是說,對於全相聯對映方式來說為優點的恰是直接相聯對映方式的缺點,而對於全相聯對映方式來說為缺點的 恰是直接相聯對映方式的優點。那麼,可否找到一種能較好地兼顧這兩種方式的優點的對映方式呢?下面我們就來看看組相聯對映方式 在這種方式下,將Cache分成2u組,每組包含2v塊。主存的塊與Cache的組之間採用直接相聯對映,而與組內的各塊則採用全相聯對映。也就是說,主存的某塊只能對映到Cache的特定組中的任意一塊。主存的某塊j與Cache的組k之間滿足如下關係:

 

k=j mod 2u                             (4.3)

 

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

 

 主存與Cache的地址對映 - zjfzjf - zjfzjf
          

 

圖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組的任意一塊。

 

    在組相聯對映方式下,CPU的訪主存地址和訪Cache地址分別為如下形式:

 

 

 

主存與Cache的地址對映 - zjfzjf - zjfzjf

 

 

 

 

 

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

 

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

 

 主存與Cache的地址對映 - zjfzjf - zjfzjf

 

 

 

圖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訪問的命中率。

 

 

1.高速緩衝儲存器的功能、結構與工作原理
高速緩衝儲存器是存在於主存與CPU之間的一級儲存器, 由靜態儲存晶片(SRAM)組成,容量比較小但速度比主存高得多, 接近於CPU的速度。 Cache的功能是用來存放那些近期需要執行的指令與資料。目的是提高CPU對儲存器的訪問速度。為此需要解決2個技術問題:一是主存地址與快取地址的映象及轉換; 二是按一定原則對Cache的內容進行替換。
Cache的結構和工作原理如圖2.3.1所示。


主要由三大部分組成:
Cache儲存體:存放由主存調入的指令與資料塊。
地址轉換部件:建立目錄表以實現主存地址到快取地址的轉換。
替換部件:在快取已滿時按一定策略進行資料塊替換,並修改地址轉換部件。
2.地址映象與轉換
地址映象是指某一資料在記憶體中的地址與在緩衝中的地址,兩者之間的對應關係。下面介紹三種地址映象的方式。
1.全相聯方式
地址映象規則:主存的任意一塊可以映象到Cache中的任意一塊
(1) 主存與快取分成相同大小的資料塊。
(2) 主存的某一資料塊可以裝入快取的任意一塊空間中。
全相聯方式的對應關係如圖2.3.2所示。如果Cache的塊數為Cb,主存的塊數為Mb,則映象關係共有Cb×Mb種。
圖2.3.3示出了目錄表的格式及地址變換規則。 目錄表存放在相關(聯)儲存器中,其中包括三部分:資料塊在主存的塊地址、存入快取後的塊地址、及有效位(也稱裝入位)。由於是全相聯方式,因此,目錄表的容量應當與快取的塊數相同。
舉例:某機主存容量為1M,Cache的容量為32KB, 每塊的大小為16個字(或位元組)。 劃出主、快取的地址格式、 目錄表格式及其容量。
容量:與緩衝塊數量相同即211=2048(或32K/16=2048)。
優點:命中率比較高,Cache儲存空間利用率高。
缺點:訪問相關儲存器時,每次都要與全部內容比較,速度低,成本高,因而應用少。
2.直接相聯方式
地址映象規則: 主儲存器中一塊只能映象到Cache的一個特定的塊中。
(1) 主存與快取分成相同大小的資料塊。
(2) 主存容量應是快取容量的整數倍,將主存空間按快取的容量分成區,主存中每一區的塊數與快取的總塊數相等。
(3) 主存中某區的一塊存入快取時只能存入快取中塊號相同的位置。
圖2.3.4示出了直接相聯映象規則。 可見,主存中各區內相同塊號的資料塊都可以分別調入快取中塊號相同的地址中,但同時只能有一個區的塊存入快取。由於主、快取塊號相同,因此,目錄登記時,只記錄調入塊的區號即可。
圖2.3.5示出了主、 緩衝地址格式、目錄表的格式及地址變換規則。主、快取塊號及塊內地址兩個欄位完全相同。目錄表存放在高速小容量儲存器中,其中包括二部分:資料塊在主存的區號和有效位。目錄表的容量與快取的塊數相同。
地址變換過程:用主存地址中的塊號B去訪問目錄儲存器, 把讀出來的區號與主存地址中的區號E進行比較, 比較結果相等,有效位為1,則Cache命中,可以直接用塊號及塊內地址組成的緩衝地址到快取中取數;比較結果不相等,有效位為1, 可以進行替換,如果有效位為0,可以直接調入所需塊。
優點:地址映象方式簡單,資料訪問時,只需檢查區號是否相等即可,因而可以得到比較快的訪問速度,硬體裝置簡單。
缺點:替換操作頻繁,命中率比較低。
舉例:上例中,主存容量為1M, Cache的容量為32KB,每塊的大小為16個字(或位元組)。劃出主、快取的地址格式、目錄表格式及其容量。
容量:與緩衝塊數量相同即211=2048(或32K/16=2048)。
3.組相聯映象方式
組相聯的映象規則:
(1) 主存和Cache按同樣大小劃分成塊。
(2) 主存和Cache按同樣大小劃分成組。
(3) 主存容量是快取容量的整數倍,將主存空間按緩衝區的大小分成區,主存中每一區的組數與快取的組數相同。
(4) 當主存的資料調入快取時,主存與快取的組號應相等,也就是各區中的某一塊只能存入快取的同組號的空間內,但組內各塊地址之間則可以任意存放, 即從主存的組到Cache的組之間採用直接映象方式;在兩個對應的組內部採用全相聯映象方式。
圖2.3.6示出了組相聯的映象關係, 圖中快取共分Cg個組,每組包含有Gb塊; 主存是快取的Me倍,所以共分有Me個區, 每個區有Cg組,每組有Gb塊。那麼, 主存地址格式中應包含4個欄位:區號、區內組
號、組內塊號和塊內地址。 而快取中包含3個欄位:組號、組內塊號、塊內地址。主存地址與快取地址的轉換有兩部分,組地址是按直接映象方式,按地址進行訪問,而塊地址是採用全相聯方式,按內容訪問。組相聯的地址轉換部件也是採用相關儲存器實現,見圖2.3.7。
相關儲存器中每個單元包含有: 主存地址中的區號E與組內塊號B,兩者結合在一起,其對應的欄位是快取塊地址b。相關儲存器的容量,應與快取的塊數相同。當進行資料訪問時,先根據組號,在目錄表中找到該組所包含的各塊的目錄,然後將被訪資料的主存區號與組內塊號,與本組內各塊的目錄同時進行比較。如果比較相等,而且有效位為“1”則命中。
可將其對應的快取塊地址b送到快取地址暫存器的塊地址欄位,與組號及塊內地址組裝即形成快取地址。如果比較不相等,說明沒命中,所訪問的資料塊尚沒有進入快取,則進行組內替換;如果有效位為0,則說明快取的該塊尚未利用, 或是原來資料作廢,可重新調入新塊。
優點:塊的衝突概率比較低,塊的利用率大幅度提高,塊失效率明顯降低。
缺點:實現難度和造價要比直接映象方式高。

 

 

 

 

主存與Cache的地址對映

       由於Cache比主存小的多,因此必須使用一種機制將主存地址定位到Cache中,即地址對映。這個對映過程全部由硬體實現,對程式設計師透明。

       1. 地址對映方法:

       採用查表法(用專用快速硬體實現表格)
       表中內容:對映的Cache地址、標記(命中判斷)、有效位

       2. 地址對映的三種方式:

 

 

       (1)全相聯對映方式

 

       · 任一主存塊能對映到Cache中任意行(主存塊的容量等於Cache行的容量),見圖1:

       · 對映過程:(見圖2)

       ① 存入Cache:塊表標記中存放主存的塊號
 
       ② 檢索:訪問主存地址的塊號與所有Cache行標記比較(圖2陰影區)

       · 符合, 即資料在Cache中,形成訪問Cache的地址(地址對映),訪問Cache;
       · 不符合:訪問主存,並將該塊調入Cache。

       · 優點:靈活,不易產生衝突;
       缺點:比較電路難於實現,且效率低,速度慢。

      主存與Cache的地址對映 - ghoul0813 - 小智的部落格

      主存與Cache的地址對映 - ghoul0813 - 小智的部落格

       例:設訪問儲存器地址的塊號序列為22、26、22、26、16、4、16、18,採用全相聯對映方式時,Cache行分配情況(見圖3)。

      主存與Cache的地址對映 - ghoul0813 - 小智的部落格

       全相聯對映方式例項演示

       (2)直接對映方式

       直接對映方式例項演示

 

       · 某一主存塊只能能對映到Cache的特定行,見圖4:

       i = j  mod m    其中: i:Cache的行號;
       j:主存的塊號;
       m:Cache的總行數。

       · 對映過程:(見圖5)

       ① 存入Cache:快表標記中存放主存地址的區號
       (將塊地址分為二部分:· 塊(行)地址 · 標記(區號))

       ② 檢索:根據訪問主存地址的中間欄位(行號),找到Cache快表中的這一行,讀取該行中的標記欄位與主存地址高位欄位(區號)比較(圖5陰影區)

       · 符合:即資料在Cache中,形成訪問Cache的地址(地址對映),訪問Cache;
       · 不符合:訪問主存,並將該塊調入Cache。
       · 優點:硬體簡單,成本低;
       缺點:容易產生衝突,易"顛簸",不能有效利用Cache空間。

       顛簸:例:頻繁訪問主存地址塊序列0、m、0、m,則Cache中  第0行資訊只能頻繁調進調出,即出現顛簸現象。

      主存與Cache的地址對映 - ghoul0813 - 小智的部落格

       例:訪問儲存器地址序列為22、26、22、26、16、4、16、18,採用直接對映方式時,Cache行分配情況(見圖6)。

      主存與Cache的地址對映 - ghoul0813 - 小智的部落格

       (3)組相聯對映方式
 
       組相聯對映方式例項演示

 

       組相聯對映方式   是全相聯對映方式和直接相聯對映方式的結合,結合兩者的優點

       · 方法:把Cache分為若干組,每組含有若干行。
       組間直接對映,組內全相聯對映。 (圖7)

       · 對映過程:(見圖8)

       ① 存入Cache:快表標記中存放主存地址的區號及塊號(將塊地址分為三部分: · 塊(行)地址· 組號· 標記(區號))

       ② 檢索:根據訪問主存地址的第二欄位(組號),找到Cache中的相應組,讀取該組中的每一行標記欄位與主存地址高位欄位(區號)及塊號比較(圖8陰影區)
       · 符合:即資料在Cache中,形成訪問Cache的地址(地址對映),訪問Cache;
       · 不符合:訪問主存,並將該塊調入Cache。

       · 優點:結合上面兩種的優點。

       ① 因為組內行數較少,比較器容易實現;
       ② 組內又有靈活性,衝突大大減少。

      主存與Cache的地址對映 - ghoul0813 - 小智的部落格

      主存與Cache的地址對映 - ghoul0813 - 小智的部落格

       例1:設Cache有8個行,分成2個組,設訪問儲存器地址的塊號序列為22、26、22、26、16、4、16、18,採用組相聯對映方式時,Cache行分配情況(見圖9)。

      主存與Cache的地址對映 - ghoul0813 - 小智的部落格