캐시 메모리

가오리·2022년 11월 12일
0

let me borrow your CS

목록 보기
9/25
post-thumbnail

캐시 메모리: Cache Memory

  • 속도가 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리 → bottleneck: 담을 수 있는 데이터의 양이 적은데 한꺼번에 많은 양의 데이터가 유입되면서 컴퓨터가 느려지는 현상
  • CPU가 주기억장치에서 저장된 데이터를 읽을 때 자주 사용하는 데이터를 캐시 메모리에 저장한다
  • 그 이후 같은 메모리를 사용할 때 캐시 메모리에 먼저 간다.
  • 빠른 대신 용량이 적고 비싸다

듀얼코어 이상의 프로세서의 캐시 메모리

→ 듀얼코어: CPU의 핵심인 Core를 2개 탑재한 것, 한꺼번에 여러 가지 업무를 처리해 내는데 탁월한 성능

  • 각 코어마다 독립된 L1 캐시 메모리를 가지고 두 코어가 공유하는 L2 캐시 메모리가 내장된다.
  • L1 캐시의 절반은 명령어를 처리하기 직전 명령어를 임시 저장, 나머지 절반은 실행 후 명령어를 임시 저장
  1. L1: CPU 내부에 존재, 프로세서와 가장 가까운 캐시, 속도를 위해 I-Cache, D-Cache로 나눈다
    • Instruction Cache: 메모리의 TEXT 영역 데이터를 다루는 캐시
    • Data Cache: TEXT 영역을 제외한 모든 데이터를 다루는 캐시
  2. L2: CPU와 RAM 사이에 존재, 용량이 큰 캐시, 크기를 위해 L1처럼 나누지 않음
  3. L3: 보통 메인보드에 존재, 멀티 코어 시스템에서 여러 코어가 공유하는 캐시

캐시 메모리의 작동 원리

  1. 시간 지역성: Temporal locality
    for, while 같은 반복문에서 사용하는 조건 변수처럼 한 번 참조된 데이터는 잠시 후 또 참조될 가능성이 높다
  2. 공간 지역성: Spatial locality
    A[0], A[1]과 같은 연속 접근 시 참조된 데이터 근처에 있는 데이터가 잠시 후 또 사용될 가능성이 높다
  • 캐시에 데이터 저장 시 참조 지역성을 최대한 활용하기 위해 해당 데이터 뿐만 아니라 옆 주소의 데이터도 같이 가져와 나중에 쓰일 것을 대비한다
    → 참조 지역성: 코드나 데이터 등이 짧은 시간 내에 재사용되는 프로그램의 특성

Cache Miss

→ 캐시에 CPU가 요청한 데이터가 있을 시 Cache Hit, 없을 시 Cache Miss

  • Cold miss: 해당 메모리 주소를 처음 불러서 생기는 미스
  • Conflict miss: 동일한 캐시 메모리 주소에 다른 값이 할당되어 생기는 미스 → 할당 문제
  • Capacity miss: 캐시 메모리의 공간이 부족해서 생기는 미스 → 공간 문제

구조 및 작동 방식

  1. Direct Mapped Cache
    • 가장 기본적인 구조, DRAM의 여러 주소가 캐시 메모리의 한 주소에 대응되는 다대일 방식
      → Dynamic Random Access Memory: RAM의 한 종류, 저장된 데이터가 시간과 전원의 끊김에 따라 소멸된다.
    • ex: 캐시 메모리 공간이 8개(000~111), 메모리공간이 32개(00000~11111)
    • 간단하고 빠르지만 Conflict Miss가 발생한다
      메인메모리 공간의 주소 뒤 3자리로 캐시 메모리 할당
      → 00~11 000에서 앞(00~11)을 태그 필드, 뒤(000)를 인덱스 필드

  2. Fully Associative Cache
    • 비어있는 캐시 메모리가 있을 때 마음대로 주소를 저장하는 방식
    • 저장 시 매우 간단, 찾을 때 문제
    • 조건이나 규칙 없음, 특정 캐시 Set 안에 있는 모든 블럭을 한 번에 찾아 원하는 데이터가 있는지 검색
    • CAM이라는 특수한 메모리 구조 사용(매우 비쌈)

  3. Set Associative Cache
    • Direct + Fully 방식, 특정 행을 지정하고 그 행 안의 어떤 열이든 비어있을 때 저장하는 방식
    • Direct보다 탐색이 느리지만 저장이 빠르다(=Fully보다 탐색이 빠르고 저장이 느리다)

더 알아보기

profile
가오리의 코딩일기

0개의 댓글