캐시 메모리


캐시 메모리


CPU의 처리 속도와 RAM의 접근 속도 차이를 줄이기 위해 사용되는 범용 메모리. CPU가 자주 사용하는 프로그램과 데이터를 캐시 메모리에 저장 후 필요한 경우에 가져와 사용함.


캐시 메모리의 역할


캐시 메모리는 RAM과 CPU 사이의 중간 버퍼 역할을 한다. CPU가 데이터를 처리하는 속도는 매우 빠르기에, 이에 연결될 빠른 메모리가 필요하다. 휘발성인 메모리가 매번 새로 들어오는 CPU의 연산을 따라가기에는 부족함이 있기에 캐시 메모리에 이를 임시로 저장해서 필요한 때에 꺼내서 사용하는 것이다.

이렇게 캐시 메모리를 통해 속도 차이를 줄이면 CPU와 RAM 사이의 속도 차이로 인해 발생하는 병목현상 또한 줄일 수 있다.


캐시 메모리의 작동 원리


캐시 메모리는 지역성 원리에 기반하여 작동

  • 시간적 지역성 : 최근에 접근한 데이터에 다시 접근할 가능성이 높다는 것에 의거. 최근에 참조된 메모리 주소의 내용은 다음에 다시 참조될 가능성이 높다는 것

  • 공간적 지역성 : 접근한 데이터에 가까운 주소에 접근할 가능성이 높음. 특정 데이터와 인접한 주소의 데이터가 참조될 가능성이 높다는 것.


캐시 메모리의 구조


캐시 메모리는 캐시 블록이라는 단위로 이루어진다. 캐시 블록은 각각 데이터를 담고 있는 그룹이고, 캐시 태그와 함께 캐시 엔트리를 구성한다.

이 캐시 태그 값을 이용해서 캐시 블록에 접근을 하고, 해당 캐시 블록에 적재되어 있는 데이터에 접근하는 방식이다.

캐시 태그에는 해당 주소에 담긴 값이 유효하다는 것을 나타내기 위한 유효 비트가 포함되어 있다.


캐시 적중


CPU가 메모리에 접근할 시에 캐시 메모리에서 해당 데이터를 찾는 작업을 먼저 수행한다.

  • 캐시 히트 : 원하는 데이터가 캐시 메모리에 존재하는 경우를 말함. 이 때 CPU는 캐시 메모리에서 해당 데이터를 가져와 사용

  • 캐시 미스 : 원하는 데이터가 캐시 메모리에 존재하지 않는 경우. 이 때 CPU는 주 기억장치에서 데이터를 가져와야 하기에 접근 시간이 늘어남.


캐시 미스


  • Cold Miss : 접근하려는 메모리 주소를 처음 호출할 때 발생하는 미스
  • Conflict Miss : 저장하고자 하는 데이터 A와 B를 같은 캐시 메모리 주소에 할당하는 경우 발생하는 미스
  • Capacity Miss : 저장하고자 하는 데이터가 있는데 캐시 메모리에 공간이 부족한 경우에 발생하는 미스


캐시 메모리 종류


  1. L1 : CPU 코어 내부에 위치. 속도는 가장 빠르지만 용량은 작음. 명령어 캐시와 데이터 캐시로 나뉨
  2. L2 : L1과 L3 사이에 위치. L1보다 용량은 크지만 속도는 조금 느림
  3. L3 : CPU와 가장 멀리 위치. 용량은 가장 크지만 가장 느림. CPU의 코어들이 공유함
  • 접근 순서 : L1 - L2 - L3

캐시 메모리 매핑


캐시 메모리의 용량은 제한되어 있다. 그래서 모든 내용들을 캐시 메모리에 저장할 수 없다. 따라서 주 기억장치에 존재하는 데이터의 일부를 캐시 메모리에 매핑한다.

  • 직접 매핑 : 주 기억장치의 블록을 특정 캐시 라인에만 매핑. 구현은 쉽지만 Cache Hit Ratio가 떨어질 수 있음
  • 연관 매핑 : 주 기억장치의 블록을 캐시 메모리의 모든 라인에 매핑이 가능한 방식. 유연성은 높지만 존재하는 모든 캐시 라인들을 검색하므로 속도가 느림
  • 집합 연관 매핑 : 캐시 메모리를 여러 개의 집합으로 나누고 집합 내에서 연관 매핑을 이용하는 방식.


캐시 메모리 쓰기 정책


  • Write-Through : 캐시와 주 기억장치에 동시에 기록하는 방식. 구현은 쉽지만 기록 작업을 할 때마다 주 기억장치에 접근해야 하기에 성능이 떨어질 수 있음
  • Write-Back : 캐시 메모리에만 기록하고, 주 기억장치에는 바로 기록을 하지 않음. 캐시 메모리에서 해당 블록이 제거되는 경우에 주 기억장치에 업데이트를 진행. 성능이 올라가는 반면, 데이터가 서로 일치하지 않는 일관성 문제가 발생할 수 있음.