<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM存儲器之:高速緩沖存儲器Cache

ARM存儲器之:高速緩沖存儲器Cache

作者: 時(shí)間:2013-09-30 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257011.htm

15.3.3Cache工作原理

Cache的基本存儲單元為Cache行(Cacheline)。存儲系統把Cache和主存儲器都劃分為相同大小的行。Cache與主存儲器交換數據是以行為基本單位進(jìn)行的。每一個(gè)Cache行都對應于主存中的一個(gè)存儲塊(memoryblock)。

Cache行的大小通常是2L字節。通常情況下是16字節(4個(gè)字)和32字節(8個(gè)字)。如果Cache行的大小為2L字節,那么對主存的訪(fǎng)問(wèn)通常是2L字節對齊的。所以對于一個(gè)虛擬地址來(lái)說(shuō),它的bit[31∶L]位,是Cache行的一個(gè)標識。當CPU發(fā)出的虛擬地址的bit[31∶L]和Cache中的某行bit[31∶L]相同,那么Cache中包含CPU要訪(fǎng)問(wèn)的數據,即成為一次Cache命中。

為了加快Cache訪(fǎng)問(wèn)的速度,又將多個(gè)Cache行劃分成一個(gè)Cache組(CacheSet)。Cache組中包含的Cache行的個(gè)數通常也為2的N次方的倍數。為了方便起見(jiàn),取N=S。這樣,一個(gè)Cache組中就包含2S個(gè)Cache行。這時(shí),虛擬地址中的bit[L+S-1∶L]為Cache組的標識。虛擬地址中余下的位bit[31∶L+S]成為一個(gè)Cache標(Cache-tag)。它標識了Cache行中的內容和主存間的對應關(guān)系。

圖15.10顯示了Cache的訪(fǎng)問(wèn)過(guò)程。

圖15.10Cache訪(fǎng)問(wèn)過(guò)程

15.3.4Cache與主存的關(guān)系

在Cache中采用地址映射將主存中的內容映射到Cache地址空間。具體的說(shuō),就是把存放在主存中的程序按照某種規則裝入到Cache中,并建立主存地址到Cache地址之間的對應關(guān)系。而地址變換是指當程序已經(jīng)裝入到Cache后,在實(shí)際運行過(guò)程中,把主存地址變換成Cache地址。

地址的映射和變換是密切相關(guān)的。采用什么樣的地址映射方法,就必然有與之對應的地址變換。

常用的地址映射和變換方式包括直接映射和變換方式、組相聯(lián)映射和變換方式以及全相聯(lián)和變換方式。

(1)直接(direct-mapped)映射方式

直接映射是一種最簡(jiǎn)單,也是最直接的映射方式。主存中的每個(gè)地址都對應Cache存儲器中惟一的一行。由于主存的容量遠遠大于Cache存儲器,所以在主存中很多地址被映射到同一個(gè)Cache行。

圖15.11顯示了主存與Cache的直接映射關(guān)系。

圖15.11主存和Cache的直接映射

直接映射Cache是一種簡(jiǎn)單的解決方法,但這種設計使得每個(gè)主存塊在Cache中只有一個(gè)特定的行可以存放。如果程序同時(shí)用到對應于Cache同一行的兩個(gè)主存塊,那么就會(huì )發(fā)生沖突,沖突的結果是導致Cache行的頻繁變換。這種由直接映射導致的Cache存儲器中的軟件沖突稱(chēng)為顛簸(thrashing)問(wèn)題。

(2)組相聯(lián)映射方式

為了減少顛簸問(wèn)題,有些Cache使用了組相聯(lián)的映射策略。在組相聯(lián)的地址映射和變換中,把主存和Cache按同樣大小劃分成組(set),每個(gè)組都由相同的行數組成。

由于主存的容量比Cache容量大得多,因此,主存的組數要比Cache的組數多。從主存的組到Cache的組之間采用直接映射方式。主存中的一組與Cache中的一組之間建立了之間映射方式后,在兩個(gè)對應的組內部采用全相聯(lián)映射方式。

中采用的是組相聯(lián)的地址映射和變換方式。如果Cache的行大小為2L,則同一行中各地址的bit[31∶L]是相同的。如果Cache中組的大?。拷M中包含的行數)為2S,則虛地址位bit[L+S∶L]用于選擇Cache中的某個(gè)組。

圖15.12顯示了一個(gè)Cache與主存儲器的組相聯(lián)映射

圖15.12Cache與主存儲器組相聯(lián)映射

擁有相同組索引的Cache行稱(chēng)為組相聯(lián)的(setassociative)。主存中的程序或代碼段可以在不影響程序執行的情況下被分配到Cache中的某一組中。也就是說(shuō),將數據或代碼存入Cache行中的操作不會(huì )影響程序的執行。

(3)全相聯(lián)映射方式

隨著(zhù)Cache控制器的相聯(lián)度的提高,沖突的可能性減少了。理想的目標是,盡量提高組相聯(lián)程度,使主存地址能夠映射到任意Cache行。這樣的Cache被稱(chēng)為全相聯(lián)Cache。然而,隨著(zhù)相聯(lián)度的提高,與之相匹配的硬件的復雜度也在提高。硬件設計者提高Cache相聯(lián)度的一種方法就是使用內容尋址寄存器CAM(ContentAddressableMemory)。

CAM使用一組比較器,以比較輸入的標簽地址和存儲在每一個(gè)有效Cache行中的標簽位。CAM采取了與RAM相反的工作方式;RAM在得到一個(gè)地址后再給出數據;而CAM則是在檢測到給定的數據值在存儲器中后,再給出該數據的地址。使用CAM允許同時(shí)比較更多的地址中的標簽位,從而增加了可以包含在一個(gè)組中的Cache行數。

920T和940T存儲器核中,ARM使用了CAM來(lái)定位地址中的標簽域。ARM920T和ARM940T中的Cache是64組組相聯(lián)的。圖15.13所示為ARM940T的Cache結構圖。Cache控制器把地址標簽域作為CAM的輸入,它的輸出選擇了包含有效Cache行的組。

圖15.13ARM940T64路組相聯(lián)Cache

訪(fǎng)問(wèn)地址的標簽部分被作為4個(gè)CAM的輸入,輸入標簽的同時(shí)與存儲在64組中的所有Cache標簽比較。如果有一個(gè)匹配,那么數據就由Cache寄存器提供;如果沒(méi)有匹配,存儲器就會(huì )產(chǎn)生一個(gè)失效(misss)信號。

控制器使用組索引位(setindex)在4個(gè)CAM中選擇一個(gè)。被選中的CAM會(huì )在Cache存儲器中選擇一個(gè)Cache行,該地址的數據索引部分(dataindex)在該Cache行中選擇出所需的字、半字或者字節。

15.3.5Cache的寫(xiě)策略

當CPU更新了Cache內容時(shí),要將結果寫(xiě)回到主存中,通常有兩種方法:

·直寫(xiě)法(write-through);

·回寫(xiě)法(write-back)。

直寫(xiě)法是指,當CPU在執行寫(xiě)操作時(shí),必須把數據同時(shí)寫(xiě)入Cache和主存,以確保Cache和主存數據一致。在這種寫(xiě)策略下,處理器在每次寫(xiě)Cache時(shí)也要寫(xiě)相應的主存單元。由于要訪(fǎng)問(wèn)主存,直寫(xiě)法的速度比回寫(xiě)法要慢一些。

回寫(xiě)法是指,當處理器和寫(xiě)Cache命中時(shí),只向Cache存儲器寫(xiě)數據,而不立即寫(xiě)入主存。這樣,主存儲器與相應的Cache行數據有可能不一致。Cache中的數據是新的,而主存中的數據可能是較早的、沒(méi)有被更新過(guò)的。

配置成回寫(xiě)法的Cache要使用Cache行的狀態(tài)信息塊中的一個(gè)或多個(gè)臟位(dirtybit)。當回寫(xiě)Cache控制器向Cache存儲器中的某一行寫(xiě)入數據時(shí),它會(huì )將臟位設置為1。如果控制器內核此后訪(fǎng)問(wèn)該Cache行,那么通過(guò)臟位的狀態(tài)就可以知道該Cache行中含有主存儲器中沒(méi)有的數據。如果Cache控制器要將一個(gè)臟位被設置的Cache行替換出Cache存儲器,那么該Cache行數據會(huì )自動(dòng)被寫(xiě)入主存單元中??刂破魍ㄟ^(guò)這種方法來(lái)防止只存在于Cache中而主存中沒(méi)有的重要信息的丟失。

表15.12比較了直寫(xiě)法和回寫(xiě)法的優(yōu)缺點(diǎn)。

表15.12 直寫(xiě)法與回寫(xiě)法

寫(xiě)策略

直寫(xiě)法

回寫(xiě)法

可靠性

與主存的通信量

控制的復雜性

簡(jiǎn)單

復雜

硬件實(shí)現代價(jià)

下面分析產(chǎn)生這些性能差異的原因。

·可靠性。直寫(xiě)法要優(yōu)于回寫(xiě)法。這是因為直寫(xiě)法始終保證Cache是主存的正確副本。當Cache發(fā)生錯誤時(shí),可以從主存中糾正。

·與主存的通信量。一般情況下,回寫(xiě)法少于直寫(xiě)法。這是因為,一方面,Cache的命中率很高,對于回寫(xiě)法來(lái)說(shuō),CPU絕大多數操作只需要寫(xiě)Cache,不必寫(xiě)主存。另一方面,當Cache失效時(shí),要將Cache中的行替換到主存,而直寫(xiě)法每次只寫(xiě)一個(gè)字到主存??偟膩?lái)說(shuō),由于直寫(xiě)法在每次寫(xiě)Cache時(shí),同時(shí)寫(xiě)主存,從而增加了寫(xiě)操作的開(kāi)銷(xiāo)。而回寫(xiě)法是把與主存的數據交換集中到一次主存操作,可能要一次性的進(jìn)行多個(gè)字的操作。

·控制的復雜性。直寫(xiě)法必回寫(xiě)法簡(jiǎn)單。直寫(xiě)法在Cache的行狀態(tài)表中不需要修改位。同時(shí),直寫(xiě)法的糾錯技術(shù)相對簡(jiǎn)單。

·硬件代價(jià)?;貙?xiě)法比直寫(xiě)法好。因為直寫(xiě)法中,每次寫(xiě)操作都要寫(xiě)主存,因此為了節省寫(xiě)主存所花費的時(shí)間,通常要采用一個(gè)高速小容量的緩存存儲器,把要寫(xiě)的數據和地址寫(xiě)到這個(gè)緩存中。在每次讀主存時(shí),也要首先判斷所讀的數據是否在這個(gè)緩存中。而回寫(xiě)法不需要上述操作,相對硬件代價(jià)要小。

存儲器相關(guān)文章:存儲器原理




關(guān)鍵詞: ARM 高速緩沖存儲器 cache

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>