“鎖定”在cache中的塊在常規(guī)的cache替換操作中不會被替換,但當(dāng)通過C7控制cache中特定的塊時(shí),比如使某特定的塊無效時(shí),這些被“鎖定”在cache中的塊也將受到相應(yīng)的影響。
用LINELEN表示cache的塊大小,用ASSOCIATIVITY表示每個(gè)cache組中的塊數(shù),用NSETS表示cache中的組數(shù)。
cache的“鎖定”是以鎖定塊(lockdown block)為單位進(jìn)行的。每個(gè)鎖定塊中包括cache中每個(gè)組中各一個(gè)塊,這樣cache中最多可有ASSOCIATIVITY個(gè)鎖定塊,編號為0~ASSOCIATIVITY-1。
其中編號為0的鎖定塊中包含cache組0中的0號塊、組1中的0號塊,一直到ASSOCIATIVITY-1中的0號塊。
“N鎖定塊被鎖定”是指編號為0~N-1的鎖定塊被鎖定在cache中,
編號為N~ASSOCIATIVITY-1的鎖定塊可用于正常的cache替換操作。
實(shí)現(xiàn)N鎖定塊被鎖定的操作步驟說明如下:
?1)確保在整個(gè)鎖定過程中不會發(fā)生異常中斷,否則必須保證與該異常中斷相關(guān)的代碼和數(shù)據(jù)位于非緩沖(uncachable)的存儲區(qū)域。
?2)如果鎖定的是指令cache或者統(tǒng)一的cache,必須保證鎖定過程所執(zhí)行的代碼位于非緩沖的存儲區(qū)域。
?3)如果鎖定的是數(shù)據(jù)cache或者統(tǒng)一的cache,必須保證鎖定過程所涉及的數(shù)據(jù)位于非緩沖的存儲區(qū)域。
?4)確保將要被鎖定的代碼和數(shù)據(jù)位于緩沖(cachable)的存儲區(qū)域。
?5)確保將要被鎖定的代碼和數(shù)據(jù)尚未在cache中,可以通過使無效相應(yīng)cache中的塊達(dá)到這一目的。
?6)對于I=0到N-1,重復(fù)執(zhí)行下面的操作:
?a)Index=I寫入CP15的C9寄存器,當(dāng)使用B格式的鎖定寄存器時(shí),令L=1;
?b)在鎖定塊I中的各cache塊內(nèi)容從主存中預(yù)取到cache中,對于數(shù)據(jù)cache和統(tǒng)一cache可以使用LDR指令讀取一個(gè)位于該塊中的數(shù)據(jù),將塊預(yù)取到cache中;對于指令cache,通過操作CP15的C7寄存器,將相應(yīng)的塊預(yù)取到指令cache中。
?7)將index=N寫入CP15的C9寄存器,當(dāng)使用B格式的鎖定寄存器時(shí),令L=0。解除N鎖定塊被鎖定只須執(zhí)行以下操作:將index=0寫入CP15的C9寄存器,當(dāng)使用B格式的鎖定寄存器時(shí),令L=0。
ARM處理器中的Cache和Write Buffer操作是通過寫CP15的C7寄存器來實(shí)現(xiàn)的。訪問CP15的C7寄存器的指令格式如下所示:
mcr p15, 0, , , crm,
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7030瀏覽量
89038 -
指令
+關(guān)注
關(guān)注
1文章
607瀏覽量
35714 -
Cache
+關(guān)注
關(guān)注
0文章
129瀏覽量
28346 -
代碼
+關(guān)注
關(guān)注
30文章
4788瀏覽量
68616
發(fā)布評論請先 登錄
相關(guān)推薦
評論