임베디드/임베디드 레시피

Cache, Cash

twoweeks-within 2025. 1. 16. 13:49

느린 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