[CS Study] OS - Cache Memory

Frye 'de Bacon·2023년 11월 14일
0

Computer Science(CS)

목록 보기
14/40

캐시 메모리(Cache memory)

개요

CPU의 속도에 비해 메모리의 속도는 느리다. 그리고 두 장치의 속도 차로 인해 병목 현상이 발생하게 된다. 이를 방지하기 위해 사용하는 것이 바로 캐시 메모리이다.
캐시 메모리는 메모리와 CPU 사이에 위치하여 CPU가 자주 사용하는 데이터를 저장함으로써 CPU가 메모리에 접근하는 횟수를 줄임으로써 성능을 향상시킨다.
일반적으로 메모리 계층에서 가장 빠른 속도로 CPU에 버금갈 만큼 속도가 빠르지만 매우 비싸며, 따라서 용량이 적은 편이다.

적중과 실패

CPU에서 메모리에 접근하기 전, 먼서 캐시 메모리에 현재 원하는 데이터가 있는지 여부를 확인한다. 이때 필요한 데이터가 있는 경우를 적중(Hit), 없는 경우를 실패(Miss)라고 하며, 요청한 데이터를 캐시 메모리에서 찾을 확률을 적중률(Hit ratio)이라고 한다.

적중률 = 캐시 메모리의 적중 횟수 / 전체 메모리의 참조 횟수

CPU에서 데이터를 가져올 때는 캐시 메모리 > 메모리 > 보조 기억 장치 순으로 접근하게 되는데,

  • 캐시 적중 시 : 캐시 메모리의 데이터를 CPU 레지스터에 복사
  • 캐시 실패/메모리 적중 : 메모리의 데이터를 캐시 메모리에 복사하고, 캐시 메모리에 복사된 내용을 CPU 레지스터에 복사
  • 캐시, 메모리 실패 : 보조 기억 장치에서 필요한 데이터를 메모리에 복사하고, 메모리에 복사된 내용을 캐시 메모리에 복사, 다시 캐시 메모리에 복사된 데이터를 CPU 레지스터에 복사

와 같이 적중 여부에 따라 달리 동작하게 된다.

캐시의 종류

일반적으로 CPU는 이러한 캐시 메모리를 2~3개 정도 사용하며 순서에 따라 L1, L2, L3 등과 같이 구별한다(L은 Level을 의미한다). 각 캐시 메모리는 속도와 크기 등에 따라 구별되며, 레벨이 낮은 순으로 접근하게 된다.

  1. L1 cache memory
    일반적으로 CPU 칩 내에 내장되어 있으며 데이터의 사용 및 참조 시 가장 먼저 사용된다. 8~64KB 정도의 용량을 가지고 있으며, 여기서 원하는 데이터를 찾지 못할 경우 L2 캐시 메모리를 탐색하게 된다.
    L1 캐시 메모리의 경우 속도를 위해 text 영역을 다루는 IC(Instruction Cache)와 그 외의 영역을 다루는 DC(Data Cache)로 나누어진다.
  2. L2 cache memory
    기본적인 용도와 역할은 L1과 비슷하지만 속도는 그보다 느리다. 일반적으로 64KB~4MB 정도의 용량을 가지고 있으며 CPU 회로판에 별도의 칩으로 내장된다.
  3. L3 cache memory
    마찬가지로 작동 원리 자체는 동일하며, 멀티 코어 시스템에서 사용되는 메모리이다. 보통은 L1/L2 캐시 정도까지만 CPU 성능에 직접적인 영향을 미치기 때문에 L3 캐시는 크게 신경 쓰지 않는 경우가 많으며, CPU가 아닌 메인보드에 내장되는 것이 일반적이다.

캐시의 전송 단위

구분내용
워드(word)CPU의 기본 처리 단위로서, 블록/라인을 구성하는 기본 단위
블록(block)메모리를 기준으로 잡은 캐시와의 전송 단위
캐시 라인과 크기가 동일하며, 여러 개의 워드로 구성됨
캐시 라인(cache-line)캐시 관점에서의 캐시-메모리 간 전송 단위
메모리 블록과 동일한 크기
여러 개의 캐시 라인으로 이어져 있으며 각 라인은 여러 개의 워드로 구성됨

캐시의 쓰기

CPU가 캐시 메모리에 데이터 쓰기 작업을 하게 되면, 캐시의 일관성을 유지하기 위해 메인 메모리 또는 보조 기억 장치 등의 저장소에도 데이터 쓰기 작업을 진행해 주어야 한다. 이때 메모리 쓰기 정책은 크게 두 가지로 나눌 수 있다.

  1. Write-Through
    캐시 메모리에 데이터가 쓰이는 시점에 데이터를 메인 메모리에도 저장하는 정책, 즉 캐시 메모리와 실제 메모리 저장소 모두에 데이터를 업데이트하는 정책이다.

    구분내용
    장점캐시와 메모리에 업데이트를 동시에 하므로 캐시 일관성을 유지할 수 있어 안정적
    단점데이터에 대한 쓰기를 요청할 때 마다 항상 메인 메모리에 접근해야 하므로 캐시에 의한 접근 시간의 개선 효과가 없어지게 됨
    (이를 방지하기 위해 Write buffer를 추가하여 사용
  2. Write-Back
    우선 캐시 메모리에만 데이터를 업데이트하여 사용하다가 캐시 메모리가 새로운 데이터 블록으로 교체될 때 메인 메모리의 데이터를 업데이트하는 정책이다.

    구분내용
    장점Write-through에 비해 처리 속도가 훨씬 빠름
    단점캐시 일관성이 유지되기 어려워 종종 캐시와 메모리의 값이 서로 다른 경우가 발생할 수 있음


캐시의 지역성(Cache locality)

지역성(Locality)

캐시가 효율적으로 동작하기 위해서는 앞서 언급한 캐시의 적중률(Hit-rate)을 극대화해야 하며, 이를 위해서는 캐시에 저장할 데이터가 지역성(Locality)을 가져야 한다.
지역성이란 데이터의 접근이 시간적 혹은 공간적으로 가깝게 일어나는 것을 의미하며, 이때 프로그램이 모든 코드나 데이터에 대해 균등하게 접귾지 않는다는 특성이 있다는 것을 전제로 한다.
즉, 지역성이란 메모리 내의 정보 중 어느 한 순간에 특정한 부분을 집중적으로 참조하는 특성을 말한다. 이는 크게 두 가지로 구분할 수 있다.

시간 지역성(Temporal Locality)

  • 특정 데이터에 대해 접근이 이루어지면, 가까운 미래에 또 다시 데이터에 접근할 가능성이 높다.
  • 메모리상의 동일 주소에 대하여 여러 차례의 읽기 작업을 수행할 경우 상대적으로 작은 크기의 캐시를 사용해도 효율성을 꾀할 수 있다.
  • for, while문과 같은 반복문을 예로 들 수 있다.

공간 지역성(Spatial Locality)

  • 특정 데이터와 가까운 주소가 다시 참조될 가능성이 높다.
  • CPU 캐시나 디스크 캐시는 한 메모리 주소에 접근할 때 그 주소뿐 아니라 해당 블록을 전부 캐시에 가져오므로, 이와 인접한 데이터에 접근할 때는 효율성이 크게 향상된다.
  • 배열을 예로 들 수 있다.


캐시 메모리의 주소 저장 방식(Mapping process)

캐시 메모리는 메인 메모리에 비해 크기가 매우 작기 때문에 메인 메모리와 1:1로 매칭하는 것은 불가능하다. 또한 캐시가 아무리 CPU에 가깝게 위치하더라도, 데이터가 캐시 내의 어느 곳에 저장되어 있는지 찾기가 어려워 모든 데이터를 순회해야 한다면 캐시의 장점이 사라지게 된다.
따라서, 캐시에 데이터를 저장할 때 이를 쉽게 찾을 수 있도록 특정 자료 구조를 사용하여 묶음으로 저장하며, 이를 캐싱 라인(Caching Line)이라고 한다. 빈번하게 사용되는 데이터의 주소들이 흩어져 있기 때문에 캐시에 저장하는 데이터에는 데이터의 주소 등을 기록해둔 태그를 달아둘 필요가 있는데, 이러한 태그들의 묶음을 의미하는 것이다.
간단히 캐시 메모리에 주소를 저장하는 방식을 말하는 것으로 이해해도 무방하며, 일반적으로 세 가지 매핑 방식으로 구분할 수 있다.

직접 매핑(Direct mapping)

  • 메인 메모리를 일정한 크기의 블록으로 나누어 각각의 블록을 캐시의 정해진 위치에 저장하는 방식이다.
  • 가장 간단한 방법으로 구현이 쉽다.
  • 적중률이 낮아질 수 있으며, 동일 캐시 메모리에 할당된 여러 데이터를 사용할 경우 충돌이 발생한다.

연관 매핑(Fully associative mapping)

  • 순서와 무관하게 캐시 메모리의 빈 공간에 마음대로 주소를 저장하는 방식이다.
  • 저장은 매우 간단하나 원하는 데이터를 찾기 위해 모든 태그를 병렬적으로 검사해야 하므로 복잡하고 비용이 높아진다.
  • 거의 사용되지 않는 방식이다.

세트 연관 매핑(Set associative mapping)

  • 직접 매핑과 연관 매핑의 장점을 결합한 방식으로, 빈 공간에 마음대로 주소를 저장하되 미리 정해 둔 특정한 행에만 저장하는 방식이다.
  • 직접 매핑 방식에 비해 검색 속도는 느리지만 저장이 빠르고, 연관 매핑 방식에 비해 저장은 느리지만 검색이 빠르다.
  • 현재 주로 사용되는 방식이다.


참고 자료

profile
AI, NLP, Data analysis로 나아가고자 하는 개발자 지망생

0개의 댓글