Cache超清晰逻辑详解(cache的三种映射)
在說之前要向大家安利一個網(wǎng)站,http://www.ecs.umass.edu/ece/koren/architecture/Cache/tutorial.html,這是馬薩諸塞大學(xué)安姆斯特分校的體系結(jié)構(gòu)課程的tutorial,能夠?qū)ache有更直觀的理解。
之前課上老師講的飛快,課后復(fù)習(xí)壓力很大,無意間看了他的tutorial感覺非常有收獲,本篇博客基于tutorial,詳細(xì)說明cache,這一篇先詳細(xì)說說cache的映射結(jié)構(gòu)。
我們知道,存儲分層是為了在速度和存儲容量上獲得最優(yōu)解,從cache,到主存到輔存,速度上越來越慢,存儲容量上越來越大。同理,單看cache,cache內(nèi)部也是分層的,目的也是為了獲得速度和容量上的最優(yōu)解。層級被標(biāo)記為L1,L2,L3。。。(如下圖)
當(dāng)一個數(shù)據(jù)要從cache中讀,L1沒有就要去L2,以此層層向下。如果在所有層上都沒有找到則訪問主存,從主存中取數(shù)據(jù)送到cpu,此時取出的數(shù)據(jù)從 主存------》 cache --------》 cpu, 如果cache已滿則用置換算法換出一塊給這個數(shù)據(jù)挪位,數(shù)據(jù)讀到了cache中以便下次查找。
由此引出:
hit 命中 —— 在cache中找到了想要的數(shù)據(jù)
miss 不命中 —— cache中沒有找到想要的數(shù)據(jù)
但是命中(hit)的方式有多種,為什么呢?這是因為cache內(nèi)部的結(jié)構(gòu)問題,這里必須要說一些cache的工作原理。
cache和主存儲器之間以塊為單位進(jìn)行數(shù)據(jù)交換,而塊的大小以在主存儲器的一個周期內(nèi)能訪問到的數(shù)據(jù)長度為限,而這個數(shù)據(jù)長度并不一定只是一個字哦,如果是主存儲器采用并行或者地址交叉存取,則在主存周期內(nèi)可以訪問多個字。
因此,既然是以塊為交換單位,所以將cache和主存儲器都劃分成大小相同的塊。
主存地址:塊號B+塊內(nèi)地址W
cache地址:塊號b+塊內(nèi)地址w
這時,CPU要訪問cache時,CPU要的主存地址放在了主存地址寄存器中,通過cache-主存的地址變換部件,將寄存器要求的主存地址轉(zhuǎn)成cache中的地址,如果能在cache中找到則命中,如果不能則miss。
而主存和cache之間怎么變換的呢?其實只要映射塊號地址,主存塊號B-----》cache中的塊號b,塊內(nèi)地址不變,解決。
這樣是不是邏輯清楚了一點?
課本上有張圖,初看有點復(fù)雜,但是經(jīng)過以上文字?jǐn)⑹鰰美斫夂芏唷?/p>
但這只是很籠統(tǒng)的表述,以上表粗和高亮的都要展開說。
我們上面說了,地址映射是:主存地址----》映射到cache中,而映射的規(guī)則是什么呢?
一共有3種映射規(guī)則。
1. 全映射
In fully associative mapping, when a request is made to the cache, the requested address is compared in a directory against all entries in the directory. If the requested address is found (a directory hit), the corresponding location in the cache is fetched and returned to the processor; otherwise, a miss occurs.
就是說,主存地址和目錄表中的每一個都比較,如果找到了,表示hit,沒有找到表示miss。
這個目錄表是什么?
其實主存和cache的映像關(guān)系是有一個目錄表存著的,它存放在高速存儲器中,說明白話, 如果學(xué)過操作系統(tǒng),快表就是這個目錄表,TLB,他是單獨的寄存器存放。
因此,主存地址和TLB中的每一條目錄比較,這是全相連映像。
具體怎么比較呢?發(fā)現(xiàn)沒有,這是一個縱向挖的邏輯。hh
TLB
結(jié)構(gòu): 記錄 主存塊號和 cache塊號 ,還有一個有效位。有效位的作用---- 標(biāo)記目錄表中的這一項主存和cache有沒有建立有效映像,建立了=1,沒有=0下面這張圖,如果B和b不對應(yīng)那么有效位就是0
評價:
- 優(yōu)點:命中率比較高,Cache存儲空間利用率高。
- 缺點:訪問相關(guān)存儲器時,每次都要與全部內(nèi)容比較,速度低,成本高,因而應(yīng)用少
應(yīng)用:
虛擬存儲器中,P175 這個還沒弄明白 ,留坑
直接相連
lower order line address bits are used to access the directory. Since multiple line addresses map into the same location in the cache directory, the upper line address bits (tag bits) must be compared with the directory address to ensure a hit. If a comparison is not valid, the result is a cache miss, or simply a miss. The address given to the cache by the processor actually is subdivided into several pieces, each of which has a different role in accessing data.
將主存按cache的大小分成區(qū),分成一組一組的,將主存中每個組里塊號映射到cache中相同塊號中。
這個映射過程也需要一個存儲器,
怎么映射?
cache地址: 塊號 +塊內(nèi)地址
主存地址: 區(qū)號(按照組劃分)+ 塊號(按照塊劃分) +塊內(nèi)地址
主存塊號來查找存儲器的表對應(yīng)的那一line,讀到區(qū)號是E,則將主存的區(qū)號和讀到的E區(qū)號進(jìn)行比較,如果一樣則為有效=1,反之=0. 為0 則將主存的區(qū)號裝入到該單元上。
評價:
- 優(yōu)點:硬件實現(xiàn)簡單,不用采用相聯(lián)訪問的存儲器,訪問速度比較快。不需要地址變換
- 缺點:沖突率高,命中率低
例:設(shè)主存容量為1MB,高速緩存容量為16KB,塊的大小為512字節(jié)。采用直接地址映像法。
寫出主存地址格式。
寫出Cache地址格式。
塊表的容量是多大。
畫出直接方式地址映像及變換示意圖。
解:
Cache塊數(shù)=16KB/512B=32塊
則主存每區(qū)為32塊,共1MB/16KB=64區(qū)
所以主存地址為6位區(qū)號(共64區(qū))+5位區(qū)內(nèi)塊號(共32塊)+9位塊內(nèi)地址(塊容量512B,按字節(jié)編址)
所以Cache地址為5位區(qū)內(nèi)塊號,9內(nèi)塊內(nèi)地址(相當(dāng)于主存的一個區(qū))
自然的,塊表的容量為32*6位(表示Cache32個塊中分別存了第幾區(qū)的主存塊)
圖使用教材上的圖吧:
組相聯(lián)映像
和之前都一樣:主存和cache劃分成相同的塊,
和之前不一樣:主存和cache劃分成相同組
除了將主存和cache分成快之外,還將主存和cache按同樣大小劃分成組,每一組都有相同的塊數(shù)。
因此,主存的組數(shù)要比cache的組數(shù)要多。從主存的組到cache的組之間采用直接映像。
選好一個主存的組和相應(yīng)的cache的組后,組內(nèi)是全相聯(lián)映像。
例如:主存里的組0直接映像到cache的組0,主存中的塊0可以映像到映射到塊0,塊1,塊2…上。
主存地址:區(qū)號+組號+組內(nèi)塊號+塊內(nèi)地址 (區(qū)號==cache的組號)
cache地址: 組號+組內(nèi)塊號+塊內(nèi)地址
一個組相聯(lián)映像Cache由64個存儲塊組成, 每組包含4個存儲塊。主存包含4096個存儲塊,每塊由128字組成。訪存地址為字地址。
(1)寫出主存地址位數(shù)和地址格式
(2)寫出Cache地址位數(shù)和地址格式;
(3)畫出組相聯(lián)映像方式示意圖,
(4)主存字地址為7B568H單元映射到Cache哪個組?
主存地址的組成為8位區(qū)號(256區(qū))+4位區(qū)內(nèi)塊號(16個存儲塊)+7位塊內(nèi)地址(一塊128字,按字編址)
Cache地址為4位組號(16組)+2位組內(nèi)塊號(每組4快)+7位塊內(nèi)地址(一共128字,按字編址)
總結(jié)
以上是生活随笔為你收集整理的Cache超清晰逻辑详解(cache的三种映射)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。