在cache存儲(chǔ)系統(tǒng)中,把cache和主存儲(chǔ)器都劃分成相同大小的塊。
主存地址由塊號(hào)B和塊內(nèi)地址W兩部分組成,cache地址由塊號(hào)b和塊內(nèi)地址w組成。
當(dāng)CPU訪問(wèn)cache時(shí),CPU送來(lái)主存地址,放到主存地址寄存器中,通過(guò)地址變換部件把主存地址中的塊號(hào)B變換成cache的塊號(hào)b,并放到cache地址寄存器中,同時(shí)將主存地址中的塊內(nèi)地址W直接作為cache的塊內(nèi)地址w裝入cache地址寄存器中,如果變換成功(又叫cache命中),就用得到的cache地址去訪問(wèn)cache,從cache中取出數(shù)據(jù)送到CPU中;
如果變換不成功(cache不命中),則產(chǎn)生cache失效信息,并且用主存地址訪問(wèn)主存儲(chǔ)器,從主存儲(chǔ)器中讀出一個(gè)字送往CPU,同時(shí)把包含該字在內(nèi)的一整塊數(shù)據(jù)都從主存儲(chǔ)器讀出來(lái)裝入cache,這時(shí),如果cache已經(jīng)滿(mǎn)了,則要采用某種cache替換策略把不常用的塊先調(diào)出到主存儲(chǔ)中相應(yīng)的塊中,以便騰出空間來(lái)存放新調(diào)入的塊。
由于程序具有局部性特點(diǎn),每次塊失效時(shí)都把一塊(由多個(gè)字組成)調(diào)入到cache中,能夠提高cache的命中率。
Cache地址映射和變換方法
地址的映射和變換是密切相關(guān)的,采用什么樣的地址映射方法就必然有與這種映射方法相對(duì)應(yīng)的地址變換方法。
無(wú)論采用什么樣的地址映射方式和地址變換方式,都要把主存和cache劃分成同樣大小的存儲(chǔ)單位,每個(gè)存儲(chǔ)單位成為“塊”,在進(jìn)行地址映射和變換時(shí),都是以塊為單位進(jìn)行的。常用的映射方式和變換方式有以下3種:
?■ 全相聯(lián)映射方式 主存中任意一塊可以映射到cache中的任意一塊上。
?■ 直接映射方式 主存中一塊只能映射到cache中的一個(gè)特定塊上,假定主存的塊號(hào)為B,cache的塊號(hào)為b,cache的總塊數(shù)為Cb,則它們之間的映射關(guān)系可以用下面的公式表示:b = B mode Cb
?■ 組相連映射方式 在這種相聯(lián)的地址映射和變換方式中,把主存和cache按同樣大小劃分成組(set),每個(gè)組都由相同塊數(shù)組成。從主存的組到cache的組之間采用直接映射方式,在主存中的組與cache中的組之間建立好映射關(guān)系之后,在兩個(gè)對(duì)應(yīng)的組內(nèi)部采用全相聯(lián)的映射方式。
在ARM處理器中,主存與cache采用組相聯(lián)地址映射和變換方式,如果cache的塊大小為2L,則同一塊中各地址的bit[31:L]是相同的。
如果cache中組的大小(每組中包含的塊數(shù))為2S, 則虛擬地址的bit[L+S-1:L]用于選擇cache中的某個(gè)組, 而虛擬地址中其他位[31:L+S]包含了一些標(biāo)志。
將cache每組中的塊數(shù)稱(chēng)為組容量(set-associativity),當(dāng)組容量等于cache中的總塊數(shù)時(shí),對(duì)應(yīng)的映射方式為全相聯(lián)映射方式;
當(dāng)組容量等于1時(shí),對(duì)應(yīng)的映射方式為直接映射方式;
當(dāng)組容量為其他值時(shí),稱(chēng)為組相聯(lián)映射方式。
在組相聯(lián)映射方式中,cache的大小CACHE_SIZE(字節(jié)數(shù))可以通過(guò)下面的公式來(lái)計(jì)算:
CACHE_SIZE = LINELEN*ASSOCIATIVITY*NSETS
其中,
?LINELEN為cache塊(line)大小;
?ASSOCIATIVITY為組容量;
?NSETS為cache的組數(shù)。
-
處理器
+關(guān)注
關(guān)注
68文章
19843瀏覽量
234083 -
ARM
+關(guān)注
關(guān)注
134文章
9336瀏覽量
376029 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7643瀏覽量
166790 -
Cache
+關(guān)注
關(guān)注
0文章
129瀏覽量
28985
發(fā)布評(píng)論請(qǐng)先 登錄
Linux內(nèi)核地址映射模型與Linux內(nèi)核高端內(nèi)存詳解

關(guān)于ARM地址映射的理解
關(guān)于cache百科里的一段敘述有疑惑
AM335x SDK關(guān)于cache的命中率,請(qǐng)問(wèn)有能改善cache命中率的有效方法嗎?請(qǐng)問(wèn)怎么才能控制RAM映射到cache?
通過(guò)內(nèi)存地址映射能否禁用MSMC上的cache
地址映射問(wèn)題
Cache的原理是什么?Cache地址的過(guò)程是怎樣的
為什么需要cache?cache是如何影響code的呢
cache有哪些缺點(diǎn)?實(shí)現(xiàn)cache的組織方式有哪幾種
ARM處理器使用虛擬地址來(lái)提供cache index和cache tag
cache結(jié)構(gòu)與工作原理

從三個(gè)方面闡述Cache
關(guān)于Cache的其它內(nèi)容
STM32/CPU地址映射的概念

評(píng)論