느린 memory, 빠른 cpu 사이를 개입해 빠른것처럼 만들어줌
Software 특성
1. Temporal Locality
SW가 한번 momory에 접근 > 자주 접근함
2. Spatial Locality
(1번과연결)어떤 영역에 접근 하려고 보면 이미 접근했었던 영역일 가능성이큼
or 그 근처
>
접근했던 영역을 잠시 넣어서 거기로 접근하게함
TCM : Memory state 0 인 memory
Hit : 접근하려는 주소가 Cache에 저장되어있음
Miss : Cache에 없으니 Memory 에 직접 접근
Miss 일경우 어떻게 가져오냐
: 큰 단위로 가져옴( block) > Cache momory에 저장
LRU policy : 캐시 메모리에 안쓰고 오래있는걸 대체하는 방법
cache = cache Controller + cache Memory
( hit/miss/LRU 담당) ( 그런 memory의 내용 담는 memory)
Way Associative Cache
ex)
16KB cache memory > 2Way = 8KB씩 두 개
> 16Way = 1KB씩 두개
Write Through : Cache + memory 둘다 update
Write Back : cache만 update // through 보다 빠름
> memory와 cache 값이 다르게됨 ( Inconsistency )
ex) LCD에Data 쓸때 cache만 update 해서 LCD값은 안바뀌게됨
Write Buffer : FIFO buffer > CPU대신 Memory에 Data 를 적어줌
<> DMA 랑 쓸때는 조심!
: CPU가 DMA를 통해 뭔가를 대량으로 쓰면 cashe에는 update X
> 이때도 Inconsistency
>>
Cache Flush, Cache Clean, MMU의 Page Table > Non cacheable 영역으로 정함
Cache Flush (Cache Invalidate) : 물을 쫙 내리듯 Inconsistency 의심되면 > 쭉 내려버림 like Reset
Cache clean: Data cache > Memory에도 update해줌
// Cache는 Instruction 용 Data 용 따로 사용하기도함
Dirty : Cache에만 update됨 ( Memory X ) // Write Back 으로 쓸경우
cache_flush
ldr r1, =0x0
mcr p15, 0, r1, c7, c7, 0
CP15( Coprocessor 15): MMU control + cache
+
Cache 갈아치우기 Policy : Cp15의 C1[14] bit 를 통해서 Round Robin , Random으로 설정가능
cache 성능 up : Locality up하기
>
자주 쓰이는 것들은 cache 크기에 맞추어 memory에 module별로 몰아 넣기
+
자주쓰는 전역변수 같은거 모아두기
'임베디드 > 임베디드 레시피' 카테고리의 다른 글
JTAG interface (0) | 2025.01.17 |
---|---|
MMU : Memory Management Unit ( 다시보기) (0) | 2025.01.16 |
PLL , M/N:D (0) | 2025.01.15 |
Wait State (0) | 2025.01.15 |
Synchronous ,Asynchronous (0) | 2025.01.15 |