Operation System Cache

아투·2026년 4월 6일

Operation System

목록 보기
7/22
post-thumbnail

1. 캐시의 개념 정립 및 하드웨어 기초

정의

  • CPU와 메인 메모리(DRAM) 간의 속도 차이를 완화하기 위해 자주 사용하는 데이터를 더 빠른 고속 임시 저장소(SRAM)로 저장하는 기술이다.

  • 참조 지역성 원리를 기반으로 데이터를 예측하여 캐시 히트율을 높이고 시스템 성능을 극대화한다.

DRAM VS SRAM 공통점과 차이점

  • 메모리 소자로서의 공통점

    • DRAM과 SRAM은 모두 전원 공급이 중단될 경우 저장된 데이터가 소멸하는 휘발성 메모리(Volatile Memory)라는 공통된 특성을 가진다. 또한 주소에 따라 데이터 접근 시간이 달라지지 않는 임의 접근(Random Access) 방식의 메모리 소자로 분류된다.
  • 구조적 차이와 집적도

    • DRAM은 하나의 트랜지스터와 하나의 커패서터로 구성되어 회로 구조가 단순하다. 이러한 단순성 덕분에 좁은 면적에 많은 데이터를 저장할 수 있는 고집적화가 가능하며 제조 비용이 상대적으로 저렴하다. 반면 SRAM은 하나의 데이터를 유지하기 위해 보통 6개의 트랜지스터를 사용하므로 구조가 복잡하고 집적도가 낮아 대용량 구현에 한계가 있다.
  • 동작 원리 및 속도의 차이

    • DRAM의 커패시터는 시간이 지남에 따라 전하가 방전되므로 데이터 유지를 위해 주기적으로 재기록하는 리프레시(Refresh) 동작이 필수적이다.
    • 이 과정에서 발생하는 대기 시간이 성능에 영향을 미친다. SRAM은 Flip-Flop 회로 방식을 사용하여 전원이 공급되는 동안 데이터가 안정적으로 유지되며, 리프레시 과정이 불필요하므로 DRAM보다 훨씬 빠른 데이터 처리 속도를 보장한다.
  • 활용 분야와 경제성

    • DRAM은 저렴한 비용으로 대용량 구성이 가능하여 컴퓨터 시스템의 주기억장치(RAM)로 널리 사용된다.
    • SRAM은 높은 단가와 낮은 집적도라는 단점이 있으나 속도가 매우 빠르기 때문에 연산 장치와 메모리 사이의 속도 격차를 줄이기 위한 캐시 메모리(Cache Memory)에 주로 활용된다.
  • 참고

    • 커패서터 (Capacitor)

      • DRAM 칩 내부에 있는 핵심 부품이며 수십억 개의 미세한 커패서터들이 촘촘하게 박혀있다.
      • 전기 신호에 의해 0과 1의 구분하는 역할을 하는 장치.
      • 전원을 끄면 전기가 다 빠져나가 데이터가 증발하는 휘발성 메모리이다.
    • 트랜지스터 (Transistor)

      • 트랜지스터는 커패시터의 전기 신호를 들어오게 하거나, 막아 전기신호를 제어하는 역할을 한다.
      • 메모리에는 수십억 개의 커패시터가 있다. 트랜지스터가 없다면 전기를 흘려보냈을 때 모든 커패시터에 다 들어가 버릴 것이다. 트랜지스터가 있기 때문에 필요한 영역만 제어할 수 있도록 선택적 제어가 가능한 것이다.
    • 순차 접근(Sequential Access)

      • 처음부터 순서대로 읽기에 위치별로 접근 속도가 다르다.
    • 임의 접근(Random Access)

      • 주소를 통해 즉시 접근하여 위치에 상관없이 속도가 같다.
      • 격자 구조로 배열된 메모리에서 트랜지스터는 각 저장소의 입구를 지키는 전자식 스위치 역할을 한다.
      • 특정 주소가 입력되면 앞선 데이터를 일일이 거치지 않고 해당 위치의 트랜지스터만 즉시 활성화하여 데이터에 직접 연결되므로, 저장된 위치와 상관없이 항상 동일하고 빠른 속도로 접근할 수 있는 임의 접근이 가능해진다.
      • 즉, 주소값(커패시터의 위치)만 알고 있으면 된다는 것이다.
    • Flip-Flop 회로 방식

      • SRAM의 핵심부품이며 플립플롭은 트랜지스터를 엮어 전원 공급 시 데이터 상태를 스스로 고정하는 회로이다.
      • 방전이 없어 리프레시가 불필요하며 즉각 대응이 가능하여 SRAM의 빠른 속도를 가능케 한다.

캐시 vs 레지스터

  • 개념적 위계와 물리적 위치

    • 레지스터와 캐시는 모두 데이터를 임시로 저장하는 고속 메모리 장치이나, 시스템 내에서의 계층적 위치는 서로 다르다.
    • 레지스터
      • CPU의 프로세서 코어 내부에 직접 통합되어 연산 장치와 물리적으로 가장 가까운 곳에 위치한다.
    • 캐시
      • CPU와 메인 메모리 사이에 존재하며, 프로세서 내부 혹은 별도의 칩 형태로 배치되어 완충 지대 역할을 수행한다.
  • 데이터의 성격 및 활용 목적

    • 레지스터
      • 현재 실행 중인 명령어와 그 연산에 즉시 필요한 피연산자, 상태값 등을 저장한다.
      • CPU가 산술 논리 연산을 수행하기 위해 반드시 거쳐야 하는 최상위 저장소이다.
    • 캐시
      • 주기억장치로부터 자주 참조되는 데이터의 복사본을 유지하여, CPU가 상대적으로 느린 RAM에 접근하는 빈도를 줄임으로써 전체적인 처리 속도를 향상하는 데 목적이 있다.
  • 속도 및 저장 용량의 차이

    • 레지스터
      • CPU 사이클과 동기화되어 작동하므로 현존하는 저장 장치 중 가장 빠른 속도를 자랑하지만, 그 용량은 수십에서 수백 바이트 정도로 매우 작은 공간이다.
    • 캐시
      • 레지스터보다 느리지만 주기억장치보다는 훨씬 빠르며, 수 메가바이트(MB) 수준의 상대적으로 넉넉한 저장 공간을 확보하여 데이터 활용의 효율성을 높인다.
  • 관리 주체 및 휘발성

    • 두 장치 모두 전원이 차단되면 데이터가 사라지는 휘발성 특성을 지닌다. 그러나 관리 방식에서 차이가 발생한다.

    • 레지스터

      • 컴파일러나 소프트웨어 설계자에 의해 엄격하게 제어된다.
    • 캐시

      • 운영체제와 하드웨어의 캐시 제어기에 의해 지역성 원리에 따라 자동적으로 관리된다.

메인 메모리 = 주기억장치 = RAM

  • 정의 및 역할

    • 메인 메모리는 컴퓨터에서 실행 중인 프로그램의 데이터와 명령어를 일시적으로 저장하는 공간이다.
    • CPU가 직접 접근하여 데이터를 읽고 쓸 수 있는 가장 큰 규모의 기억장치이며, 보조기억장치인 SSD나 HDD에 저장된 프로그램은 실행을 위해 반드시 메인 메모리로 로드되어야 한다.
    • 이러한 특성 때문에 시스템의 전반적인 멀티태스킹 성능과 처리 속도에 직접적인 영향을 미친다.
  • 기술적 특징 : 휘발성과 임의 접근

    • 주기억장치로 사용되는 RAM(Random Access Memory)은 전원 공급이 중단되면 저장된 데이터가 소멸하는 휘발성 메모리이다.
    • 또한 '임의 접근'이라는 명칭 그대로 데이터가 저장된 위치에 상관없이 동일한 속도로 접근할 수 있는 특성을 가진다.
    • 이는 물리적 회전이 필요한 HDD와 대조되는 지점으로, 현대 컴퓨팅의 고속 연산을 가능하게 하는 물리적 토대가 된다.
  • CPU 및 캐시와의 관계

    • CPU는 레지스터와 캐시에 찾는 데이터가 없을 경우 메인 메모리에서 데이터를 가져온다.
    • 이때 발생하는 속도 차이를 극복하기 위해 캐시 메모리가 중간에서 완충 역할을 수행한다.
    • 메인 메모리는 캐시보다 용량은 훨씬 크지만 속도는 느리며, 보조기억장치보다는 속도가 압도적으로 빠르지만 용량당 비용이 비싼 계층적 위치를 점하고 있다.
  • 운영체제의 관리 대상

    • 운영체제는 한정된 메인 메모리 자원을 효율적으로 사용하기 위해 메모리 관리 유닛(MMU)을 통해 가상 메모리 기법 등을 운용한다.
    • 실제 물리적 용량보다 큰 프로그램을 실행하거나 여러 프로세스 간의 메모리 영역을 격리하여 보호하는 등 시스템 안정성을 유지하는 핵심적인 관리 대상이 된다.

2. 캐시의 핵심 작동 원리와 참조 국소성

참조 국소성(Locality of Reference)의 원리

  • 정의 및 메커니즘

    • 지역성(Locality)라고도 부른다. 현업에서는 편의상 지역성이라고 부르며, 편의상 지역성이라고 부르도록 하겠다.
    • 지역성의 원리란 CPU가 실행 중인 프로그램의 특정 주소 영역이나 데이터를 짧은 시간 내에 집중적으로 참조하는 특성을 의미한다.
    • 이는 프로그램이 메모리 전체 공간을 무작위로 사용하는 것이 아니라, 특정 시점에는 특정 범위의 데이터와 명령어만을 반복적으로 활용한다는 통계적 사실에 기반
      한다.
    • 캐시는 이러한 데이터 접근의 편중성을 이용하여 설계된 고속 저장 장치이다.
  • 데이터 예측의 근거

    • 캐시의 물리적 용량은 주기억장치에 비해 현저히 작으나, 지역성의 원리 덕분에 높은 효율을 유지한다.
    • 하드웨어와 운영체제는 이 원리를 바탕으로 가까운 미래에 사용될 가능성이 높은 데이터를 예측하여 캐시에 미리 적재한다.
    • 이러한 예측이 적중할수록 CPU가 느린 메모리에 접근하는 빈도가 줄어들어 시스템 전체의 연산 속도가 비약적으로 향상된다.
  • 성능 최적화와의 상관관계

    • 소프트웨어 공학 관점에서 지역성은 알고리즘의 효율성을 결정짓는 중요한 척도가 된다.
    • 데이터 접근 패턴이 지역성을 잘 따르도록 설계된 프로그램은 캐시 히트율이 높아져 실행 속도가 빨라진다.
    • 따라서 대규모 트래픽을 처리하는 백엔드 시스템이나 복잡한 연산을 수행하는 라이브러리 설계 시, 메모리상의 데이터 배치와 접근 순서를 지역성에 최적화하는 과정은 필수적인 작업이다.

시간 지역성

  • 정의 및 기본 원리

    • 시간 지역성이란 최근에 참조된 데이터나 명령어 주소가 가까운 미래에 다시 참조될 가능성이 높다는 특성을 의미한다.
    • 프로그램이 실행되는 과정에서 특정 데이터에 한 번 접근하면, 해당 데이터는 짧은 시간 내에 여러 번 반복하여 사용되는 경향을 보인다.
    • 캐시는 이러한 특성을 활용하여 한 번 읽어 들인 데이터를 즉시 삭제하지 않고 일정 기간 유지함으로써 성능을 최적화한다.
  • 발생 사례 및 메커니즘

    • 대표적인 사례로 반복문 내의 루프 제어 변수나 함수 내에서 빈번하게 사용되는 지역 변수를 들 수 있다.
    • for 문이나 while 문이 실행될 때 조건식을 검사하는 변수나 반복되는 연산에 사용되는 값은 매번 메모리에서 가져오는 대신 캐시에 상주시켜 처리 속도를 극대화한다.
    • 또한 스택(Stack) 영역에 저장된 매개변수나 복귀 주소 역시 짧은 시간 안에 집중적으로 참조되므로 시간 지역성의 영향을 강하게 받는다.
  • 캐시 관리 전략과의 관계

    • 시간 지역성을 극대화하기 위해 캐시 교체 알고리즘은 주로 LRU(Least Recently Used) 방식을 채택한다.
    • 이는 가장 오랫동안 사용되지 않은 데이터를 교체 대상으로 삼고, 최근에 사용된 데이터는 캐시에 계속 남겨두는 전략이다.
    • 이러한 관리 기법은 시간 지역성이 뚜렷한 실제 소프트웨어 동작 환경에서 캐시 히트율을 높이는 데 결정적인 역할을 수행한다.

공간 지역성

  • 정의 및 핵심 원리

    • 공간 지역성이란 특정 메모리 주소에 접근이 이루어졌을 때, 해당 주소와 인접한 위치에 있는 데이터들이 가까운 미래에 다시 참조될 가능성이 높다는 특성을 의미한다.
    • 프로그램은 대개 데이터를 순차적으로 처리하거나 연관된 데이터를 가까운 주소 평면에 배치하는 경향이 있으므로, 한 지점의 데이터를 읽으면 그 주변 데이터도 곧 필요하게 될 확률이 높다.
  • 주요 발생 사례

    • 가장 대표적인 사례는 배열(Array)의 순차적 탐색이다.
    • 배열은 메모리상에 연속적인 공간을 점유하므로, 첫 번째 요소를 읽은 후에는 바로 다음 인덱스의 데이터를 읽을 확률이 매우 높다.
    • 또한 프로그램의 실행 명령어가 메모리에 순차적으로 저장되어 하나씩 실행되는 구조 역시 공간 지역성이 강하게 나타나는 지점이다.
  • 캐시 설계에 미치는 영향

    • 하드웨어는 공간 지역성을 효율적으로 활용하기 위해 메모리에서 데이터를 가져올 때 단일 바이트가 아닌 캐시 라인(Cache Line)이라 불리는 일정 크기의 블록 단위로 묶어서 가져온다.
    • CPU가 요청한 데이터뿐만 아니라 그 인접 데이터까지 한꺼번에 캐시에 적재함으로써, 다음 데이터를 읽을 때 메모리까지 다시 접근하지 않고 캐시에서 즉시 처리할 수 있도록 설계한다.

3. 캐시 메모리의 계층 구조

캐시 종류

L1 캐시

  • 위치 및 물리적 특성

    • L1(Level 1) 캐시는 CPU 프로세서 코어 내부에 직접 통합되어 있는 최상위 계층의 캐시 메모리이다.
    • 연산 장치와 가장 가까운 거리에 위치하므로 데이터 전송 지연이 거의 발생하지 않으며, CPU의 클록 속도와 동기화되어 작동하여 현존하는 캐시 계층 중 가장 빠른 속도를 보장한다.
  • 구조적 분리 및 효율성

    • 현대의 프로세서는 처리 효율을 높이기 위해 L1 캐시를 명령어 캐시(I-Cache)와 데이터 캐시(D-Cache)로 물리적으로 분리하여 구성하는 Harvard 구조를 채택한다.
    • 이러한 구조는 명령어를 읽어오는 과정과 데이터를 읽고 쓰는 과정이 서로 간섭하지 않도록 방지하여 파이프라인 처리를 가속화한다.
  • 용량 및 설계상의 제약

    • 고속 동작을 위해 회로가 매우 복잡한 SRAM 소자를 사용하므로 칩 면적을 많이 차지하고 전력 소모가 크다.
    • 따라서 용량은 통상적으로 코어당 수십 KB에서 128KB 내외로 매우 작게 제한된다. 용량을 무리하게 키울 경우 접근 속도가 느려지는 역효과가 발생하므로, 필요한 핵심 데이터만을 선별하여 유지하는 능력이 성능의 관건이 된다.
  • 참고 사항

    • 클록 (Clock)

      • 모든 부품이 발맞춰 움직이게 하는 전기적 리듬(심장 박동).
      • CPU가 명령어를 처리하는 최소 시간 단위.
      • GHz 숫자가 높을수록 초당 처리 능력이 좋지만, 그만큼 열과 전기도 많이 먹는다.
    • Harvard 구조

      • CPU가 일을 더 빨리 처리하기 위해 명령어와 재료가 다니는 길을 아예 따로 만들어버린 설계 방식이다.
      • 폰 노이만 구조 (기존 방식)
        • 명령어와 데이터가 하나의 통로(Bus)를 공유.
      • 하버드 구조 (개선된 방식)
        • 명령어 전용 길과 데이터 전용 길을 물리적으로 분리.
      • 현대 CPU는 전체적으로는 폰 노이만 구조를 따르지만, CPU 코어 바로 옆(L1 캐시 레벨)만큼은 하버드 구조를 채택한다.
      • CPU가 워낙 빠르다 보니, 명령어 하나 가져오고 데이터 하나 가져오는 그 짧은 찰나의 기다림조차 엄청난 성능 손실로 이어지기 때문이다. L1 캐시에서 길을 나눠두면 CPU의 연산 속도를 100% 활용할 수 있다.
    • I-Cache (Instruction)

      • CPU가 실행해야 할 명령어들만 따로 모아두는 영역.
      • 더해라, 이동해라, 비교해라 같은 프로그램의 로직(코드 그 자체)이 담긴다.
      • 보통 한 번 읽어오면 내용이 변하지 않는다(Read-Only 성격이 강함).
      • CPU는 여기서 다음에 무슨 일을 해야 할지 매우 빠른 속도로 읽어간다.
    • D-Cache (Data)

      • 그 명령어가 처리할 실제 값들만 따로 모아두는 영역.
      • 숫자 10, 사용자 이름 "Alice", 이미지의 픽셀 값 같은 실제 정보들이 담긴다.
      • 계산 결과에 따라 값이 수시로 바뀐다(Read/Write가 빈번함).
      • CPU가 연산을 한 결과물을 다시 담아두기도 한다.

L2 캐시

  • 계층적 위치 및 보완적 역할

    • L2(Level 2) 캐시는 L1 캐시와 L3 캐시(또는 주기억장치) 사이에 위치하는 중간 단계의 고속 저장소이다.
    • L1 캐시의 용량 한계로 인해 발생하는 캐시 미스를 일차적으로 방어하며, CPU가 느린 외부 메모리에 직접 접근하는 빈도를 줄여 연산의 흐름이 끊기지 않도록 보조한다.
  • 용량과 속도의 균형점

    • L1 캐시보다 구조가 단순하여 더 큰 저장 공간을 확보하기 용이하다.
    • 일반적으로 코어당 수백 KB에서 수 MB 수준의 용량을 갖추고 있으며, 속도는 L1 캐시보다 상대적으로 느리지만 주기억장치보다는 훨씬 빠르게 동작한다.
    • 이러한 특성은 제조 비용과 성능 사이의 최적의 타협점을 제공한다.
  • 전용 자원으로서의 독립성

    • 현대의 멀티코어 프로세서에서 L2 캐시는 대개 각 코어마다 독립적으로 할당된 전용(Private) 공간으로 설계된다.
    • 각 코어가 독자적인 L2 캐시를 보유함으로써 다른 코어와의 데이터 경합이나 간섭 없이 자신의 작업에 필요한 데이터를 신속하게 처리할 수 있는 환경을 조성한다.

L3 캐시

  • 위치 및 공유 구조

    • L3(Level 3) 캐시는 대개 CPU 패키지 내부에 위치하며, 모든 코어가 공통으로 접근할 수 있도록 설계된 공유 캐시(Shared Cache)이다.
    • 개별 코어에 전속된 L1, L2 캐시와 달리, 프로세서 전체가 자원을 나누어 사용하는 범용적인 저장소 역할을 수행한다.
  • 용량 중심의 설계 전략

    • L1, L2 캐시보다 물리적인 거리는 멀지만 훨씬 큰 저장 용량을 확보하는 데 집중한다. 현대적인 고성능 프로세서에서는 수십 MB에서 수백 MB에 이르는 대용량 L3 캐시를 탑재하기도 한다.
    • 이는 자주 사용되는 방대한 양의 데이터를 CPU 가까이에 머물게 하여, 느린 주기억장치로의 호출을 원천적으로 차단하는 거대한 방어벽이 된다.
  • 코어 간 데이터 일관성 및 효율성

    • 멀티코어 환경에서 여러 코어가 동일한 데이터를 필요로 할 때, L3 캐시는 데이터를 공유하는 허브 역할을 한다.
    • 각 코어가 동일한 정보를 각각의 전용 캐시에 중복해서 담는 낭비를 줄이고, 코어 간 데이터 전송 속도를 높여 병렬 처리 성능을 최적화한다.
  • 최종 보루로서의 가치

    • CPU가 데이터를 찾을 때 거치는 마지막 캐시 단계이므로, 여기서 데이터가 발견되지 않으면(Cache Miss) 시스템은 훨씬 느린 주기억장치(RAM)에 접근해야만 한다.
    • 따라서 L3 캐시의 용량과 적중률은 대규모 트래픽이나 복잡한 데이터베이스 연산이 수반되는 비즈니스 애플리케이션의 성능을 결정짓는 핵심 지표가 된다.

캐시의 구조

  • 캐시 라인(Cache Line)

    • 캐시 메모리에 데이터를 저장하는 최소 단위이자 블록을 의미한다.

    • 주기억장치에서 데이터를 가져올 때 단일 바이트가 아닌 일정 크기(통상 64바이트)의 묶음으로 관리하며, 이는 공간 지역성을 극대화하여 데이터 전송 효율을 높이는 역할을 수행한다.

    • 캐시 라인 구성 요소 : 태그 필드(Tag Field)

      • 캐시에 저장된 데이터가 메인 메모리의 실제 주소 중 어느 부분에 해당하는지 식별하기 위한 정보이다.

      • CPU가 특정 주소의 데이터를 요청하면 캐시 제어기는 해당 주소 정보와 캐시 내의 태그를 대조하여 일치 여부를 판단함으로써 캐시 히트 여부를 결정한다.

      • 실제 하드웨어에서의 3단계 과정

        • 1단계 (Index)

          • CPU가 요청한 주소의 뒷부분을 보고 캐시의 몇 번째 줄(Line)에 데이터가 있을지 바로 찾아간다.
        • 2단계 (Tag)

          • 그 줄에 저장된 태그(메모리 주소의 앞부분)와 CPU가 준 주소의 앞부분을 서로 비교한다.
        • 3단계 (Valid Bit)

          • 태그가 맞더라도 그 데이터가 진짜 유효한지(쓰레기 값이 아닌지) 한 번 더 체크한다.
    • 캐시 라인 구성 요소 : 상태 비트(Status Bits)

      • 데이터의 상태와 유효성을 관리하기 위한 제어 정보이다.
      • 해당 라인에 유효한 데이터가 적재되어 있는지를 나타내는 유효 비트(Valid Bit)와, 캐시 내 데이터가 수정되어 주기억장치의 내용과 일치하지 않음을 기록하는 더티 비트(Dirty Bit) 등이 포함된다.
    • 캐시 라인 구성 요소 : 데이터 필드(Data Field)

      • 실제 연산에 사용될 명령어와 데이터 값이 저장되는 실질적인 영역이다.
      • 태그와 상태 비트를 통해 검증된 실제 정보의 본체이며, 프로세서의 설계 방식에 따라 최적화된 형태로 배치되어 CPU에 신속하게 공급된다.

4. 캐시 동작 메커니즘 및 매핑 전략

캐시의 동작 방식

  • 데이터 요청 및 검색 과정

    • CPU가 특정 메모리 주소의 데이터를 필요로 할 때, 가장 먼저 하드웨어 기반의 캐시 제어기를 통해 해당 데이터가 캐시에 존재하는지 확인한다.
    • 이때 캐시 구조 내의 태그 필드를 검색하여 요청한 주소와 일치하는 데이터 블록이 있는지 대조하는 과정을 거친다.
  • 캐시 히트(Cache Hit) 시나리오

    • 요청한 데이터가 캐시 메모리에 존재할 경우 이를 캐시 히트라고 정의한다.
    • 이 상태에서는 외부 메모리 버스를 점유하지 않고 캐시에서 즉시 데이터를 읽어 CPU 레지스터로 전달한다.
    • 이는 메모리 접근 지연 시간을 최소화하여 프로세서가 대기 시간 없이 연산을 지속할 수 있게 하는 이상적인 상태이다.
  • 캐시 미스(Cache Miss) 처리 과정

    • 캐시에 데이터가 존재하지 않는 경우를 캐시 미스라고 하며, 이때 시스템은 하위 계층(L2, L3 캐시 또는 메인 메모리)으로 접근하여 데이터를 찾아야 한다.
    • 필요한 데이터를 찾으면 해당 데이터를 CPU에 전달함과 동시에, 공간 지역성을 고려하여 인접한 데이터 블록 전체를 캐시 라인 단위로 복사하여 캐시에 적재한다.
  • 데이터 쓰기 및 일관성 관리

    • 데이터를 읽는 것뿐만 아니라 수정할 때의 처리 방식도 중요하다.
    • 데이터 수정 시 즉시 메인 메모리에 반영하는 쓰기 직통(Write-through) 방식과, 일단 캐시에만 기록하고 나중에 캐시 라인이 교체될 때 한꺼번에 메모리에 쓰는 쓰기 되돌리기(Write-back) 방식을 사용하여 데이터의 최신 상태와 일관성을 유지한다.

캐시 히트와 캐시 미스

캐시 히트

  • 정의 및 발생 상황

    • CPU가 참조하고자 하는 메모리 주소의 데이터가 캐시 메모리에 이미 존재하여 즉시 사용할 수 있는 상태를 의미한다.
    • 이는 캐시 제어기가 요청된 주소와 일치하는 태그를 캐시 라인에서 성공적으로 찾아냈을 때 발생한다.
  • 시스템에 미치는 영향

    • 캐시 히트가 발생하면 CPU는 수 나노초(ns) 이내에 필요한 데이터를 확보할 수 있다.
    • 이는 외부 메모리 버스를 통한 데이터 전송 과정을 생략하게 하므로 프로세서의 연산 중단을 막고 전체적인 애플리케이션의 응답 속도를 비약적으로 향상시킨다.

캐시 미스

  • 정의 및 패널티

    • CPU가 요청한 데이터가 캐시에 존재하지 않아 하위 계층인 주기억장치나 보조기억장치로부터 데이터를 직접 가져와야 하는 상태를 의미한다.
    • 이때 발생하는 지연 시간을 캐시 미스 패널티(Miss Penalty)라고 하며, 히트 시에 비해 수십 배에서 수백 배 이상의 시간이 소요되어 시스템 성능 저하의 주된 원인이 된다.
  • 캐시 미스의 세 가지 유형(3C)

    • 데이터에 처음 접근할 때 발생하는 강제 미스(Compulsory Miss), 캐시의 전체 용량이 부족하여 발생하는 용량 미스(Capacity Miss), 그리고 매핑 경로가 겹쳐서 발생하는 충돌 미스(Conflict Miss)로 분류된다.
    • 운영체제와 하드웨어는 이러한 미스 유형을 최소화하기 위해 정교한 데이터 교체 및 배치 전략을 구사한다.

캐싱 라인

직접 매핑

  • 구조 및 배치 원리

    • 직접 매핑(Direct Mapping)은 메인 메모리의 특정 주소를 캐시의 정해진 위치에만 할당하는 가장 단순한 방식이다.
    • 메모리 주소를 캐시 크기로 나눈 나머지 값을 인덱스로 사용하여 데이터를 배치하므로, 특정 메모리 블록이 들어갈 수 있는 캐시 라인은 오직 하나로 고정된다.
  • 장점 및 단점

    • 설계가 단순하고 주소를 대조하는 과정이 빨라 구현 비용이 저렴하다는 장점이 있다.
    • 그러나 서로 다른 메모리 주소가 동일한 캐시 인덱스를 공유할 경우, 데이터가 빈번하게 교체되는 충돌 미스(Conflict Miss)가 집중적으로 발생하여 성능이 저하되는 치명적인 단점이 존재한다.

연관 매핑

  • 구조 및 배치 원리

    • 연관 매핑(Fully Associative Mapping)은 직접 매핑의 경직성을 해결하기 위해 고안된 방식으로, 메인 메모리의 데이터를 캐시 내의 어느 라인에나 자유롭게 저장할 수 있는 구조이다.
    • 비어 있는 캐시 라인이 있다면 어디든 데이터를 적재할 수 있으므로 공간 활용도가 매우 높다.
  • 장점 및 단점

    • 특정 인덱스에 데이터가 몰리는 현상이 없으므로 충돌 미스가 발생하지 않는다는 것이 가장 큰 장점이다.
    • 하지만 CPU가 특정 데이터를 찾기 위해 캐시의 모든 라인을 순차적으로 검색해야 하므로 검색 시간이 길어지고, 이를 병렬로 처리하기 위한 하드웨어 설계 비용이 매우 높다는 단점이 있다.

세트 연관 매핑

  • 구조 및 배치 원리

    • 세트 연관 매핑(Set Associative Mapping)은 직접 매핑의 신속성과 연관 매핑의 유연성을 결합한 절충안이다.
    • 캐시를 여러 개의 세트(Set)로 나누고, 특정 메모리 주소는 지정된 세트에만 들어갈 수 있게 하되 해당 세트 내에서는 어느 라인에나 자유롭게 배치될 수 있도록 설계한다.
  • 실전적 가치

    • 현대의 대부분의 프로세서가 채택하고 있는 방식이다.
    • 세트 내의 라인 수(N-way)를 조절함으로써 검색 성능과 미스 발생률 사이의 최적의 균형을 찾을 수 있다.
    • 직접 매핑보다 충돌 미스는 적고, 연관 매핑보다 하드웨어 복잡도와 검색 비용을 낮출 수 있어 가장 효율적인 캐시 관리 전략으로 평가받는다.

5. 캐시 성능 평가 및 실전 활용 사례

캐시의 성능

  • 히트율(Hit Ratio)과 미스율(Miss Ratio)

    • 캐시의 성능을 평가하는 가장 기본적인 척도는 히트율이다.
    • 이는 전체 메모리 참조 횟수 대비 캐시에서 데이터를 성공적으로 찾은 횟수의 비율을 의미한다.
    • 반대로 데이터를 찾지 못한 비율인 미스율은 1에서 히트율을 뺀 값으로 계산된다.
    • 일반적으로 서버급 프로세서의 L1 캐시는 90% 이상의 높은 히트율을 유지하도록 설계된다.
  • 지연 시간(Latency)과 대역폭(Bandwidth)

    • 지연 시간은 CPU가 데이터 요청을 보낸 후 실제 데이터를 받기까지 걸리는 시간을 의미하며, 캐시 계층이 상위일수록 짧아진다.
    • 대역폭은 단위 시간당 전송 가능한 데이터의 양을 뜻한다.
    • 고성능 시스템일수록 낮은 지연 시간과 높은 대역폭을 동시에 확보하여 데이터 병목 현상을 최소화하는 것이 성능의 핵심이다.

캐시 성능 측정

  • 평균 메모리 접근 시간(AMAT)

    • 시스템 전체의 메모리 성능을 종합적으로 나타내는 지표로 AMAT(Average Memory Access Time)를 사용한다. 계산식은 다음과 같다.
    • AMAT = Hit Time + (Miss Rate x Miss Penalty)
    • 여기서 히트 시간은 캐시 접근 시간을, 미스 패널티는 하위 메모리 계층에서 데이터를 가져오는 데 소요되는 추가 시간을 의미한다.
    • 이 식은 미스율을 낮추는 것이 전체 성능 향상에 얼마나 결정적인지 수학적으로 증명한다.
  • 성능 측정 도구 및 프로파일링

    • 실무에서는 하드웨어 성능 카운터(Hardware Performance Counters)를 활용하여 실제 운영 중인 서비스의 캐시 적중률을 측정한다.
    • 리눅스 환경의 perf와 같은 도구를 사용하면 L1-dcache-loads나 LLC-load-misses 같은 세부 지표를 분석할 수 있다.
    • 이를 통해 특정 코드 구간에서 발생하는 캐시 미스를 파악하고 소프트웨어 구조를 개선하는 최적화 작업을 수행한다.

캐시 활용 예시

CPU의 캐시 메모리

  • 하드웨어 성능 가속의 핵심
    • 프로세서와 주기억장치 사이의 속도 격차를 해소하기 위해 칩 내부에 탑재하는 초고속 저장소이다.
    • 연산에 필요한 데이터와 명령어를 미리 가져다 놓음으로써 CPU가 메모리 응답을 기다리느라 유휴 상태에 빠지는 것을 방지하고 전체 시스템의 처리량을 극대화한다.

CDN

  • 글로벌 서비스의 지리적 한계 극복
    • 콘텐츠 전송 네트워크(Content Delivery Network)는 전 세계 곳곳에 분산된 서버에 콘텐츠 복사본을 저장하는 기술이다.
    • 사용자가 요청을 보낼 때 원본 서버가 아닌 물리적으로 가장 가까운 캐시 서버가 응답하게 함으로써 네트워크 지연 시간을 획기적으로 단축하고 원본 서버의 트래픽 부하를 분산한다.

웹 캐시

  • 네트워크 대역폭 절감 및 응답 속도 향상
    • 사용자의 브라우저나 중간 경로의 프록시 서버에 웹 페이지 리소스를 임시 저장하는 방식이다.
    • 한 번 방문한 사이트의 이미지나 스크립트 파일을 로컬에 보관해 두었다가 재방문 시 서버 요청 없이 즉시 불러옴으로써 데이터 전송량을 줄이고 사용자에게 빠른 로딩 속도를 제공한다.

데이터베이스의 캐싱 계층

  • 정의 및 도입 배경

    • 데이터베이스는 영속성을 위해 데이터를 디스크에 저장하므로 입출력 속도에 물리적인 한계가 존재한다.
    • 서비스 규모가 커짐에 따라 발생하는 DB 병목 현상을 해결하기 위해, 상대적으로 속도가 압도적으로 빠른 메모리 기반의 캐시 계층을 DB 전면에 배치하여 조회 성능을 가속화한다.
  • 조회 전략: Look-aside (Lazy Loading)

    • 애플리케이션이 데이터를 찾을 때 먼저 캐시를 검색하고, 데이터가 없는 경우(Cache Miss)에만 실제 DB에서 데이터를 읽어와 캐시에 적재하는 방식이다.
    • DB에 대한 직접적인 부하를 효과적으로 분산하며, 캐시 서버에 장애가 발생하더라도 서비스가 완전히 중단되지 않는 안정성을 제공한다.
  • 데이터 일관성 및 만료 정책

    • 캐시는 원본 데이터인 DB의 복사본이므로 두 데이터 사이의 일관성을 유지하는 것이 핵심 과제이다.
    • 이를 위해 데이터가 수정될 때 캐시를 무효화하거나, 데이터의 유효 기간인 TTL(Time To Live)을 설정하여 일정 시간이 지나면 자동으로 캐시를 갱신하도록 관리한다.
  • 비즈니스 활용 가치

    • Redis나 Memcached와 같은 고성능 인메모리 저장소를 활용하여 대규모 트래픽 환경에서도 안정적인 응답 속도를 유지한다.
    • 이는 결제 시스템의 실시간 상태 확인, 사용자 세션 유지, 랭킹 시스템 등 데이터의 빠른 조회가 서비스 품질과 직결되는 영역에서 중추적인 역할을 수행한다.

6. 캐시 교체 알고리즘 (Cache Replacement Policy)

개요 및 필요성

  • 한정된 자원의 효율적 관리

    • 캐시 메모리는 주기억장치에 비해 속도는 압도적으로 빠르나 제조 비용이 비싸고 용량이 매우 제한적이다.
    • 프로그램이 실행됨에 따라 캐시 공간은 금방 가득 차게 되며, 새로운 데이터를 가져오기 위해서는 기존에 적재된 데이터 중 일부를 삭제하여 빈 공간을 확보하는 과정이 필수적으로 발생한다.
  • 캐시 적중률(Hit Rate)의 최적화

    • 어떤 데이터를 삭제하고 어떤 데이터를 남길 것인가에 대한 결정은 시스템 성능에 직접적인 영향을 미친다.
    • 교체 알고리즘의 궁극적인 목표는 가까운 미래에 참조될 가능성이 가장 적은 데이터를 정확히 예측하여 제거함으로써, 캐시 미스를 최소화하고 히트율을 극대화하는 데 있다.
  • 지역성 원리의 논리적 구현

    • 효율적인 교체 전략은 앞서 살펴본 시간 지역성과 공간 지역성을 소프트웨어적 혹은 하드웨어적 로직으로 구현한 결과물이다.
    • 과거의 데이터 접근 패턴을 분석하여 미래의 요구를 예측하는 일련의 규칙을 수립함으로써, 불필요한 데이터 이동을 줄이고 연산 장치의 대기 시간을 단축시킨다.
  • 시스템 복잡도와 성능의 균형

    • 완벽한 예측 알고리즘은 이론적으로 존재할 수 있으나, 이를 계산하기 위한 오버헤드가 너무 크면 오히려 시스템 성능을 저해할 수 있다.
    • 따라서 현대의 운영체제와 하드웨어는 계산 복잡도는 낮으면서도 실제 사용 패턴에서 높은 적중률을 보이는 최적의 알고리즘을 선택하여 운용한다.

주요 알고리즘 종류

  • LRU (Least Recently Used)

    • 동작 원리 및 특성
      • 가장 오랫동안 참조되지 않은 데이터를 교체 대상으로 선정하는 방식이다.
      • 최근에 사용된 데이터가 가까운 미래에 다시 사용될 가능성이 높다는 시간 지역성의 원리를 가장 충실히 반영한 알고리즘이다.
    • 실무적 위상
      • 구현 복잡도 대비 적중률이 매우 우수하여 운영체제의 페이지 교체 알고리즘이나 데이터베이스 캐시 등 현대 컴퓨팅 시스템에서 가장 표준적으로 채택되는 방식이다.
  • LFU (Least Frequently Used)

    • 동작 원리 및 특성
      • 참조된 횟수가 가장 적은 데이터를 우선적으로 교체한다.
      • 데이터의 개별적인 인기도나 누적 사용 빈도를 기준으로 중요도를 판단하며, 장기적인 관점에서 데이터의 가치를 평가하는 데 유리한 특성을 가진다.
    • 한계점
      • 과거에만 집중적으로 사용되고 현재는 쓰이지 않는 데이터가 캐시를 계속 점유하는 현상이 발생할 수 있다.
      • 또한 모든 데이터의 참조 횟수를 관리해야 하므로 추가적인 메모리 오버헤드가 수반된다.
  • FIFO (First-In, First-Out)

    • 동작 원리 및 특성
      • 캐시에 가장 먼저 들어온 데이터를 순서대로 먼저 내보내는 방식이다.
      • 데이터의 사용 빈도나 최근 접근 여부와 상관없이 오직 적재된 시간 순서만을 고려하며, 큐(Queue) 구조를 통해 매우 간단하게 구현할 수 있다.
    • 성능적 특징
      • 지역성을 전혀 고려하지 않으므로 실제 환경에서 적중률이 낮게 나타나는 경향이 있다.
      • 특히 캐시 용량이 늘어나도 미스율이 오히려 증가하는 벨레이디의 모순(Belady's Anomaly) 현상이 발생할 수 있어 고성능 시스템에서는 제한적으로 사용된다.

7. 캐시 일관성과 쓰기 정책

캐시 일관성 (Cache Coherence)

  • 정의 및 발생 배경

    • 멀티코어 프로세서 환경에서 각 코어는 독립적인 전용 캐시를 보유한다.
    • 여러 코어가 주기억장치의 동일한 주소에 있는 데이터를 각자의 캐시에 복사하여 사용할 때, 한 코어에서 데이터를 수정하더라도 다른 코어의 캐시나 메인 메모리에는 반영되지 않아 데이터의 불일치가 발생하는 문제가 생긴다.
    • 이를 해결하여 모든 코어가 항상 최신의 동일한 데이터를 참조하도록 보장하는 원리를 캐시 일관성이라고 한다.
  • 해결 메커니즘: 스누핑(Snooping)

    • 주소 버스를 통해 흐르는 모든 캐시 컨트롤러의 신호를 감시하는 방식이다.
    • 특정 코어가 자신의 캐시에 있는 데이터를 수정할 때 버스에 이 신호를 전송하면, 동일한 데이터를 가진 다른 코어들은 이를 감지하여 자신의 캐시 데이터를 무효화하거나 갱신함으로써 일관성을 유지한다.
    • 대표적으로 MESI 프로토콜이 이 방식을 기반으로 동작한다.

상세 쓰기 정책 (Write Policy)

  • Write-through (즉시 쓰기)

    • 동작 원리 및 장점
      • 데이터를 캐시에 쓸 때 주기억장치(RAM)에도 즉시 동시에 기록하는 방식이다.
      • 캐시와 메모리의 내용이 항상 일치하므로 데이터의 일관성을 완벽하게 보장할 수 있으며, 캐시 미스가 발생하여 데이터를 교체할 때 메모리에 별도로 기록할 필요가 없어 구조가 단순하다.
    • 단점 및 한계
      • 쓰기 연산이 발생할 때마다 상대적으로 속도가 느린 주기억장치에 접근해야 하므로 시스템 전체의 쓰기 성능이 저하된다.
      • 잦은 메모리 버스 점유는 프로세서의 연산 속도를 늦추는 병목 현상의 원인이 된다.
  • Write-back (나중에 쓰기)

    • 동작 원리 및 장점
      • 데이터를 쓸 때 우선 캐시에만 기록하고, 해당 캐시 블록이 새로운 데이터로 교체될 때 비로소 수정된 내용을 주기억장치에 반영하는 방식이다.
      • 동일한 데이터에 대한 반복적인 쓰기 작업을 메모리 접근 없이 캐시 내에서 처리할 수 있어 시스템의 전체적인 대역폭 효율과 처리 속도가 매우 뛰어나다.
    • 단점 및 관리 방식
      • 전원 차단이나 시스템 오류 발생 시 캐시에만 머물던 수정 데이터가 소멸할 위험이 있으며, 메모리와 캐시 간의 일관성을 유지하기 위한 로직이 복잡하다.
      • 이를 관리하기 위해 데이터의 수정 여부를 표시하는 더티 비트(Dirty Bit)를 활용하며, 현대의 고성능 CPU는 대부분 이 방식을 채택하여 성능을 최적화한다.

0개의 댓글