Post

[CA] Chapter 11: Exploiting Memory Hierarchy(2) - Direct Mapped Cache

[CA] Chapter 11: Exploiting Memory Hierarchy(2) - Direct Mapped Cache

Computer Architecture 공부

Direct Mapped Cache - Index


alt text

📚Index: cache block number
= (Memory Addr) mod (Number of Cache Blocks) (나머지 값)

  • 캐시 블록 수가 8개(2³)라면, 메모리 주소의 하위 3비트가 인덱스
    • 예: 주소 00001, 01001, 10001, 11001은 모두 인덱스 001(1번)에 매핑

Direct Mapped Cache - Tag


alt text

같은 캐시 블록에 여러 메모리 주소가 매핑된다면?

  • 예: 00001, 01001, 10001, 11001 모두 캐시 블록 1번에 매핑
    → 캐시에 있는 데이터가 어떤 메모리 주소의 것인지 알 수 없음!

메모리 주소를 Tag와 Index로 나눈다!!

📚Tag: 같은 캐시 블록에 매핑되는 서로 다른 메모리 주소들을 구별하는 역할

  • 메모리 주소를 Tag(상위 비트)와 Index(하위 비트)로 분할 alt text

  • Valid bit는 해당 캐시 블록에 유효한 데이터가 있는지 표시

  • 프로세서 시작 시 캐시는 빈 상태
  • 캐시 블록이 비어있는지, 유효한 데이터가 있는지 구별 필요
  • Valid bit = 0: 비어있음 또는 무효한 데이터
  • Valid bit = 1: 유효한 데이터 존재, 태그 비교 필요

data 검색 과정:
alt text

Cache 접근 시나리오


초기 상태

alt text

  • 모든 Cache block의 Valid bit = N (무효)
  • Tag와 Data는 비어있음
  • 8 blocks (Index 000~111)
Step 1: Data 22 (10110) request

alt text

처리 과정:

  1. index 110 → 캐시 블록 6번 확인
  2. Valid bit = N → 무효한 데이터
  3. Cache Miss! 메모리에서 데이터 가져오기
  4. 블록 6에 저장: Valid=Y, Tag=10, Data=Memory(10110)
Step 2: Data 26 (11010) request

alt text

처리 과정:

  1. index 010 → 캐시 블록 2번 확인
  2. Valid bit = N → 무효한 데이터
  3. Cache Miss! 메모리에서 데이터 가져오기
  4. 블록 2에 저장: Valid=Y, Tag=11, Data=Memory(11010)
Step 3: Data 22 (10110) request again

처리 과정:

  1. index 110 → 캐시 블록 6번 확인
  2. Valid bit = Y유효한 데이터 있음
  3. Tag 비교: 저장된 태그(10) = 요청한 태그(10) ✓
  4. Cache Hit! 캐시에서 데이터 직접 반환
Step 4: Data 26 (11010) request again

처리 과정:

  1. index 010 → 캐시 블록 2번 확인
  2. Valid bit = Y유효한 데이터 있음
  3. Tag 비교: 저장된 태그(11) = 요청한 태그(11) ✓
  4. Cache Hit! 캐시에서 데이터 직접 반환

Cache Conflict

alt text

데이터 교체 발생!

  • Step f: 주소 18 (10010)을 로드할 때, Index 010의 기존 데이터 (주소 26의 데이터)가 교체됨!
  • 주소 26을 다시 요청하면 캐시 미스 발생

자주 사용되는 데이터들이 같은 인덱스에 매핑되면 지속적인 데이터 교체로 인해 캐시 성능이 크게 저하됨!

This post is licensed under CC BY 4.0 by the author.