ARM中的CACHE機制
Cache位于MMU前面靠近CPU稱為邏輯CACHE又叫虛擬Cache。CPU可以直接訪問CACHE的數(shù)據(jù),而ARM11(ARMV6)的結(jié)構(gòu)是CACHE在MMU后面CPU訪問CACHE要通過MMU地址轉(zhuǎn)換
在DM6446的core用的是哈佛結(jié)構(gòu),即把CACHE分為8K的D-CACHE(數(shù)據(jù)CACHE)和16K的I-cache(指令CACHE)
一個完整的CACHE分為CACHE控制器和CACHE存儲器
見下圖:
DavinciDM6446D-cache行應為512行,cache存儲器主要分為三個部分:目錄存儲段(driectory-story),狀態(tài)信息段(statusinformation)和數(shù)據(jù)項段(datasection)每一行cache都包括這三部分。Cache用目錄存儲段來存儲主存的地址,數(shù)據(jù)項段存放的是主存的數(shù)據(jù),在cache中用狀態(tài)信息段來記錄狀態(tài)信息,其中v表示有效位,d表示臟位,有效位記錄當前cache行是活動的,cache行的數(shù)據(jù)和主存中的數(shù)據(jù)是一致的,處理器可以讀取。臟位則表示cache行的數(shù)據(jù)和主存中的數(shù)據(jù)不一致。
在讀寫請求到達存儲器前會被CACHE捕獲,cache存儲器將該請求分成三部分標簽,組索引和數(shù)據(jù)索引域,cache通過組索引域確定可能包含地址和數(shù)據(jù)cache的行,cache存儲器檢查匹配的CACHE行的狀態(tài)標簽,如果是V表示(cachehit)命中,否則cache失效(cachemiss)在cache失效時從主存吧cache行考到CACHE存儲器
主存中的部分內(nèi)容存放在cache中的最簡單方式是直接映射,在一個直接映射中,主存的地址唯一對應cache行,因為主存容量很大所以主存的很多地址映射到同一個cache行
見下圖:
在DM6446中內(nèi)存為128M(bootargs設(shè)為128M)8K的D-CACHE則128×1024/8=16384映射一個cache行。由于cache的速度大大大于低速的主存速度,因此需要寫緩沖器。
Cache的寫策略分為直寫策略和回寫策略。同時向cache行和相應的主存位置寫數(shù)據(jù),同時更新這兩個地方的數(shù)據(jù)的方法稱為直寫策略(writethrough),把數(shù)據(jù)寫入cache行,不寫入主存的或者只有當cache被替換時或清理cache行時才寫入主存的策略稱為回寫策略(writeback)。采用回寫策略時,當處理器cache命中,只向cache存儲器寫數(shù)據(jù),不寫入主存,主存里的數(shù)據(jù)就和cache里不一致,cache里的數(shù)據(jù)是最新的,主存里的數(shù)據(jù)是早前的。這就用cache存儲器信息狀態(tài)標志位了,當向cache存儲器里某行寫數(shù)據(jù)時,置相應行的信息標志臟位為1,那么主控制器下次訪問cache存儲器就知道cache里有主存沒有的數(shù)據(jù)了,把數(shù)據(jù)寫回到主存中去。
當一個cache訪問失效時,cache控制器必須從當前有效行中取出一個cache行存儲從主存中取到的信息,被選中替換的cache行稱為丟棄者,如果這個cache行中臟位為1則應把該cache行中的數(shù)據(jù)回寫到主存中,而替換策略決定了那個cache行會被替換,在arm926ejs中ARM支持兩種策略:輪轉(zhuǎn)策略和偽隨機策略。輪轉(zhuǎn)策略就是取當前cache行的下一行,偽隨機策略是控制器隨機產(chǎn)生一個值。
當cache失效時,ARM采取兩種方式分配cache行,一種是讀操作(read-allocate)還有一種是讀-寫分配策略(read-write-allocate),當cache未命中時對于讀操作策略,在對cache存儲器讀操作時才會分配cache行
評論