포스트

[Computer Architecture] Cache Memory

캐시 메모리(Cache Memory)


  • 캐시 메모리는 속도가 빠른 장치와 느린 장치 사이의 속도 차이로 인한 병목 현상을 줄이기 위한 메모리이다.
    • CPU 코어와 메모리 사이의 병목 현상 완화
    • 웹 브라우저 캐시 파일: 하드디스크와 웹페이지 사이의 병목 현상을 완화
  • CPU가 주기억장치에서 데이터를 읽어올 때, 자주 사용하는 데이터를 캐시 메모리에 저장한다. 이후에는 주기억장치가 아닌 캐시 메모리에서 데이터를 먼저 가져와 속도를 향상시킨다. 캐시 메모리는 속도가 빠르지만 용량이 적고 비용이 비싸다.

캐시 메모리 계층


  • CPU에는 L1, L2, L3 캐시 메모리가 있으며, 이는 속도와 크기에 따라 분류된다. 일반적으로 L1 캐시부터 먼저 사용된다.
  • CPU에서 가장 빠르게 접근하는 캐시 메모리인 L1 캐시가 데이터를 찾지 못하는 경우, 캐시 메모리 계층 구조에서 두 번째로 빠른 L2 캐시로 데이터 액세스가 이동한다.
  • L2 캐시는 L1 캐시보다 약간 느리지만 여전히 빠른 속도로 데이터를 검색할 수 있다. 만약 L2 캐시에도 데이터가 존재하지 않는 경우, 이후에는 L3 캐시 또는 주 메모리(RAM)로 데이터 액세스가 이동하게 된다.
  • L3 캐시는 L1 및 L2 캐시보다 상대적으로 느린 속도를 가지지만, 여전히 주 메모리보다는 훨씬 빠른 액세스 시간을 제공한다.
    • L1 캐시: CPU 내부에 존재, 가장 빠름
    • L2 캐시: CPU와 RAM 사이에 존재
    • L3 캐시: 보통 메인보드에 존재
  • 듀얼 코어 프로세서의 경우, 각 코어마다 독립된 L1 캐시 메모리를 가지고, 두 코어가 공유하는 L2 캐시 메모리가 내장되어 있다.
  • 예를 들어, L1 캐시가 128KB인 경우, 64KB는 명령어를 처리하기 직전의 명령어를 임시 저장하고, 나머지 64KB는 실행 후 명령어를 임시 저장한다. 이를 I-Cache와 D-Cache로 나누어 사용한다.
    • 캐시 메모리에는 주로 두 가지 유형이 있다:
      1. I-cache (Instruction Cache): 프로그램의 명령어를 저장하는 캐시 메모리이다. CPU는 프로그램을 실행할 때 필요한 명령어를 미리 읽어와 I-cache에 저장하여 실행 속도를 향상시킨다.
      2. D-cache (Data Cache): 프로그램이 사용하는 데이터를 저장하는 캐시 메모리이다. CPU가 프로그램을 실행하는 동안 데이터를 읽거나 쓸 때 사용된다. 주로 프로그램의 작업에 필요한 데이터를 빠르게 액세스하기 위해 사용된다.
        • 이 두 가지 캐시 메모리는 각각의 목적에 맞게 최적화되어 있으며, CPU의 성능을 향상시키는 데 중요한 역할을 한다.

SRAM


  • 캐시 메모리 크기가 작은 이유 중 하나는 SRAM 가격이 매우 비싸기 때문이다. SRAM은 Static Random Access Memory의 약자로, 고속 메모리 디바이스에서 사용되며 데이터를 지속적으로 유지할 수 있는 휘발성 메모리이다. SRAM은 CPU의 캐시 메모리에서 주로 사용된다.
  • SRAM은 고속의 정적 메모리로, 안정성과 빠른 액세스 속도를 제공하지만, 제조 과정이 복잡하고 소자가 복잡하기 때문에 가격이 높다. 따라서 캐시 메모리의 크기를 증가시키면 SRAM 비용이 증가하게 되므로, 캐시 메모리의 크기를 적절하게 유지하여 비용을 관리하는 것이 일반적이다.
  • 따라서 캐시 메모리는 주로 사용되는 데이터 또는 명령어를 저장하는 데 중점을 두고 최적화되며, 일반적으로 작은 용량으로 제공된다. 작은 용량의 캐시 메모리도 프로그램 실행의 성능 향상에 중요한 역할을 한다.

디스크 캐시


  • 주기억장치(RAM)와 보조기억장치(하드디스크) 사이에 존재하는 캐시이다.

캐시 메모리 작동 원리


  • 캐시 메모리는 시간 지역성과 공간 지역성의 원리에 따라 작동한다.
  • Cache Hit: CPU가 요청한 데이터가 캐시에 있을 때
  • Cache Miss: 요청한 데이터가 캐시에 없어서 DRAM에서 가져올 때

시간 지역성

  • 한번 참조된 데이터는 잠시 후 또 참조될 가능성이 높다.
  • 예를 들어, for나 while 같은 반복문에 사용하는 조건 변수가 그렇다.

공간 지역성

  • 연속적으로 접근하는 데이터, 예를 들어 A[0], A[1]과 같이 참조된 데이터 근처에 있는 데이터가 잠시 후 또 사용될 가능성이 높다.
  • 이러한 참조 지역성(공간)의 원리를 활용하여, 캐시에는 요청된 데이터뿐만 아니라, 인접한 데이터도 함께 저장된다.

캐시 미스의 종류


  • 캐시 미스는 CPU가 요청한 데이터가 캐시에 없는 경우 발생한다. 주요 캐시 미스의 종류는 다음과 같다:
    1. Cold Miss (Compulsory Miss)
    • 해당 메모리 주소를 처음 접근할 때 발생하는 미스이다.
      1. Conflict Miss
    • 두 데이터가 같은 캐시 메모리 주소에 할당되어 있을 때 발생하는 미스이다. 주로 Direct Mapped Cache에서 많이 발생한다.
    • 예를 들어, 항상 핸드폰과 열쇠를 오른쪽 주머니에 넣고 다니다가 핸드폰을 가방에 넣은 후, 오른쪽 주머니에서 핸드폰을 찾을 때의 상황과 유사하다.
      1. Capacity Miss
    • 캐시 메모리의 공간이 부족해서 발생하는 미스이다. Conflict Miss가 주소 할당 문제라면, Capacity Miss는 공간 문제로 인해 발생한다.
    • 캐시 크기를 늘려 문제를 해결하려 하면, 캐시 접근 속도가 느려지고 전력 소모가 증가하는 단점이 있다.

캐시의 구조 및 작동 방식


  • 이 세 가지 캐시 구조는 각각의 장단점을 가지고 있으며, 용도에 따라 적절하게 선택된다.

Direct Mapped Cache

  • 가장 기본적인 캐시 구조로, 여러 DRAM 주소가 하나의 캐시 메모리 주소에 대응되는 다대일 방식이다.

이미지

이미지

  • 메모리 공간이 32개(00000~11111)이고, 캐시 메모리 공간은 8개(000~111)인 상황을 예로 들 수 있다.
  • 예: 00000, 01000, 10000, 11000 주소는 000 캐시 메모리 주소에 매핑된다.
  • 캐시는 인덱스 필드, 태그 필드, 데이터 필드로 구성된다.
  • 단순하고 빠르지만, Conflict Miss가 발생하기 쉽다. 같은 색의 데이터를 동시에 사용해야 할 때 이 문제가 발생한다.
1
2
3
4
캐시 메모리의 경우, 일반적으로 공간의 크기가 2의 거듭제곱으로 표현된다. 
따라서 캐시 메모리 공간이 8개일 경우, 보통 주소 체계에서 3개의 비트로 표현된다. 
그렇기 때문에 캐시 메모리 공간이 8개일 경우 주소 체계는 000부터 111까지 총 8개의 조합이 가능하다. 
이에 따라 주소를 표현할 때는 3비트를 사용하여 000, 001, 010, 011, 100, 101, 110, 111의 조합으로 표현된다.

Fully Associative Cache

  • 비어있는 캐시 메모리가 있으면 어디든지 주소를 저장하는 방식이다.
  • 저장은 간단하지만, 검색이 어려워진다.
  • 특정 캐시 Set 내 모든 블록을 검색해야 하므로 CAM이라는 특수한 메모리 구조를 사용한다. CAM은 매우 비싸다.

Set Associative Cache

  • Direct Mapped Cache와 Fully Associative Cache의 장점을 결합한 방식이다.
  • 특정 행을 지정하고, 그 행 안의 어떤 열이든 비어있을 때 저장하는 방식이다.
  • Direct Mapped Cache에 비해 검색 속도는 느리지만, 저장이 빠르다. Fully Associative Cache에 비해 저장은 느리지만, 검색이 빠르다.
  • 실용적이고 중간형 방식으로 많이 사용된다.


참고 자료


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.