캐시메모리 매핑 방식과 연관도 설계

직접 사상, 완전 연관 사상, 집합 연관 사상의 주소 대응 구조와 캐시 적중률·비용 트레이드오프를 정리한다.

2026-08-14 · 최초 발행 2026-01-16

주소의 어느 부분이 캐시 위치를 정하는가

캐시 매핑은 메인 메모리 블록을 캐시의 어느 위치에 둘 수 있는지 정하는 주소 대응 규칙이다. 메인 메모리가 캐시보다 훨씬 크기 때문에 여러 블록은 제한된 캐시 공간을 공유해야 한다. 이 규칙은 요청한 데이터의 탐색 속도, 캐시 적중률, 하드웨어 비용, 같은 위치를 두고 경쟁하는 충돌 가능성을 함께 결정한다.

주소는 보통 Tag, Index 또는 Set, Offset으로 나뉜다.

메모리 주소 구조TagIndex/SetOffset블록 식별캐시 라인 선택블록 바이트
필드 역할 비트 수 결정 요소
Tag 같은 캐시 라인을 공유하는 블록 구분 전체 - Index - Offset
Index 캐시 라인 또는 집합 선택 log2(캐시 라인 수)
Offset 블록 안의 특정 바이트 위치 log2(블록 크기)

하나의 라인으로 고정하는 직접 사상

직접 사상(Direct Mapping)에서는 메모리 블록마다 대응 가능한 캐시 라인이 정확히 하나다. 주소의 Index 비트가 그 라인을 직접 가리킨다.

캐시 라인 번호 = 메모리 블록 번호 mod 캐시 라인 수

8라인 캐시와 32블록 메모리를 예로 들면, 블록 0·8·16·24는 모두 라인 0으로 향한다.

캐시 라인메인 메모리 블록블록 0블록 1블록 2블록 7블록 8블록 9블록 16블록 24라인 0라인 1라인 2라인 7

라인을 고르는 과정은 단순하다. Index로 라인을 선택한 뒤, 그 라인에 기록된 Tag와 주소의 Tag를 비교한다.

캐시 라인 구조주소 분해아니오Tag (상위 비트)Index (중간 비트)Offset (하위 비트)ValidTag 필드Data 블록라인 선택Tag 비교일치?Cache HitCache Miss

구현은 간단하고 탐색도 빠르며 단일 비교기로 만들 수 있다. 반면, 서로 다른 블록이 같은 라인에 매핑되면 충돌이 발생한다. 이 때문에 적중률이 낮아질 수 있고, 연관성도 부족하다.

같은 라인으로 향하는 블록을 번갈아 읽는 경우에는 핑퐁 현상(Thrashing)이 나타난다.

블록 0 접근 → 캐시 적재
블록 8 접근 → 블록 0 축출, 블록 8 적재
블록 0 접근 → 블록 8 축출, 블록 0 적재 (반복)

이 접근 패턴에서는 매번 캐시 미스가 발생해 성능이 급격히 저하된다.

어느 라인에나 둘 수 있는 완전 연관 사상

완전 연관 사상(Fully Associative Mapping)은 메모리 블록을 캐시의 어느 라인에든 저장할 수 있게 한다. Index 필드는 없고, Tag는 전체 블록 주소가 된다. 특정 위치로의 강제 배치가 없으므로 충돌 미스를 최소화하지만, 요청 주소와 모든 라인의 Tag를 병렬로 비교해야 한다.

캐시 구조주소 분해아니오Tag (블록 주소)Offset라인 0: V, Tag, Data라인 1: V, Tag, Data라인 2: V, Tag, Data라인 n: V, Tag, Data병렬 비교기일치하는라인?Cache HitCache Miss

이 방식은 유연한 배치와 높은 적중률, 교체 정책의 자유도를 제공한다. 대신 CAM(Content-Addressable Memory)이 필요하며, 대규모 캐시에서는 탐색이 느려지고 비용과 전력 소모가 커질 수 있다. CAM은 일반적인 RAM과 달리 저장된 내용을 기준으로 검색하는 특수 메모리다.

집합 안에서 Way를 고르는 방식

집합 연관 사상(Set-Associative Mapping)은 직접 사상과 완전 연관 사상 사이에 놓인다. 캐시를 여러 집합(Set)으로 나누고, 메모리 블록은 하나의 특정 집합에만 대응시킨다. 다만 그 집합 안에서는 어느 라인에든 저장할 수 있다.

n-way 집합 연관 구조에서는 집합마다 n개의 라인(Way)을 두며, 2-way, 4-way, 8-way처럼 구성할 수 있다. 집합 수는 캐시 라인 수 / n이다.

2-way 집합 연관 캐시메모리 블록집합 3집합 2집합 1집합 0블록 0, 4, 8...블록 1, 5, 9...블록 2, 6, 10...블록 3, 7, 11...Way 0Way 1Way 0Way 1Way 0Way 1Way 0Way 1

Set Index로 집합을 먼저 선택하고, 선택된 집합의 Way에 들어 있는 Tag를 병렬 비교한다.

선택된 집합주소 분해아니오TagSet IndexOffset집합 선택Way 0: V, Tag, DataWay 1: V, Tag, DataWay 2: V, Tag, DataWay 3: V, Tag, Data병렬 Tag 비교일치?Cache HitCache Miss
n-way 장점 단점 적용 사례
2-way 직접 사상 대비 충돌 감소 2개 비교기 필요 임베디드 캐시
4-way 균형 잡힌 성능과 비용 4개 비교기, MUX 필요 L1 데이터 캐시
8-way 높은 적중률 복잡한 교체 로직 L2/L3 캐시
16-way 완전 연관에 근접 고비용, 높은 전력 대형 LLC

연관도는 적중률과 비용을 함께 바꾼다

직접 사상은 1-way 집합 연관의 특수한 경우다. 완전 연관 사상은 집합이 하나뿐인 집합 연관의 특수한 경우로 볼 수 있다.

직접 사상(1-way)집합 연관(n-way)완전 연관(모든 way)집합 = 라인Way = 1집합 = 라인/nWay = n집합 = 1Way = 라인
특성 직접 사상 집합 연관 (n-way) 완전 연관
블록 배치 1곳만 가능 n곳 가능 어디든 가능
Tag 비교 횟수 1회 n회 (병렬) 전체 라인 수
적중률 낮음 중간~높음 최고
하드웨어 복잡도 낮음 중간 높음
구현 비용 저렴 중간 고가
교체 정책 불필요 필요 (n개 중 선택) 필요
충돌 미스 많음 적음 최소

연관도가 커지면 적중률은 향상되지만, 개선 폭은 계속 동일하지 않다.

적중률 향상+10%+5%+2%+1%+0.5%1-way(직접)2-way4-way8-way16-way완전 연관

일반적으로 2-way에서 4-way로 전환할 때 적중률 개선이 크며, 8-way 이상에서는 개선 폭이 줄어든다.

캐시 계층에서의 선택

현대 CPU 캐시는 계층마다 다른 연관도를 사용한다.

CPU L1 Data L1 Instruction L2 L3
Intel Core 8-way 48KB 8-way 32KB 8-way 1.25MB 12-way 30MB
AMD Zen 4 8-way 32KB 8-way 32KB 8-way 1MB 16-way 32MB
Apple M3 8-way 64KB 6-way 128KB 16-way 4MB 완전연관 유사
ARM Cortex-A78 4-way 64KB 4-way 64KB 8-way 256KB 16-way 4MB

L1 캐시는 접근 속도를 우선하므로 상대적으로 낮은 연관도를 사용한다. L2/L3 캐시는 미스 페널티가 크기 때문에 높은 연관도를 적용한다.

캐시 레벨L1: 속도 우선4~8 wayL2: 균형8~16 wayL3: 적중률 우선12~16+ way작은 용량빠른 접근중간 용량중간 지연 용량높은 적중률

직접 사상은 단순한 하드웨어와 빠른 탐색을 제공하지만 충돌에 취약하다. 완전 연관 사상은 배치 자유도와 적중률이 높지만 비교 회로와 비용 부담이 크다. 집합 연관 사상은 이 둘 사이의 트레이드오프를 조절하며, 현대 CPU 캐시에서 널리 사용된다.

캐시메모리컴퓨터구조직접 사상집합 연관 사상완전 연관 사상