함께 배우는 수업 · 컴퓨터/정보

메모리 계층 구조와 캐시

속도·용량·비용의 트레이드오프를 해결하는 메모리 계층 피라미드와 캐시 메모리의 참조 지역성(Locality), 평균 메모리 접근 시간(AMAT)을 학습합니다.

이 수업에서 해 볼 일

  • 지역성과 접근 비용으로 메모리 계층의 동작을 설명한다

먼저 알면 좋은 것: 폰 노이만 병목 현상과 CPU-RAM 간 속도 격차 · SRAM(플립플롭 기반)과 DRAM(축전기 기반)의 물리적 차이 · 확률의 기댓값 계산 원리

오늘의 목표

가입 없이 시작할 수 있어요. 설명을 읽고, 함께 연습한 뒤, 처음 보는 문제에서 직접 확인합니다.

판단 과정과 비교 사례

메모리 계층은 자주 쓰는 데이터를 작은 고속 저장소에 두어 평균 접근 시간을 줄인다. 적중 시간에 '미스 확률×미스 페널티'를 더해 AMAT를 비교하자.적중 시간이 3ns, 적중률 80%, 추가 미스 페널티 20ns라면 평균은 3+0.2×20=7ns다. 적중률만 높다고 무조건 더 빠른 설계는 아니다.같은 주소를 다시 읽으면 시간 지역성, 가까운 주소를 이어 읽으면 공간 지역성이다. 실제 프로그램에서는 둘이 함께 나타날 수 있으므로 문제에서 강조한 접근 패턴을 확인하자.

1. 메모리 계층 구조 (Memory Hierarchy) 피라미드

이상적인 메모리는 '초고속이면서 대용량이고 가격도 저렴하며 전원이 꺼져도 데이터가 유지되는' 메모리이지만, 물리적으로 이 조건들을 동시에 만족하는 소자는 없습니다. 따라서 컴퓨터는 여러 메모리를 계층적으로 조합하여 마치 빠르면서도 거대한 단일 메모리가 있는 것처럼 동작하게 만듭니다. 1. 레지스터 (Register): CPU 코어 내부 위치, 접근 속도 <0.5ns< 0.5\text{ns} (1클럭), 용량 수백 Byte ∼\sim 수 KB. 2. 캐시 메모리 (SRAM - L1 / L2 / L3): - L1 캐시: 코어 내부에 위치(수십 KB, 약 1ns1\text{ns}). - L2 캐시: 코어별 할당(수백 KB ∼\sim 수 MB, 약 3∼5ns3 \sim 5\text{ns}). - L3 캐시: 모든 코어가 공유(수십 MB, 약 10∼20ns10 \sim 20\text{ns}). 3. 주기억장치 (DRAM - Main Memory / RAM): 전원이 꺼지면 날아가는 휘발성 메모리로 재충전(Refresh)이 필요함. 접근 속도 약 50∼100ns50 \sim 100\text{ns}, 용량 수 GB ∼\sim 수백 GB. 4. 보조기억장치 (SSD / HDD): 비휘발성 영구 저장 장치. NVMe SSD는 수십 마이크로초(μs\mu\text{s}), HDD는 수 밀리초(ms\text{ms})로 CPU보다 수만~수백만 배 느립니다.SRAM(캐시)은 플립플롭 회로로 만들어져 재충전이 필요 없고 매우 빠르지만 비싸고 집적도가 낮습니다. 반면 DRAM(메인 메모리)은 축전기(Capacitor)에 전하를 채우는 방식이라 저렴하고 대용량화가 쉽지만, 전하가 방전되므로 주기적인 재충전(Refresh)이 필요합니다.

2. 캐시 동작 원리와 참조 지역성(Locality of Reference)

캐시 용량은 RAM의 수백 분의 1에 불과하지만 실제 캐시 적중률(Cache Hit Ratio)은 90~99%에 달합니다. 그 비결은 프로그램이 메모리를 무작위로 접근하지 않고 특정 영역만 집중적으로 참조하는 지역성(Locality) 성질을 갖기 때문입니다. 1. 시간 지역성 (Temporal Locality): 방금 참조된 메모리 주소의 데이터는 가까운 미래에 다시 참조될 확률이 매우 높다는 원리입니다. - 예: for 루프의 제어 변수 i나 누적 합산 변수 sum, 자주 호출되는 함수 코드. 2. 공간 지역성 (Spatial Locality): 특정 메모리 주소가 참조되면 그 주소와 물리적으로 인접한 주소의 데이터들이 곧이어 참조될 확률이 높다는 원리입니다. - 이 때문에 캐시는 데이터를 가져올 때 요청한 1바이트만 가져오지 않고, 인접한 데이터 묶음인 캐시 라인(Cache Line, 보통 64 Byte 단위)을 통째로 캐시에 복사해 옵니다.

예제로 살펴보기

L1 캐시 접근 시간이 1ns이고, 캐시 실패(Miss) 시 메인 메모리에서 데이터를 가져오는 패널티(Miss Penalty)가 100ns라고 하자. 캐시 적중률(Hit Ratio)이 95%일 때 평균 메모리 접근 시간(AMAT)을 구하시오.
  1. 평균 메모리 접근 시간(AMAT, Average Memory Access Time) 공식은 다음과 같습니다: AMAT = (Hit Time) + (Miss Rate × Miss Penalty) 여기서 Hit Time = 1ns, 적중률이 95%(0.95)이므로 실패율(Miss Rate) = 1 - 0.95 = 0.05(5%), Miss Penalty = 100ns입니다. 따라서 AMAT = 1ns + (0.05 × 100ns) = 1ns + 5ns = 6ns입니다. 만약 캐시가 없었다면 매번 100ns가 걸렸겠지만, 95%의 캐시 적중률 덕분에 전체 메모리 접근 속도가 약 16.7배 빨라진 것을 확인할 수 있습니다.
확인: 메모리 계층 구조는 레지스터 ➔ 캐시(SRAM) ➔ 주기억장치(DRAM) ➔ 보조기억장치(SSD/HDD) 순으로 구성된다.

3. 캐시 친화적 코드(Cache-Friendly Code)와 쓰기 정책

- 2차원 배열 순회 순서와 성능 차이 (실무 최적화 핵심): - C/C++, Python(NumPy) 등 대부분의 언어는 2차원 배열 arr[Row][Col]을 메모리에 행 우선(Row-major) 순서로 연속 배치합니다. - 따라서 바깥 루프를 행(i), 안쪽 루프를 열(j)로 두고 arr[i][j] 순서로 읽으면 공간 지역성이 극대화되어 캐시 적중률이 98% 이상 나오지만, 반대로 arr[j][i] 순서로 열 방향 점프를 하면 매번 캐시 미스(Cache Miss / Thrashing)가 발생하여 똑같은 연산임에도 실행 속도가 5배~10배 이상 느려집니다! - 캐시 일관성(Coherency)과 쓰기 정책(Write Policy): - CPU가 캐시의 데이터를 수정했을 때 RAM에 언제 반영할지에 따라 두 가지 방식이 있습니다. - Write-Through: 캐시에 쓸 때마다 즉시 RAM에도 함께 씁니다 (데이터 일관성은 안전하지만 메모리 버스 트래픽 증가로 느림). - Write-Back: 캐시에서만 빠르게 수정하고 변경 표시(Dirty Bit)만 해두었다가, 해당 캐시 블록이 교체되어 밀려날 때 한 번에 RAM에 반영합니다 (성능이 훨씬 뛰어나 현대 CPU의 기본 방식).알고리즘의 시간 복잡도가 똑같은 O(N²)이라도 메모리상 연속된 배열을 순차 탐색(Row-major)하는 코드가 포인터를 따라 점프하는 연결 리스트보다 실무에서 수십 배 빠른 이유가 바로 '캐시 공간 지역성(Cache Line 64B 로드)' 때문입니다.

참고 근거와 확인 범위

설명·예제·문제 구성 및 오류 수정 책임: 프리런. 위 자료는 표시한 주제를 확인하거나 더 읽기 위한 근거이며, 외부 기관의 공식 수업이나 감수본을 뜻하지 않습니다.

참고 자료 연결 점검: 2026-11-02. 제작 방식·검수 범위와 수정 기록에서 확인 범위를 볼 수 있습니다. 오류는 상단의 의견 보내기 또는 contact@freelearn.io로 알려 주세요.

이 단원의 개념서 읽기 →