[컴퓨터 구조] 캐시 메모리

xoey·2024년 10월 16일

컴퓨터 구조

목록 보기
3/6
post-thumbnail

서문

캐시 메모리는 컴퓨터 시스템의 메모리 계층 구조에서 가장 빠르고 효율적인 메모리로, 최상단에 위치한 고속 메모리이다. 캐시 메모리는 메인 메모리보다 크기가 훨씬 작고 가격이 비싸다. 하지만 그만큼 접근 속도가 매우 빠르며, 이 속도 차이를 활용해 CPU와 메인 메모리 간의 병목 현상을 줄일 수 있다.

캐시 메모리에서 중요한 개념은 데이터 지역성(Locality of Reference)이다. 이를 활용해 자주 사용될 가능성이 높은 데이터를 메인 메모리에서 미리 캐시로 불러와 저장함으로써, CPU가 메인 메모리에 직접 접근하지 않고 캐시에서 더 빠르게 데이터를 처리할 수 있게 한다.

1. 관련 용어

본격적으로 캐시 메모리에 대해 알아보기 전에, 관련 용어를 먼저 살펴보자.

1.1. Block

캐시 메모리와 메인 메모리 간 데이터를 주고 받는 단위를 Block 또는 Cache Line이라고 한다.

일반적으로 한 블록의 크기는 64바이트이다. 캐시는 메모리와 다르게 데이터를 한 번에 큰 단위로 가져오는데, 이는 데이터를 자주 사용하는 특성을 고려한 것이다. 즉, Spatial Locality(공간 지역성) 개념에 따라 메모리의 특정 위치에 있는 데이터를 참조할 때, 그 주변 데이터 역시 곧 사용될 가능성이 높기 때문에 한 번에 여러 바이트를 읽어온다.

1.2. Hit & Miss

  • Hit: CPU가 요청한 데이터가 캐시 안에 있는 경우
    • Hit rate: CPU가 요청한 데이터 중 캐시에 저장된 비율
    • Hit time: 캐시에서 데이터를 읽어오는 데 필요한 시간
  • Miss: 요청한 데이터가 캐시에 없을 때
    • Miss rate: CPU가 요청한 데이터 중 캐시에 저장되지 않은 비율 ( = 1 - Hit rate)
    • Miss penalty: Miss가 발생해 데이터를 block만큼 메인 메모리에서 캐시 메모리로 가져오는 데 필요한 시간

2. 작동 원리: 데이터 지역성

캐시 메모리의 핵심 원리는 데이터 지역성(Locality of Reference)이다. 이를 통해 메인 메모리에서 자주 사용될 데이터를 미리 캐시로 옮겨 놓고 CPU가 빠르게 접근할 수 있게 한다.

데이터 지역성은 크게 세 가지로 나뉜다:

  • 시간 지역성(Temporal Locality): 최근에 참조된 데이터는 곧 다시 참조될 가능성이 높다.
  • 공간 지역성(Spatial Locality): 배열이나 연속된 데이터처럼, 참조된 데이터 근처의 데이터가 곧 사용될 가능성이 높다.
  • 순차적 지역성(Sequential Locality): 명령어가 순차적으로 실행되는 경우, 메모리 상에서 인접한 명령어가 곧 사용될 가능성이 높다.

이 원리를 기반으로 CPU가 데이터를 요청하면, 캐시는 태그 메모리를 탐색해 해당 데이터가 캐시 안에 있는지 확인한다. 만약 해당 데이터가 캐시에 있다면 Hit이 발생하고, 그렇지 않으면 Miss가 발생해 메인 메모리에서 데이터를 불러온다.

Hit

CPU가 캐시에 주소 전송 > 태그 메모리 탐색 > 일치하는 태그 발견(Hit) > 블록 상태 갱신(필요한 경우) > 데이터 메모리에서 블록 추출 > 요청받은 데이터 선택 > 캐시가 CPU에 데이터 전송

Miss

CPU가 캐시에 주소 전송 > 태그 메모리 탐색 > 일치하는 태그 없음(Miss) > 주소를 메모리로 전송해 대응하는 블록을 캐시에 저장 > 요청받은 데이터 선택 > 캐시가 CPU에 데이터 전송

3. 구성

캐시 메모리는 CPU가 요청한 데이터를 찾기 위해 캐시 블록과 캐시 태그로 구성된다.

  • 캐시 블록: 데이터를 저장하는 단위
  • 캐시 태그: 해당 블록에 저장된 데이터가 무엇인지 식별하는 역할. 유효 비트(Valid Bit)가 포함되어 있어, 해당 캐시 블록에 유효한 데이터가 있는지 나타낸다.
  • 캐시 엔트리: 캐시 블록 + 캐시 태그

4. 사상 기법(Mapping Techniques)

캐시 메모리와 메인 메모리 간의 데이터를 주고받을 때, 데이터가 캐시의 어느 위치에 저장될지 결정하는 방법이다. 대표적으로 아래와 같이 세 가지 기법이 있다:

  • Direct Mapped Cache
    • 메모리의 각 블록은 캐시의 특정 블록에만 저장될 수 있다.
    • 매우 단순하지만, Conflict Miss가 발생할 가능성이 크다.
    • 메모리 블록 주소의 하위 비트가 캐시 블록을 결정하며, 상위 비트는 태그로 사용된다.

  • Fully Associative Cache
    • 메모리 블록이 캐시 내의 모든 블록에 저장될 수 있다.
    • 가장 유연한 방식이지만, Hit/Miss를 판단하기 위해 캐시의 모든 블록을 탐색해야 하므로 시간 복잡도가 크다.

  • N-Way Set Associative Cache
    • 캐시 블록이 여러 개의 Set으로 나뉘어 있다.
    • 각 메모리 블록은 특정 Set 내의 어느 블록에든 저장될 수 있다.
    • Direct Mapped와 Fully Associative의 절충안으로, 적당한 성능과 적당한 유연성을 제공한다.

5. 캐시의 쓰기 정책

캐시의 쓰기 정책은 CPU가 데이터를 캐시에 쓰는 방식을 설명하는 개념이다. CPU와 메인 메모리 간의 속도 차이를 줄이기 위해서, 쓰기 작업이 발생할 때 캐시에 어떻게 데이터를 저장할지와 메인 메모리와의 동기화가 중요한 문제로 다뤄진다.

캐시의 쓰기 정책에는 크게 두 가지 종류가 있다:

5.1. Write-through(직접 쓰기)

CPU가 캐시에 쓰는 동시에 메인 메모리에도 동일한 데이터를 즉시 쓰는 방식이다. 즉, 데이터가 캐시에 기록되면 바로 메인 메모리에도 동기화된다.

  • 장점: 메모리와 캐시가 항상 동기화 상태를 유지하므로, 캐시에서 데이터를 잃어버리더라도 메인 메모리에서 항상 최신 데이터를 사용할 수 있다.
  • 단점: 메인 메모리에도 매번 데이터를 써야하므로, 메모리 쓰기 시간이 느릴 경우 캐시의 빠른 성능이 제한될 수 있다.

성능 최적화를 위해서는 Write buffer를 사용하여 메인 메모리에 쓰는 시간을 단축할 수 있다. 즉, 데이터를 캐시에 기록한 후 바로 CPU가 작업을 계속할 수 있도록 하고, 메모리 쓰기는 백그라운드에서 처리하는 방식이다.

5.2. Write-back(지연 쓰기)

CPU가 캐시에만 데이터를 기록하고, 메인 메모리에는 나중에 업데이트 하는 방식이다. 캐시에서 데이터 블록이 교체될 때 메인 메모리에 한꺼번에 기록된다.

  • 장점: 메모리에 매번 쓰지 않기 때문에, 메모리 접근이 느릴 때도 캐시의 속도를 최대한 활용할 수 있다. 자주 수정되는 데이터는 캐시에만 기록되어 메모리 쓰기 횟수를 줄인다.
  • 단점: 캐시에 있는 데이터가 메모리와 다를 수 있으며, 캐시가 손실되면 메모리에도 최신 데이터가 반영되지 않을 수 있다. 또한 캐시와 메모리의 동기화를 수시로 확인해야 하는 추가적인 복잡성이 있다.

성능 최적화를 위해서는 Dirty bit를 사용해 캐시에 있는 수정된 데이터(Dirty Data)만 메모리에 쓸 수 있다. 즉, 데이터가 캐시에서 수정되었음을 표시해두고, 교체 시에만 메모리에 기록한다.

e.g. 캐시의 데이터가 수정되고 메인 메모리에 기록되지 않았을 경우 그 데이터 블록의 dirty bit를 1로 설정한다.

💁🏻‍♀️ Dirty Bit란?

Dirty bit는 일종의 메모라고 생각하면 쉽다. 예를 들어 아이패드에 필기를 하는 상황을 가정해보자. 만약 내가 어떤 페이지를 수정했다면 “이 페이지는 수정되었습니다.”라는 메모를 남긴다. 이제 이 메모는 “이 페이지는 수정되었고, 아직 다른 사람(메모리)에게 전달되지 않았다.”라고 알려주는 역할을 한다. 그리고 나중에 다른 사람이 그 필기를 복사할 때, 수정되지 않은 노트를 다시 복사하는 불필요한 작업을 줄일 수 있게 된다.

마치며

캐시 메모리는 CPU와 메인 메모리 사이의 병목 현상을 줄이기 위한 매우 중요한 장치다. 캐시의 성능은 데이터 지역성을 얼마나 효율적으로 활용하는지에 따라 크게 좌우된다. 캐시 메모리와 관련된 다양한 기법들은 메모리 접근 시간을 줄이기 위해 발전해왔으며, 이를 이해하면 컴퓨터 시스템의 성능을 최적화하는 데 중요한 개념을 잡을 수 있을 것이다.

최근에 다시 복습하면서, 캐시 메모리는 이후 운영체제에서도 중요한 개념으로 계속 등장한다는 것을 확실히 느꼈다. (운영체제 스터디 중에도 캐시 메모리와 관련된 질문이 자주 나왔을 정도로..) 오늘은 캐시 메모리의 기본 개념에 대해 간단히 다뤘지만, 앞으로 더 깊이 있는 지식을 쌓으면서 계속해서 추가할 예정이다.


Reference

profile
[Roman 8:18] consider that our present sufferings are not worth comparing with the glory that will be revealed in us.

0개의 댓글