根據程序的局部性原理,在主存與CPU之間設置的一個高速的容量較小的存儲器,叫作cache。架構
ARM cache架構由cache存儲器和寫緩衝器(write-buffer)組成。其中Write_buffer是cache按照FIFO原則向主存寫的緩衝器。fetch
cache能夠分爲Dcache,Icache。分別cache data和 instruction。其中Dcache必須在MMU開啓後才能在CP15寄存器中使能,Icache在MMU未使能的情編碼
況下,也是可使能的。component
在armv6版本以前的memory attribute:get
通常會在使能MMU的過程當中,規定MMU page table的definition。其中20bit表示每一page的memory attributes。12位表示每一page的基地址。一共32同步
位。每一page都會設置兩個屬性,cacheable,bufferable。其中每一page的memory attribute有it
strong ordered,io
Outer and inner write-back, write allocate,table
Outer and inner write-through, no write allocate,原理
Outer and inner write-through, no write allocate,shared Device.
Shared Device.
non-cacheable.
MMU_CACHE:
.word 0x5000_0000|strong ordered;(其中strong order由20bit來表示)
其中arm的基本memory attribute有四種:
NCNB(Non-cacheable,non-bufferable,Strongly-ordered),
NCB(Non-cacheable,bufferable,Device),
Write-Through Cacheable bufferable,
Write-Back Cacheable bufferable
Write-Through方式:CPU向cache寫入數據時,同時也向memory寫一份,使得cache和memory的數據保持一致,缺點是每次都要訪問memory,速度較
慢。
Write-Back方式:CPU更新cache時,只是把更新的cache區標記一下,並不一樣步更新memory,只有在cache區被新進入的數據取代時,才更新memory。
會引發memory和cache的一致性問題。
Write-allocate方式:在cache miss的狀況下,先對存儲器進行read操做,將操做數讀入cache,在進行讀寫,這樣便cache hit。
Bufferable與non-bufferable的區別,主要表如今ack信號的返回上,bufferable--將結果寫入buffer(某個component)便返回ack,
non-bufferable等到結果寫入外存,返回ack。
在AMBA3---AXI中,有四位的arcache/awcache信號,來表示transaction的這種屬性。
arcache/awcache[0]表示,bufferable信號,表示interconnect或其餘compnonent能夠先返回ack,以後再寫向final distination,只用在write操做。
arcache/awcache[1]表示,cacheable信號,對寫操做,表示能夠有不一樣的write megered together。
對讀操做,表示該地址的數據能夠pre-fetched,可被用在多個read transaction中。
arcache/awcache[2]表示,Read Allocate信號,若是一個transfer 讀操做cache miss,它會allocated後再讀。
arcache/awcache[3]表示,Write Allocate信號,若是一個write transfer cache miss,它會allocated,後讀外存,在write-back方式的寫回。
這兩bit的信號在AXI3中主要是Cache的互聯中,會進行設置,經過smmu出來以後的transaction,之間簡單的加載外存的值。
在armv7及其以後的版本,Bus AXI4中的memory attribute:
主要的基點改動,
1) AxCache[1]表示modified的意思;
2) AXI4對non-modified的transaction有order的限制;
3) RA,WA變爲了對memory attribute的編碼。
modifiable transaction表示,
1)一個大的transaction,能夠被分割爲多個小的transaction;
2)多個小的transaction,能夠被merge爲一個大的transaction;
3)一個read operation,能夠讀取超過須要的數據,prefetch數據,這樣以後可能能夠少發送一些read transaction;
4)一個write operation,也能夠訪問一個更大的地址空間,不合理的地址對應的數據,使用strb信號關閉;
5)因此一個transaction,從源到目的地,AxAddr,AxSize,AxLen,AxBurst信號的值,均可以改動。
對於non-modifiable transaction,這些信號在傳輸過程當中,是不能被修改的,transaction也就是不能被merge和split。
可是AxCache信號,從Bufferable轉換爲Non-Bufferable是能夠的,
一個burst length大於16的transaction,也能夠被split爲幾個小的burst length的transaction。這是個例外能夠改length的地方。