- 캐시 메모리
CPU의 주기억장치의 속도 차이를 보완하기 위하여 그 사이에 설치하는 반도체 기억장치
액세스 시간이 주기억장치보다 짧지만 가격이 높아지고 설치 공간도 제한됨
- 캐시 검사
CPU가 기억장치로부터 어떤 데이터 읽어려 할 때 먼저 그 데이터를 캐시에 있는 지 검사한 뒤 유/무에 따라 주기억장치로 인출하는 것
- 캐시 적재
주기억장치로부터 인출된 데이터가 일단 캐시에 적재된 다음 다시 인출되어 CPU로 인출되는 것
- 캐시 적중
CPU가 원하는 데이터가 이미 캐시에 적재되어 있는 상태
- 캐시 적중률
기억장치 액세스들 중 캐시에 적중되는 비율
- 캐시 미스
CPU가 원하는 데이터가 캐시에 없는 상태
- 미스율
기억장치 액세스들 중 캐시에 적중되지 않는 비율
- 평균 기억장치 액세스 시간
전체 기억 장치 액세스에서 캐시 적중과 캐시 미스를 퍼센테이지에 각각 곱한 후 합친 것
- 캐시 인출 시간
캐시 적재를 합친 시간
- 지역성
CPU가 주기억장치의 특정 위치에 저장되어 있는 명령어들이나 데이터를 빈번히 혹은 집중적으로 액세스하는 현상
- 시간적 지역성
최근에 액세스된 프로그램코드나 데이터가 가까운 미래에 다시 액세스될 가능성이 높아지는 것
- 공간적 지역성
기억장치 내에 서로 인접하여 저장되어있는 데이터들이 연속적으로 액세스될 가능성이 높아지는 특성
- 순차적 지역성
분기가 발생하지 않는 한, 명령어들이 기억장치에 저장된 순서대로 인출되어 실행되는 것
- 캐시 설계
캐시의 활용을 높여 평균 기억장치 액세스 시간을 단축하기 위한 설계
- 공통 목표
캐시 적중률의 극대화, 캐시 액세스 시간의 최소화, 캐시 실패에 따른 지연시간 최소화, 주기억장치와 캐시간의 일관성 유지 및 그에 따른 오버헤드 최소화
- 캐시 용량
캐시의 용량이 커질 수록 적중률이 높아지기 때문에 용량과 비용이 상호 조정을 통하여 적절히 결정
캐시 용량이 커질 수록 주소 해독, 정보 인출을 위한 주변회로가 더 복잡해짐
칩이나 메인보드의 공간에 의해 제한 받음
- 인출 방식
주기억장치로부터 캐시를 인출해오는 방식도 캐시 적중률에 많은 영향 받음
- 요구 인출
필요한 정보만 인출해오는 방식
- 선인출
필요한 정보 외에 앞으로 필요할 것으로 예측되는 정보를 미리 인출해오는 방식
정보 인출 시 근접한 위치에 있는 정보 함께 인출하여 캐시에 적재
- 블록
주기억장치를 액세스할 때 함께 인출되는 정보들의 그룹
- 캐시 라인
주기억장치로부터 캐시로 인출되는 단위인 한 블록이 적재되는 캐시 내 공간
주기억장치 블록 수보다 훨씬 적어 기억장치 블록들 중 일부분만 캐시에 적재될 수 있음
여러 개의 주기억장치 블록들에 의해 공유됨
- 태그
캐시 라인을 공유하는 블록들 중에서 어느 것이 적재되어 있는지 가리키는 비트들
- 사상 방식
주기억장치 블록이 어느 캐시라인에 적재될 수 있는지 결정해주는 알고리즘
- 직접 사상
주기억장치 블록이 지정된 어느 한 라인에만 적재될 수 있는 사상 방식
주기억장치 주소를 태그 필드, 라인 필드, 단어 필드로 구성된 것으로 해석됨
- 라인 필드
블록이 적재될 수 있는 라인 지정 용도
- 태그 필드
같은 캐시 라인 공유하는 주기억장치 블록들을 서로 구분하는 용도
- 단어필드
각 블록내의 단어 구분 용도
- 완전-연관 사상
주기억장치 블록이 캐시의 어느 라인으로든 적재될 수 있는 사상 방식
주기억장치 주소를 태그 필드, 단어 필드로 구성된 것으로 해석됨
주기억장치 블록이 캐시의 어떤 라인이든 적재될 수 있으므로 적중 여부 검사하기 위해 모든 라인들의 태그들과 주 기억장치의 태그 필드 내용 비교하여 일치확인해야 함
비어있는 라인 없으면 교체 알고리즘을 통해 라인 선택 후 새로운 블록 적재
- 세트 연관 사상
주기억장치 블록이 지정된 어느 한 세트로만 적재될 수 있으며 각 세트는 두 개 이상의 라인들로 구성된 사상방식
직접 사상과 완전-연관 사상의 장점만을 취하기 위한 절충안
- k-way 세트-연관 사상
세트당 라인이 k개씩 있는 사상방식
주기억장치 주소를 태그 필드, 세트 필드, 단어 필드로 나누어 해석함
- 세트 필드
주기억장치 블록이 적재될 수 있는 세트 선택 용도
- 교체 알고리즘
캐시 미스가 발생하여 새로운 블록이 주기억장치로부터 캐시에 올라왔을 때 그 블록이 적재될 수 있는 라인이 이미 다른 블록들로 채워져 있다면 그 블록 들 중 하나를 교체하는 알고리즘
- 최소 최근 사용 알고리즘
사용되지 않은 채로 가장 오랫동안 적재되어 있던 블록 교체하는 방식
각 라인이 USE비트를 가지고 있도록 하고 라인이 액세스 되면 비트를 1로 세틀하고 다른 라인 비트를 0으로 리셋하여 새로운 블록이 그 세트로 적재된다면 0인 라인이 교체되는 방식으로 구현
- FIFO 알고리즘
캐시에 적재된 지 가장 오래된 블록 교체 방식
- 최소 사용 빈도 알고리즘
캐시에 적재된 이래 사용된 빈도가 가장 낮은 블록 교체하는 방식
각 라인에 카운터를 설치해야 하기 때문에 하드웨어 복잡해 짐
- 쓰기 정책
주기억장치 내용이 복사된 캐시 데이터 변경 시 원본인 주기억장치도 갱신하는 방식
- write-through
모든 쓰기 동작들이 캐시와 주기억장치에 동시에 행해지는 방식
주기억장치의 내용이 항상 캐시와 같음
쓰기 동작에 걸리는 시간 길어짐
- write-back
쓰기 동작이 캐시까지만 이루어지는 방식
M(modified)비트를 이용하며 라인이 교체될 때 그 라인 전체가 기억장치가 갱신된 다음에 교체됨
- 문제점
캐시에서 수정된 내용이 갱신될 때까지 주기억장치의 해당 블록이 무효 상태에 있음
캐시 라인 상태 확인하고 갱신하는 동작 지원 위해 캐시 제어회로 복잡해짐
각 라인이 상태 비트 가지고 있어야 함
다중 프로세서의 경우 여러 캐시가 있어서 데이터 불일치 문제가 발생할 수 있음
- 다중 캐시
캐시들 계층적으로 설치하거나 기능별로 분리된 다수의 캐시를 사용하는 것
각 계층의 캐시는 슈퍼 셋 관계를 가짐
- 온-칩 캐시
CPU 칩 내부에 포함된 캐시
- 계층적 캐시
여러 레벨의 캐시들을 계층적으로 설치한 구조
- 분리 캐시
명령어와 데이터를 분리하여 별도로 저장하는 캐시 구조
명령어 인출 단계와 오퍼랜드 인출 단계 간에 캐시에 대한 충돌 현상 제거 가능
- 계층적 캐시와 분리 캐시 혼합 구조
최근 프로세서들의 구조
계층적 캐시를 이용하여 명령어, 데이터 분리
계층적 캐시로 슈퍼셋 관계 만들어 평균 속도 향상