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