컴퓨터 시스템 : CSAPP 6장 정리 - 6.3 메모리 계층 구조

6.3 메모리 계층 구조 (The Memory Hierarchy)

6.1절과 6.2절에서 저장 기술과 프로그램의 지역성에 대해 살펴봤다. 중요한 사실은 다음과 같다:

  • 저장 기술: 다양한 저장장치는 접근 시간, 비용, 용량이 매우 다르다. 빠른 저장장치는 느리고 싼 저장장치보다 비싸고 용량이 작다. CPU와 메인 메모리 간 속도 차이는 점점 벌어지고 있다.
  • 컴퓨터 소프트웨어: 잘 작성된 프로그램은 좋은 지역성을 보인다​.

이 두 특성이 서로 보완적으로 작용하여, 현대 시스템은 메모리 계층구조(memory hierarchy)라는 방식을 통해 메모리를 구성한다. 메모리 계층 구조는 빠르고 작은 저장장치가 느리고 큰 저장장치를 캐시(cache)하는 구조로 되어 있다​.

계층 구조를 따라 내려갈수록 저장장치는 더 크고, 더 느리고, 더 저렴해진다:

  • L0: CPU 레지스터 (가장 빠름, 가장 작음)
  • L1/L2/L3: SRAM 기반 캐시 메모리
  • L4: DRAM 기반 메인 메모리
  • L5: 로컬 디스크 저장장치
  • L6: 네트워크를 통한 원격 디스크(예: AFS, NFS, 웹 서버 파일)​.

6.3.1 메모리 계층에서의 캐싱 (Caching in the Memory Hierarchy)

캐시(cache)는 작은 고속 저장장치로, 큰 저속 저장장치에 있는 데이터 객체들을 임시로 저장하는 역할을 한다. 이 과정을 캐싱(caching)이라 부른다​.

메모리 계층의 기본 아이디어는 다음과 같다:

  • 계층 k에 있는 작은 고속 저장장치는, 계층 k+1에 있는 큰 저속 저장장치의 데이터를 일부 복사해 저장한다.
  • 예를 들어:
    • CPU 레지스터는 L1 캐시에서 데이터를 가져오고,
    • L1 캐시는 L2 캐시를 캐싱하며,
    • L2 캐시는 L3 캐시를 캐싱하고,
    • L3 캐시는 메인 메모리를 캐싱하고,
    • 메인 메모리는 디스크를 캐싱하고,
    • 디스크는 원격 서버 파일을 캐싱한다​.

캐싱의 기본 원리:

메모리 계층구조에서 캐싱의 기본 원리

  • 계층 k+1의 저장소는 연속적인 블록(block) 단위로 나뉜다.
  • 계층 k는 이 블록들 중 일부를 복사해 저장한다.
  • 블록 단위로 데이터를 이동시키며, 블록 크기는 계층 간에 다를 수 있다(예: 레지스터-캐시 간은 워드 단위, 디스크-메모리 간은 수백 KB 단위).
  • 데이터를 찾을 때 먼저 캐시를 조회한다. 데이터가 캐시에 있으면 캐시 히트(hit), 없으면 캐시 미스(miss) 발생​.

캐시 적중 (Cache Hits)

프로그램이 상위 레벨(k+1) 저장장치에 있는 데이터 객체 d를 필요로 할 때, 먼저 레벨 k(캐시)에 해당 데이터가 있는지 찾는다. 만약 d가 캐시에 존재하면 이를 캐시 적중(hit)이라 부른다. 이 경우 프로그램은 빠른 속도로 d를 읽어올 수 있으며, 더 느린 k+1 레벨 접근을 피할 수 있다​.


캐시 미스 (Cache Misses)

반대로, 레벨 k에 d가 없으면 캐시 미스(miss)가 발생한다. 미스가 발생하면, 레벨 k 캐시는 레벨 k+1 저장장치로부터 블록 전체를 가져와야 한다. 이 과정에서 기존에 캐시에 있던 블록 하나를 덮어쓸 수 있다(이를 교체(evict)라 한다)​.


캐시 미스의 종류

캐시 미스는 종류별로 나눌 수 있다:

  • 컴펄서리 미스(Compulsory Miss, Cold Miss)
    캐시가 비어 있거나, 데이터가 처음 참조될 때 발생한다. 초기 단계에서 주로 발생하며, 이후에는 덜 나타난다.
  • 용량 미스(Capacity Miss)
    캐시가 데이터 전체를 담기에 충분히 크지 않을 때 발생한다. 캐시에 필요한 블록이 너무 많아서 일부를 교체해야 하는 상황이다.
  • 교체 미스(Conflict Miss)
    (특히 직접 사상 캐시에서) 서로 다른 메모리 블록들이 같은 캐시 블록에 매핑될 때 발생한다. 이로 인해 빈번한 교체가 일어난다​.

캐시 관리 (Cache Management)

캐시는 블록을 관리하기 위해 몇 가지 정책을 사용한다:

  • 배치 정책(Placement Policy)
    새로 가져온 블록을 캐시 내 어디에 배치할지 결정한다. 상위 수준 캐시에서는 모든 위치에 자유롭게 저장할 수 있지만, 하드웨어 캐시에서는 제한적인 방식(예: 직접 사상, 집합-연관 사상)을 사용한다.
  • 교체 정책(Replacement Policy)
    캐시가 가득 찼을 때 어떤 블록을 제거할지 결정한다. 대표적인 예는 다음과 같다:
    • 랜덤(Random): 무작위로 블록을 선택하여 교체.
    • 최적(Optimal): 가장 나중에 사용될 블록을 교체(이론적 최선).
    • 최소 최근 사용(LRU, Least Recently Used): 가장 오래전에 사용된 블록을 교체.
  • 쓰기 정책(Write Policy)
    캐시에 쓰기 연산이 발생했을 때 어떻게 처리할지를 정한다:
    • Write-Through: 데이터를 캐시와 하위 레벨 모두에 동시에 기록한다.
    • Write-Back: 캐시에만 기록하고, 블록이 교체될 때 하위 레벨에 기록한다​.

6.3.2 메모리 계층 개념 요약 (Summary of Memory Hierarchy Concepts)

현대 컴퓨터 시스템에서의 다양한 캐싱 기법

메모리 계층구조는 캐싱(caching) 원리에 기반해 작동한다.
이 구조가 효과적인 이유는 크게 두 가지다:

  • 느린 저장장치가 빠른 저장장치보다 훨씬 저렴하다.
  • 프로그램은 일반적으로 좋은 지역성을 보인다.

시간적 지역성 활용 (Exploiting Temporal Locality)

  • 프로그램이 특정 데이터 객체를 참조한 후, 가까운 미래에 동일 객체를 여러 번 참조할 가능성이 높다.
  • 데이터 객체가 첫 번째 미스(miss) 후 캐시에 복사되면, 이후 여러 번 히트(hit)하여 빠른 접근이 가능하다.
  • 캐시가 하위 저장장치보다 빠르므로, 이후 참조는 훨씬 짧은 시간에 처리할 수 있다​.

공간적 지역성 활용 (Exploiting Spatial Locality)

  • 메모리 블록은 여러 데이터 객체를 포함한다.
  • 한 블록을 복사한 후, 그 안에 있는 다른 객체들도 참조될 가능성이 높다.
  • 따라서 한 번의 블록 복사 비용이 이후 여러 참조에 의해 분산되어 상쇄된다​.

캐시의 보편성 (Ubiquity of Caches)

  • 현대 시스템에서는 캐시가 어디에나 존재한다:
    • CPU 칩 내부
    • 운영체제의 메모리 관리
    • 분산 파일 시스템
    • 웹 브라우저와 웹 프록시 서버
  • 하드웨어와 소프트웨어 조합으로 캐시가 구축되고 관리된다​.