“鎖定”在cache中的塊在常規的cache替換操作中不會被替換,但當通過C7控制cache中特定的塊時,比如使某特定的塊無效時,這些被“鎖定”在cache中的塊也將受到相應的影響。
用LINELEN表示cache的塊大小,用ASSOCIATIVITY表示每個cache組中的塊數,用NSETS表示cache中的組數。
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替換操作。
實現N鎖定塊被鎖定的操作步驟說明如下:
?1)確保在整個鎖定過程中不會發生異常中斷,否則必須保證與該異常中斷相關的代碼和數據位于非緩沖(uncachable)的存儲區域。
?2)如果鎖定的是指令cache或者統一的cache,必須保證鎖定過程所執行的代碼位于非緩沖的存儲區域。
?3)如果鎖定的是數據cache或者統一的cache,必須保證鎖定過程所涉及的數據位于非緩沖的存儲區域。
?4)確保將要被鎖定的代碼和數據位于緩沖(cachable)的存儲區域。
?5)確保將要被鎖定的代碼和數據尚未在cache中,可以通過使無效相應cache中的塊達到這一目的。
?6)對于I=0到N-1,重復執行下面的操作:
?a)Index=I寫入CP15的C9寄存器,當使用B格式的鎖定寄存器時,令L=1;
?b)在鎖定塊I中的各cache塊內容從主存中預取到cache中,對于數據cache和統一cache可以使用LDR指令讀取一個位于該塊中的數據,將塊預取到cache中;對于指令cache,通過操作CP15的C7寄存器,將相應的塊預取到指令cache中。
?7)將index=N寫入CP15的C9寄存器,當使用B格式的鎖定寄存器時,令L=0。解除N鎖定塊被鎖定只須執行以下操作:將index=0寫入CP15的C9寄存器,當使用B格式的鎖定寄存器時,令L=0。
ARM處理器中的Cache和Write Buffer操作是通過寫CP15的C7寄存器來實現的。訪問CP15的C7寄存器的指令格式如下所示:
mcr p15, 0, , , crm,
-
數據
+關注
關注
8文章
7335瀏覽量
94763 -
指令
+關注
關注
1文章
623瀏覽量
37535 -
Cache
+關注
關注
0文章
130瀏覽量
29709 -
代碼
+關注
關注
30文章
4968瀏覽量
73965
發布評論請先 登錄
看完cache后的疑惑
高速緩存(Cache),高速緩存(Cache)原理是什么?
Buffer和Cache之間區別是什么?
cache結構與工作原理
Linux內核Page Cache和Buffer Cache兩類緩存的作用及關系如何
關于Cache的其它內容
什么是 Cache? Cache讀寫原理
CPU Cache偽共享問題
深入理解Cache工作原理
Cache的原理和地址映射
Cache寫入方式原理簡介
5G CPE 路由器中的頻段鎖定是什么?它為何會影響網速?
Cache內容鎖定是什么
評論