캐시는 CPU와 RAM 사이에 둔 작고 빠른 메모리입니다. 캐시가 클수록 더 많은 데이터를 담을 수 있지만, 캐시를 크게 만들면 속도가 느려집니다. 크기와 속도를 동시에 만족시킬 수는 없습니다.
캐시 하나를 크게 만드는 대신, 작고 빠른 캐시와 크고 느린 캐시를 여러 단계로 쌓으면 어떨까요? 지역성 덕분에 대부분의 접근은 가장 작고 빠른 첫 번째 단계에서 끝납니다. 가끔 거기서 못 찾을 때만 다음 단계로 내려가면 됩니다. 이렇게 하면 하나의 큰 캐시보다 평균 접근 속도가 더 빨라집니다.
실제 컴퓨터가 이 방식을 씁니다. CPU에 가까운 쪽은 작고 빠르게, 먼 쪽은 크고 느리게 만들어 단계별로 연결합니다. 이를 메모리 계층 구조(memory hierarchy)라 합니다.
| 계층 | 용량 | 속도 |
|---|---|---|
| 레지스터 | 수십 개 | 1 사이클 |
| L1 캐시 | 수십 KB | ~4 사이클 |
| L2 캐시 | 수백 KB | ~10 사이클 |
| L3 캐시 | 수십 MB | ~40 사이클 |
| RAM | 수 GB ~ 수십 GB | ~200 사이클 |
위로 갈수록 빠르고 작으며, 아래로 갈수록 느리고 큽니다. 각 계층은 바로 아래 계층의 캐시 역할을 합니다. CPU가 데이터를 요청하면 L1부터 확인하고, 없으면 L2, 그래도 없으면 L3, 최종적으로 RAM까지 내려갑니다.
위 시뮬레이터에서는 L1이 2칸뿐이라 금방 밀려나지만, 실제 L1 캐시는 수십 KB로 대부분의 접근이 여기서 끝납니다. 덕분에 CPU는 마치 크고 빠른 메모리를 쓰는 것처럼 동작할 수 있습니다.
RAM 아래에는 SSD나 HDD 같은 보조기억장치가 있습니다. 여기까지 내려가면 접근 시간이 수만~수십만 사이클로 늘어납니다.
이 시리즈에서 우리는 0과 1로 시작해, 논리 게이트를 배우고, MUX로 선택을 하고, 가산기로 계산을 하고, 래치로 기억을 하고, 튜링 머신과 폰 노이만 구조로 컴퓨터의 설계 원리를 세우고, CPU로 명령어를 실행하고, 캐시와 메모리 계층 구조로 속도 문제까지 해결했습니다. 0과 1에서 출발해 동작하는 컴퓨터 한 대를 조립한 셈입니다.
컴퓨터의 구조를 알았으니, 이제 데이터를 효율적으로 다루는 방법이 필요합니다. 같은 문제라도 데이터를 어떻게 정리하고 어떤 순서로 처리하느냐에 따라 성능이 달라집니다. 다음 파트에서는 자료구조와 알고리즘을 다룹니다.