캐시 메모리
- CPU와 주기억장치의 속도 차이를 보완하기 위하여 그 사이에 설치하는 반도체 기억장치
- CPU와 주기억장치 사이에 위치
- CPU가 기억장치로부터 데이터를 읽기 전 캐시에 있는지 검사
- 있다면 즉시 인출 가능하므로 액세스 시간 크게 단축
캐시 적중(cache hit)
- CPU가 액세스하려는 데이터가 이미 캐시에 적재되어 있는 상태
캐시 미스(cache miss)
- CPU가 액세스하려는 데이터가 캐시에 없어서 주기억장치로부터 인출해 와야 하는 상태
캐시 적중률(cache hit ratio)
- 전체 기억장치 액세스들 중에서 캐시에 적중되는 비율
문제
Tc = 10ns, Tm = 100ns인 시스템에서 캐시 적중률(H)이 70%, 80, 95%일 때의 평균 기억장치 액스 시간(Ta)을 구하라
풀이
H=70%의 경우 : Ta=0.7x10ns+0.3x100ns = 37ns
H=80%의 경우 : Ta=0.8x10ns+0.2x100ns = 28ns
H=95%의 경우 : Ta=0.95x10ns+0.05x100ns = 14.5ns
캐시 적중률은 프로그램과 데이터의 지역성(locality) 에 크게 의존한다
- 지역성(locality)
- CPU나 주기억장치의 특정 위치에 저장되어 있는 명령어들이나 데이터를 빈번히 혹은 집중적으로 액세스하는 현상
- 시간적 지역성(temporal locality)
- 최근에 액세스된 프로그램 코드나 데이터가 가까운 미래에 다시 액세스될 가능성이 높아지는 특성
- 공간적 지역성(spatial locality)
- 기억장치 내에 서로 인접하여 저장되어 있는 데이터들이 연속적으로 액세스될 가능성이 높아지는 특성
- 순차적 지역성(sequential locality)
- 분기(branch)가 발생하지 않는 한, 명령어들은 기억장치에 저장된 순서대로 인출되어실행
캐시 설계에 있어 공통적인 목표
- 캐시 적중률의 극대화
- CPU가 원하는 정보가 캐시에 있을 확률을 높여야 한다
- 캐시 액세스 시간의 최소화
- 캐시 적중 시 캐시로부터 CPU로 정보를 인출하는데 걸리는 시간을 단축시켜야 한다
- 캐시 실패에 따른 지연시간의 최소화
- 캐시 미스가 발생한 경우 주기억장치로부터 읽어오는 시간을 최소화시켜야 한다
- 주기억장치와 캐시간의 데이터 일관성 유지 및 그에 따른 오버헤드의 최소화
- CPU가 캐시 내용을 변경했을 시 주기억장치에 그 내용을 갱신하는 절차로 발생하는 지연 시간을 최소화시켜야 한다
인출 방식
- 요구 인출(demand fetch)
- 캐시 미스가 발생한 경우, CPU가 필요한 정보만 주기억장치에서 캐시로 인출
- 선인출(prefetch)
- CPU가 필요한 정보 외에 그와 인접해 있는 정보들을 함께 캐시로 인출
- 지역성에 의해 연속적으로 액세스될 가능성이 높으므로 적중률을 높이기 위해
사상 방식
- 주기억장치 블록이 어느 캐시 라인에 적재될 수 있는지 결정해주는 알고리즘
- 직접 사상(direct mapping)
- 주기억장치의 블록들이 지정된 어느 한 캐시 라인으로만 사상될 수 있음
- 각 블록은 지정된 특정 라인에만 적재될 수 있다
- 완전-연관 사상(fully-associative mapping)
- 주기억장치 블록이 캐시의 어떤 라인으로든 적재될 수 있는 사상 방식
- 직접 사상 방식의 단점을 보완
- 세트-연관 사상(set-associative mapping)
- 직접 사상 방식과 완전-연관 사상 방식의 장점만을 취하기 위한 절충안
- 주기억장치 블록이 지정된 어느 한 세트로만 적재될 수 있으며, 각 세트는 두 개 이상의 라인들로 구성된 사상 방식
교체 알고리즘
- 캐시 미스 발생으로 새로운 블록이 주기억장치로부터 캐시로 올라왔을 때, 이미 채워진 블록을 교체해야 한다
- 최소 최근 사용(Least Recently Used: LRU)
- 세트 라인에 적재되어 있는 블록들 중에서 최근의 사용 빈도가 가장 낮은 블록을 선택하여 교체하는 방식
- FIFO(First-In-First-Out: FIFO)
- 캐시에 적재된 지 가장 오래된 블록을 교체하는 방식
- 최소 사용 빈도(Least Frequently Used: LFU)
- 캐시에 적재된 이래 사용된 빈도가 가장 낮은 블록을 교쳏나ㅡㄴ 방식
쓰기 정책
- 캐시에 적재되어 있는 데이터가 수정되었을 때 그 내용을 주기억장치에 갱신하는 시기와 방법을 결정하는 것
- write through
- 캐시에 쓰기 동작을 수행할 때 주기억장치에도 동시에 이루어지는 방식
- write back
- 쓰기 동작이 캐시까지만 이루어지는 방식