在cache存儲系統中,把cache和主存儲器都劃分成相同大小的塊。
主存地址由塊號B和塊內地址W兩部分組成,cache地址由塊號b和塊內地址w組成。
當CPU訪問cache時,CPU送來主存地址,放到主存地址寄存器中,通過地址變換部件把主存地址中的塊號B變換成cache的塊號b,并放到cache地址寄存器中,同時將主存地址中的塊內地址W直接作為cache的塊內地址w裝入cache地址寄存器中,如果變換成功(又叫cache命中),就用得到的cache地址去訪問cache,從cache中取出數據送到CPU中;
如果變換不成功(cache不命中),則產生cache失效信息,并且用主存地址訪問主存儲器,從主存儲器中讀出一個字送往CPU,同時把包含該字在內的一整塊數據都從主存儲器讀出來裝入cache,這時,如果cache已經滿了,則要采用某種cache替換策略把不常用的塊先調出到主存儲中相應的塊中,以便騰出空間來存放新調入的塊。
由于程序具有局部性特點,每次塊失效時都把一塊(由多個字組成)調入到cache中,能夠提高cache的命中率。
Cache地址映射和變換方法
地址的映射和變換是密切相關的,采用什么樣的地址映射方法就必然有與這種映射方法相對應的地址變換方法。
無論采用什么樣的地址映射方式和地址變換方式,都要把主存和cache劃分成同樣大小的存儲單位,每個存儲單位成為“塊”,在進行地址映射和變換時,都是以塊為單位進行的。常用的映射方式和變換方式有以下3種:
?■ 全相聯映射方式 主存中任意一塊可以映射到cache中的任意一塊上。
?■ 直接映射方式 主存中一塊只能映射到cache中的一個特定塊上,假定主存的塊號為B,cache的塊號為b,cache的總塊數為Cb,則它們之間的映射關系可以用下面的公式表示:b = B mode Cb
?■ 組相連映射方式 在這種相聯的地址映射和變換方式中,把主存和cache按同樣大小劃分成組(set),每個組都由相同塊數組成。從主存的組到cache的組之間采用直接映射方式,在主存中的組與cache中的組之間建立好映射關系之后,在兩個對應的組內部采用全相聯的映射方式。
在ARM處理器中,主存與cache采用組相聯地址映射和變換方式,如果cache的塊大小為2L,則同一塊中各地址的bit[31:L]是相同的。
如果cache中組的大小(每組中包含的塊數)為2S, 則虛擬地址的bit[L+S-1:L]用于選擇cache中的某個組, 而虛擬地址中其他位[31:L+S]包含了一些標志。
將cache每組中的塊數稱為組容量(set-associativity),當組容量等于cache中的總塊數時,對應的映射方式為全相聯映射方式;
當組容量等于1時,對應的映射方式為直接映射方式;
當組容量為其他值時,稱為組相聯映射方式。
在組相聯映射方式中,cache的大小CACHE_SIZE(字節數)可以通過下面的公式來計算:
CACHE_SIZE = LINELEN*ASSOCIATIVITY*NSETS
其中,
?LINELEN為cache塊(line)大小;
?ASSOCIATIVITY為組容量;
?NSETS為cache的組數。
-
處理器
+關注
關注
68文章
19265瀏覽量
229670 -
ARM
+關注
關注
134文章
9088瀏覽量
367405 -
存儲器
+關注
關注
38文章
7484瀏覽量
163769 -
Cache
+關注
關注
0文章
129瀏覽量
28333
發布評論請先 登錄
相關推薦
評論