Computer Science/OS

[CSAPP] Cache Memory

[앙금빵] 2022. 11. 27.

Cache Memory

캐시메모리는 속도가 빠른 장치와 느린 장치 간의 속도차에 따른 병목 현상을 줄이기 위한 범용 메모리이다.

 

DRAM보다는 작지만 속도가 빠른 SRAM 기반으로 만들어진 메모리 소자이다. 메인 메모리의 데이터들은 블록이라는 단위로 나뉘며, 캐시 메모리는 메인 메모리에서 높은 빈도로 접근되는 블록들을 저장한다. CPU는 메모리 참조가 필요할 때마다 메인 메모리보다 더 가깝고 접근 속도가 빠른 캐시 메모리를 먼저 확인한다.

 

이러한 원리로 CPU와 DRAM간의 직접적인 통신을 최소화함으로써 메모리 참조의 효율을 높일 수 있다. 캐시 메모리는 DRAM과 SRAM으로 이루어진 메모리 기술에 지역성(Locality)를 결합하여 탄생시킨 기술적 산물이다.

 

[특징]

  1. 캐시 메모리는 메인 메모리와 CPU 사이에 위치하며 CPU 속도에 버금갈 정도로 메모리 계층에서 속도가 가장 빠른 장점을 보유하고 있지만, 용량이 적고 가격이 비싸다.

  2. 캐시 메모리는 여러 층으로 이루어 질 수 있다. 인텔과 같이 몇몇 CPU 메모리 계층이 L1, L2, L3 그리고 메인메모리로 이루어져 있다.


이러한 구조는 L1 → L2 → L3 → 메인메모리 탐색과정을 걸치게 된다.

 

CPU와 Cache Memory 통신 구조

  • 캐시 메모리를 찾춘 CPU는 메모리 참조가 필요할 때 가까운 곳에 위치한 캐시 메모리에 먼저 접근하도록 설계가 되었다.
  • 만약, 캐시 메모리가 존재하지 않는다면 시스템 버스와 메모리 버스를 거쳐서 메인 메모리에 직접 찾아간다.

 

정리하면, CPU가 메모리를 참조할 때 메모리 주소를 곧바로 시스템 버스에 싣는 것이 아닌, 캐시 메모리에 먼저 입력하도록 함으로써 하드웨어 수준에서 캐시 메모리 메커니즘을 구현한다. 하드웨어 내부적으로 메모리 참조를 추상화 한 것이다.

Bus 
컴퓨터의 구성요소를 서로 연결하고 데이터 전달을 위한 경로

System Bus

시스템 버스는 하드웨어를 물리적으로 연결하여 서로 데이터를 주고받을 수 있게 하는 통로

Memory Bus
메모리와 다른 장치를 이어주는 통로

 

 

Cache Memory 구조 (S, E, B)

① 캐시 메모리는 S개의 집합(Set)으로 이루어져 있으며 각 집합은 E개의 캐시 라인을 저장한다.

② 각 캐시 라인은 Block, Valid Bit, Tag를 저장한다.

 

  • Block: 메인 메모리에서 가져오는 캐시 블록
  • Valid Bit: 캐시 블록 유효성 판별, Miss시 0으로 표시한다.
  • Tag: 동일한 집합에 들어올 수 있는 다른 블록들과 구별

 

캐시 메모리 총 사이즈 = S x E x B 바이트 (B = 메인 메모리의 각 블록 byte 용량)

Direct-Mapped Cache (E = 1), E-way Set Associative Cache (E > 1) 이다.

 

 

 

메인 메모리의 각 블록은 캐시 메모리의 특정 집합에만 들어갈 수 있다.  메인메모리 각 블록은 자신의 주소에 따라 캐시 메모리의 특정 집합에만 들어갈 수 있도록 약속한다. 이를 바탕으로 요청된 블록이 위치할 수 있는 집합에서만 필요한 탐색 과정을 진행한다.

 

만약, 메인 메모리의 각 블록이 캐시 메모리의 어디에든 들어갈 수 있다면, 캐시 메모리는 CPU로부터 메모리 참조를 요청받을 때마다 해당 블록을 찾는데 있어 불필요한 탐색과정을 걸치게 되며 데이터를 검색하는데 추가 비용이 발생하게 된다.

 

각 집합 내 블록 개수는 유한하기에 블록 탐색 시간 복잡도는 O(1)이 된다.

 

Cache Read

 

캐시 메모리 블록 탐색 과정
① 입력되는 메모리 주소의 s비트를 바탕으로 요청된 블록이 위치할 수 있는 집합을 찾아간다.

② 요청된 블록 태그(입력 메모리 주소의 상위 t비트 값)와 동일한 태그를 가지는 유효한(유효 비트 =1) 캐시 라인이 존재하는지 탐색한다. (※ 탐색 과정에서 시간 복잡도는 O(1)이다.)

③ 발견된다면 캐시 히트(Hit)고, 발견되지 않으면 캐시 미스(Miss)이다.

 

캐시 히트인 경우, 입력되는 메모리 주소의 하위 b비트와 읽을 바이트 개수를 나타내는 컨트롤 신호 정보를 바탕으로 블록 내 요청되는 바이트 배열을 반환한다.

 

캐시 미스인 경우, 해당 블록을 메인 메모리에서 가져온 뒤 캐시 히트인 경우와 마찬가지로 요청된 바이트 배열을 반환한다.

 

만약, 해당 블록이 들어가야할 집합이 이미 꽉 차있다면, 정해진 기준에 따라 해당 집합에서 하나의 블록을 쫒아내야 한다. 그 기준을 정의하는 것이 Replacement Policy 이다. 대표적인 Replacement Policy는 임의의 블록을 쫒아내는 Random 방식, 가장 예전에 참조되었던 블록을 쫒아내는 LRU(Least Recently Used) 방식이 있다.

 

Cache Locality

 

캐시 지역성(Cache Loclity)은 데이터에 대한 접근이 시간적 혹은 공간적으로 가깝게 발생하는 것을 의미하며 캐시의 적중률(Hit rate)을 극대화 하여 캐시가 효율적으로 동작하기 위해 사용되는 성질이다.

 

[캐시 지역성의 전제조건]

프로그램은 모든 코드나 데이터를 균등하게 접근하지 않는다.

캐시의 지역성은 공간 지역성(Spatial Locality)와 시간 지역성(Temporal Locality)으로 나뉜다.

 

  • 공간 지역성: 최근에 사용하였던 데이터와 인접한 데이터가 참조될 가능성이 높은 특성이다.
  • 시간 지역성: 최근에 사용하였던 데이터가 재참조될 가능성이 높은 특성이다.

 

참조

https://rebro.kr/180

https://it-eldorado.tistory.com/50

 

댓글