Cache位址對映 2

2021-10-09 00:02:18 字數 3462 閱讀 3732

理解cache位址對映之前補充一些基礎知識,cache的位址對映和mmu(記憶體管理單元)和tlb cache**譯查詢快取)中的對映是有區別的。cache、tlb cache、mmu在cpu中結構如圖1所示,圖1展現的是cortex a9 processor內部結構,採用的指令和資料匯流排分開的哈佛結構。cpu訪問內部儲存和外部儲存,以及各種外設空間在硬體層面上看都是實體地址(硬體匯流排),然後為了滿足多程序脆弱的軟體系統提出了虛擬位址,虛擬位址是針對應用程式所提出的概念,mmu負責虛擬位址到實體地址的對映工作,從虛擬位址到實體地址的轉換過程可知:頁表儲存在記憶體中,使用一級頁表進行位址轉換時,每次讀/寫資料需要訪問兩次記憶體,第一次訪問一級頁表獲得實體地址,第二次才是真正的讀/寫資料;使用兩級頁表時,每次讀/寫資料需要訪問三次記憶體,訪問兩次頁表(一級頁表和二級頁表)獲得實體地址,第三次才是真正的讀/寫資料,由於這種機制速率很慢,才提出tlb cache用於儲存近期用到的頁表條目(段/大頁/小頁/極小頁描述符。tlb cache是乙個記憶體管理單元用於改進虛擬位址到實體地址轉換速度的快取記憶體,位於mmu中,本文章不深入分析mmu和tlb。cache對映是硬體層面物理塊與物理塊之間建立的聯絡。

cache的容量一般都很小,即使是最大的**cache(l3)也只有20mb~30mb。而當今記憶體的容量都是以gb作為單位,cpu對儲存器的訪問,通常是一次讀寫乙個字單元。當cpu訪cache不命中時,需將儲存在主存中的字單元連同其後若干個字一同調入cache中,之所以這樣做(write-back策略才會有這種機制),是為了使其後的訪存能在cache中命中。因此,主存和cache之間一次交換的資料單位應該是乙個資料塊(以前文章中提到的cache line,一般大小為64 byte)。資料塊的大小是固定的,由若干個字組成,且主存和cache的資料塊大小是相同的。

從cache-主存模型來看,一方面既要使cpu的訪存速度接近於訪cache的速度,另一方面為使用者程式提供的執行空間應保持為主存容量大小的儲存空間。在採cache-主存層次的系統中,cache對使用者程式而言是透明的,也就是說,使用者程式可以不需要知道cache的存在。因此,cpu每次訪存時,依然和未使用cache的情況一樣,給出的是乙個主存位址。但在cache-主存層次中,cpu首先訪問的是cache,並不是主存。為此,需要一種機制將cpu的訪主存位址轉換成訪cache位址。而主存位址與cache位址之間的轉換是與主存塊與cache塊之間的對映關係緊密聯絡的。如何把記憶體中的內容存放到cache中去,這就需要乙個對映演算法和乙個分塊機制。

分塊機制就是說,cache和記憶體以塊為單位進行資料交換,塊的大小通常以在記憶體的乙個儲存週期中能夠訪問到的資料長度為限。當今主流塊的大小都是64位元組,因此乙個cache line就是指 64 個位元組大小的資料塊。cache容量模型如圖 2所示,圖中展現了data cache: 32-kb, 8-way set associative(每個組裡有8行),64-byte line size的cache容量模型。

全相聯對映是指主存中任一塊都可以對映到cache中任一塊的方式,也就是說,當主存中的一塊需調入cache時,可根據當時cache的塊占用或分配情況,選擇乙個塊給主存塊儲存,所選的cache塊可以是cache中的任意一塊。例如,設cache共有m塊,主存共有n塊,當主存的某一塊j需調進cache中時,它可以存入cache的塊0、塊1、…、塊i、… 或塊m的任意一塊上,如圖3所示,區別在於cache和主存塊的對應關係不一樣。

在cache中,需要建立乙個目錄表,目錄表的每個表項都有三部分組成:記憶體位址、cache塊號和乙個有效位。當處理器需要訪問某個記憶體位址時,首先通過該目錄表查詢是否該內容快取在cache中,具體過程如圖4所示。當乙個主存塊調入cache中時,會同時在乙個儲存主存塊號和cache塊號對映表的相聯儲存器中進行登記。cpu訪存時,主存的塊位址a在cache的相聯儲存器目錄表中進行查詢,如果找到等值的記憶體塊位址,檢查有效位是否有效,只有有效的情況下,才能通過cache塊號在cache中找到快取的記憶體,並且加上塊內位址 b,找到相應資料,這時則稱為cache命中,處理器拿到資料返回;否則稱為不命中,處理器則需要在記憶體中讀取相應的資料。使用全關聯型 cache,塊的衝突最小,cache的利用率也高,但是需要乙個訪問速度很快的相聯儲存器。隨著cache容量的增加,其電路設計變得十分複雜,因此只有容量很小的cache才會設計成全關聯型。

直接關聯型cache是指主存中的一塊記憶體只能對映到cache的乙個特定的塊中,cache的目錄表只有兩部分組成:區號和有效位。其查詢過程如圖5所示。首先,記憶體位址被分成三部分:區號a、塊號b和塊內位址c,在這裡區號a和區號b其實是全關聯型中主存位址a。根據區號a在目錄表中找到完全相等的區號,並且在有效位有效的情況下,說明該資料在cache中,然後通過記憶體位址的塊號b獲得在cache中的塊位址,加上塊內位址c,最終找到資料。如果在目錄表中找不到相等的區號,或者有效位無效的情況下,則說明該內容不在cache中,需要到記憶體中讀取。直接相聯對映方式的優點 是比較電路最簡單,但缺點是cache塊衝突率較高,從而降低了cache的利用率。

以上兩種方式各有優缺點,而且非常有趣的是,它們的優缺點正好相反,所以組關聯型對映就出現了,組關聯型對映是目前用的最多的對映方式。組關聯型cache記憶體被分為很多組,乙個組的大小為多個cache line的大小,乙個組對映到對應的多個連續的cache line,也就是乙個cache組,並且該組內的任意一塊可以對映到對應cache組的任意乙個。可以看出,在組外,其採用直接關聯型 cache 的對映方式,而在組內,則採用全關聯型cache 的對映方式。

假設有乙個4路組關聯型cache,其大小為1m,乙個cache line的大小為64b,那麼總共有16k個 cache line,但是在4路組關聯的情況下,我們並不是簡簡單單擁有16k個cache line,而是擁有了4k 個組,每個組有4個cache line。乙個記憶體單元可以快取到它所對應的組中的任意乙個cache line中去。圖 6以4路組關聯型 cache 為例介紹其在cache中的查詢過程。目錄表由三部分組成,分別是「區號+塊號」、cache塊號和有效位。當收到乙個記憶體位址時,該位址被分成四部分:區號a、組號b、塊號c和塊內位址d。首先,根據組號 b 按位址查詢到一組目錄表項,在4 路組關聯中,則有四個表項,每個表項都有可能存放該記憶體塊;然後,根據區號a和塊號c在該組表項中進行關聯查詢(即並行查詢,為了提高效率),如果匹配且有效位有效,則表明該資料塊快取在 cache 中,得到cache塊號,加上塊內位址d,可以得到該記憶體位址在cache中對映的位址,得到資料;如果沒有找到匹配項或者有效位無效,則表示該記憶體塊不在cache中,需要處理器到記憶體中讀取。

cache位址對映

所謂對映就是將主存內容對應到cache中。cache引入就是緩解cpu和主存執行速度差距的。cpu要執行的內容如果在cache中存在,則直接送給cpu,如果不在,則去主存中尋找,主存直接傳給cpu,再根據區域性性原理,將主存中該區域內的內容存到cache中去,而將主存中一部分內容存到cache中,就...

主存cache的位址對映

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

Cache的位址對映方法

1 直接映像 指主存的乙個字塊只能映像到cache的乙個準確確定的字塊中 特點 主存的字塊只可以和固定的cache字塊對應,方式直接,利用率低。成本低,命中率低,效率較低 直接對映中先將主存按照cache行號的大小分組 這裡cache共有16行。則主存共分為2047 16 128組。要給128組編碼...