캐시 메모리는 컴퓨터 시스템의 메모리 계층 구조에서 가장 빠르고 효율적인 메모리로, 최상단에 위치한 고속 메모리이다. 캐시 메모리는 메인 메모리보다 크기가 훨씬 작고 가격이 비싸다. 하지만 그만큼 접근 속도가 매우 빠르며, 이 속도 차이를 활용해 CPU와 메인 메모리 간의 병목 현상을 줄일 수 있다.
캐시 메모리에서 중요한 개념은 데이터 지역성(Locality of Reference)이다. 이를 활용해 자주 사용될 가능성이 높은 데이터를 메인 메모리에서 미리 캐시로 불러와 저장함으로써, CPU가 메인 메모리에 직접 접근하지 않고 캐시에서 더 빠르게 데이터를 처리할 수 있게 한다.
본격적으로 캐시 메모리에 대해 알아보기 전에, 관련 용어를 먼저 살펴보자.
캐시 메모리와 메인 메모리 간 데이터를 주고 받는 단위를 Block 또는 Cache Line이라고 한다.
일반적으로 한 블록의 크기는 64바이트이다. 캐시는 메모리와 다르게 데이터를 한 번에 큰 단위로 가져오는데, 이는 데이터를 자주 사용하는 특성을 고려한 것이다. 즉, Spatial Locality(공간 지역성) 개념에 따라 메모리의 특정 위치에 있는 데이터를 참조할 때, 그 주변 데이터 역시 곧 사용될 가능성이 높기 때문에 한 번에 여러 바이트를 읽어온다.
Hit rate)캐시 메모리의 핵심 원리는 데이터 지역성(Locality of Reference)이다. 이를 통해 메인 메모리에서 자주 사용될 데이터를 미리 캐시로 옮겨 놓고 CPU가 빠르게 접근할 수 있게 한다.
데이터 지역성은 크게 세 가지로 나뉜다:
이 원리를 기반으로 CPU가 데이터를 요청하면, 캐시는 태그 메모리를 탐색해 해당 데이터가 캐시 안에 있는지 확인한다. 만약 해당 데이터가 캐시에 있다면 Hit이 발생하고, 그렇지 않으면 Miss가 발생해 메인 메모리에서 데이터를 불러온다.
✅ Hit
CPU가 캐시에 주소 전송 > 태그 메모리 탐색 > 일치하는 태그 발견(Hit) > 블록 상태 갱신(필요한 경우) > 데이터 메모리에서 블록 추출 > 요청받은 데이터 선택 > 캐시가 CPU에 데이터 전송
❌ Miss
CPU가 캐시에 주소 전송 > 태그 메모리 탐색 > 일치하는 태그 없음(Miss) > 주소를 메모리로 전송해 대응하는 블록을 캐시에 저장 > 요청받은 데이터 선택 > 캐시가 CPU에 데이터 전송
캐시 메모리는 CPU가 요청한 데이터를 찾기 위해 캐시 블록과 캐시 태그로 구성된다.

캐시 메모리와 메인 메모리 간의 데이터를 주고받을 때, 데이터가 캐시의 어느 위치에 저장될지 결정하는 방법이다. 대표적으로 아래와 같이 세 가지 기법이 있다:



캐시의 쓰기 정책은 CPU가 데이터를 캐시에 쓰는 방식을 설명하는 개념이다. CPU와 메인 메모리 간의 속도 차이를 줄이기 위해서, 쓰기 작업이 발생할 때 캐시에 어떻게 데이터를 저장할지와 메인 메모리와의 동기화가 중요한 문제로 다뤄진다.
캐시의 쓰기 정책에는 크게 두 가지 종류가 있다:
CPU가 캐시에 쓰는 동시에 메인 메모리에도 동일한 데이터를 즉시 쓰는 방식이다. 즉, 데이터가 캐시에 기록되면 바로 메인 메모리에도 동기화된다.
성능 최적화를 위해서는 Write buffer를 사용하여 메인 메모리에 쓰는 시간을 단축할 수 있다. 즉, 데이터를 캐시에 기록한 후 바로 CPU가 작업을 계속할 수 있도록 하고, 메모리 쓰기는 백그라운드에서 처리하는 방식이다.
CPU가 캐시에만 데이터를 기록하고, 메인 메모리에는 나중에 업데이트 하는 방식이다. 캐시에서 데이터 블록이 교체될 때 메인 메모리에 한꺼번에 기록된다.
성능 최적화를 위해서는 Dirty bit를 사용해 캐시에 있는 수정된 데이터(Dirty Data)만 메모리에 쓸 수 있다. 즉, 데이터가 캐시에서 수정되었음을 표시해두고, 교체 시에만 메모리에 기록한다.
e.g. 캐시의 데이터가 수정되고 메인 메모리에 기록되지 않았을 경우 그 데이터 블록의 dirty bit를 1로 설정한다.
💁🏻♀️ Dirty Bit란?
Dirty bit는 일종의 메모라고 생각하면 쉽다. 예를 들어 아이패드에 필기를 하는 상황을 가정해보자. 만약 내가 어떤 페이지를 수정했다면 “이 페이지는 수정되었습니다.”라는 메모를 남긴다. 이제 이 메모는 “이 페이지는 수정되었고, 아직 다른 사람(메모리)에게 전달되지 않았다.”라고 알려주는 역할을 한다. 그리고 나중에 다른 사람이 그 필기를 복사할 때, 수정되지 않은 노트를 다시 복사하는 불필요한 작업을 줄일 수 있게 된다.
캐시 메모리는 CPU와 메인 메모리 사이의 병목 현상을 줄이기 위한 매우 중요한 장치다. 캐시의 성능은 데이터 지역성을 얼마나 효율적으로 활용하는지에 따라 크게 좌우된다. 캐시 메모리와 관련된 다양한 기법들은 메모리 접근 시간을 줄이기 위해 발전해왔으며, 이를 이해하면 컴퓨터 시스템의 성능을 최적화하는 데 중요한 개념을 잡을 수 있을 것이다.
최근에 다시 복습하면서, 캐시 메모리는 이후 운영체제에서도 중요한 개념으로 계속 등장한다는 것을 확실히 느꼈다. (운영체제 스터디 중에도 캐시 메모리와 관련된 질문이 자주 나왔을 정도로..) 오늘은 캐시 메모리의 기본 개념에 대해 간단히 다뤘지만, 앞으로 더 깊이 있는 지식을 쌓으면서 계속해서 추가할 예정이다.
Reference