정리노트

Cache정리 본문

잡다한 정리

Cache정리

Krex_Kim 2021. 10. 15. 21:54

32bit, 64bit 정도밖에 되지않는 레지스터가 몇십기가짜리 방대한 크기의 DRAM메모리에 일일이 검색하며

데이터를 끌고오는데에는 아무리 SRAM이 빠르다고 할지라도 무리가 있기때문에,

자주쓰이는 RAM DATA를 CPU옆에 붙여두고, DRAM으로 가기전에 먼저 그곳을 들러서 

데이터가 있다면(Hit), 굳이 저 멀리있는 DRAM까지 가서 데이터를 Searching하는 작업을 하지 않아도 된다.

 

이것이 캐시의 가장 근본적인 아이디어라고 할 수 있다.

 

캐시의 하드웨어적 위치

 

-SRAM

RAM 의 특징은, 크기가 작을 수록 속도가 큰편이며,

크기가 클 수록 속도가 느려진다는 것이다.

SRAM과 DRAM의 관계를 보면 바로 알 수 있는데,

우리가 통상 컴퓨터에서 이야기 하는 RAM은 DRAM을 말하는 것이며, 

이번 장에서 다루는 캐시는 속도는 매우 빠르고 비싸지만 크기가 매우 작은 SRAM을 말하는 것이다.

 

sram, dram

 

-Cache Architecture

intel x86 Processor_ 각 코어마다 L1,L2캐시가 있고, 코어끼리 Shared된 L3캐시가 존재한다.

캐시도 단순히 메모리 하나로서 존재하는 것이 아닌,

조금 복잡한 구조로 이루어져있는데,

L1, L2, L3로 계층구조화 되어있다.

L1에서 Hit이 되지 않으면, L2로 이동되고, L2에서 Hit되지않으면 L3....(사실상 L3까지 거의 가지도 않는다)

그럴일이 없겠지만 Cache 전체에서 Hit되지 않는다면 메인메모리로 가서 직접 searching 과정을 거친 후에

데이터 블록을 검색해서 가져올 수 있게되고, 캐시에 새로운 데이터 블록을 업데이트 시킨다.

 

(다만 혼동하면 안되는 것이, 캐시는 메모리 주소 데이터를 저장하는 것이지, 메모리 데이터 자체를 저장하지는 않는다.

mapping과정에서 address를 찾는 시간을 없애주는 것일 뿐, 실제 데이터는 메모리에서 가져와야한다.)

 

(L1,L2,L3에 어떤 데이터들이 담기는지에 대해서는 생략한다.)

 

 

-Cache Organization S,E,B

Cache라벨 구조는

tag, set, Byteoffset 세가지로 이루어져 있는데 각각을 S, E, B라고 지칭하고,

전체 캐시 사이즈는 S*E*B byte가 된다.

캐시구조

가장먼저 Set를 searching한 후, set안에있는 tag값이 일치하는 지 확인한 후,

만약 없다면(Miss) 해당 set의 현재찾는 tag값으로 바꾸고, Byte offset을 이후 캐시,혹은 메모리에서 찾아와 새로운 데이터로 초기화 시켜놓는다.

만일 Hit라면, 해당블록의 byteoffset정보를 CPU에 전달하여 메모리로 접근을 한번에 할 수 있도록 한다.

 

 

 

- VirtualMemory

여기서부터 내용이 조금 딥해진다고 할 수 있는데,

일반적으로 DRAM으로 레지스터가 맵핑을 할때, 우리는 실제 Physical Memory 램으로 맵핑을 한다고 생각하지만

아니다.

 

보통 어셈블리어에서나 통상적으로 우리가 레지스터로 메모리에 접근을 할때, 그것은 실제 메모리가아닌 가상메모리에 접근을 하는 것이다.

 

 

 

-MMU, TLB, 캐시

Comments