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