[CS] 캐시 메모리(Cache Memory)

2025. 4. 30. 12:34·Computer Science

메모리 계층 구조

서론

컴퓨터 시스템의 성능을 높이기 위해 다양한 방법이 연구되고 있으며, 그중 하나는 메모리 계층 구조를 효율적으로 구성하는 것이다. 특히 CPU와 메인 메모리 사이의 속도 차이를 완화하는 데 중요한 역할을 하는 구성 요소가 바로 캐시 메모리(Cache Memory)다. 캐시 메모리는 자주 사용하는 데이터를 빠르게 접근할 수 있도록 도와 전체 시스템의 처리 속도를 크게 향상시킨다. 그러나 캐시에 원하는 데이터가 없을 때 발생하는 캐시 미스(Cache Miss)는 오히려 성능 저하로 이어질 수 있다. 이 글에서는 캐시 메모리의 역할과 구조를 이해하고, 캐시 미스가 시스템 성능에 미치는 영향을 살펴보자.

캐시 메모리

캐시 메모리(SRAM)는 집적도가 낮아 많은 데이터를 담을 수는 없지만(수 MB 단위), 속도가 매우 빠르다. 반면 메인 메모리(DRAM)는 용량이 크지만 접근 속도가 느리다. 이 둘의 속도 차이를 줄이기 위해, CPU와 메인 메모리 사이에 캐시 메모리를 두어 재사용될 가능성이 높은 데이터를 저장하고, CPU가 빠르게 접근할 수 있도록 한다.

데이터를 현금에 비유하면 이해가 쉽다. 지갑(캐시 메모리)과 ATM기(메인 메모리)의 관계를 생각해보자. 우리가 매번 ATM에서 현금을 인출하기보다, 필요한 양만큼 미리 지갑에 현금을 넣어 다니면 시간을 절약할 수 있다. 이처럼 캐시 메모리는 자주 사용되는 데이터를 미리 저장해 두어 CPU가 빠르게 접근하도록 돕는다.

데이터 지역성(Locality)

캐시 메모리는 데이터 지역성(Locality)에 기반해 동작하며, 크게 세 가지 원리가 있다

  1. 시간 지역성(Temporal Locality)
    한 번 참조된 데이터는 가까운 미래에 다시 사용될 가능성이 높다. 예를 들어, 반복문 내에서 사용하는 변수처럼, 동일한 데이터가 여러 번 필요할 때 미리 준비해둔다.
  2. 공간 지역성(Spatial Locality)
    참조된 데이터 주변의 다른 데이터도 곧 사용될 가능성이 높다. 배열에서 연속된 인덱스를 순차적으로 접근하는 경우가 대표적이다.
  3. 순차 지역성(Sequential Locality)
    명령어가 메모리에 저장된 순서대로 실행되므로, 다음 명령어에 해당하는 코드가 곧 사용될 것이라는 예측이다.

캐시 히트(Hit)와 캐시 미스(Miss)

CPU가 데이터를 요청했을 때, 캐시 메모리에 해당 데이터가 있으면 캐시 히트(Cache Hit)라 부르고, 캐시에 없어서 메인 메모리에서 불러와야 하면 캐시 미스(Cache Miss)라 부른다.

캐시 미스의 세 가지 유형

  1. Compulsory miss (Cold miss)
    해당 메모리 주소를 처음 접근할 때 발생하는 미스다. 예를 들어 프로그램을 새로 실행하면 처음에는 캐시에 데이터가 없어 미스가 생긴다. 사전 프리페치(prefetch) 외에는 예방이 어려우며, 전체 실행 시간 대비 발생 빈도가 낮아 성능에 미치는 영향도 상대적으로 작다.
  2. Conflict miss
    캐시에 A와 B 데이터를 저장해야 하는데, 두 데이터가 같은 캐시 라인으로 매핑되어 발생하는 미스다. 비유하자면, 지갑에서 1000원 짜리와 5000원짜리를 주로 넣는 자리에 잠깐 1000원짜리를 다른데로 옮기고 5000원짜리만 있을때 1000원짜리를 사용하려고 습관대로 해당 자리를 찾게된다면 Conflict miss가 발생하게 된다.
  3. Capacity miss
    캐시 용량 자체가 부족해 발생하는 미스다. 주소 충돌과 무관하게, 저장 공간이 꽉 차 더 이상 데이터를 유지할 수 없을 때 생긴다. 캐시 크기를 늘리면 줄일 수 있지만, 용량 증가 시 접근 속도가 느려지고 전력 소비가 커지는 단점이 따른다.

'Computer Science' 카테고리의 다른 글

[CS] 아스키코드와 유니코드, EUC-KR과 UTF-8 차이  (0) 2025.05.14
[CS] 프로세스(Process)와 스레드(Thread)  (0) 2025.04.30
'Computer Science' 카테고리의 다른 글
  • [CS] 아스키코드와 유니코드, EUC-KR과 UTF-8 차이
  • [CS] 프로세스(Process)와 스레드(Thread)
돼지표
돼지표
https://github.com/wkdgns135
  • 돼지표
    돼지표 개발 스토리
    돼지표
  • 전체
    오늘
    어제
    • 분류 전체보기 (99)
      • C++ (58)
        • Algorithm (52)
      • Python (1)
      • Machine Learning (2)
      • Computer Graphics (4)
        • Curly Hair Simulation (2)
      • GPU Programming (11)
        • CUDA basic (7)
        • CUDA fluidsGL (4)
      • Unreal 5 (20)
        • Troubleshooting (4)
        • FPS Shooting (5)
        • Study (9)
        • EOS (1)
      • Computer Science (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    Fluid Simulation
    CS
    Rendering Pipeline
    unreal 5
    FPS
    수학
    CUDA
    그리디 알고리즘
    BFS
    자료 구조
    위상 정렬
    OpenGL
    dp
    아이작 맵 생성
    UE5
    그래프 탐색
    구현
    GPU Programming
    C++
    Algorithm
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
돼지표
[CS] 캐시 메모리(Cache Memory)
상단으로

티스토리툴바