보통 CPU는 데이터를 가지고 오기 위해 캐시메모리 -> 메모리 -> 보조기억장치 순으로 접근한다.
캐시 메모리는 CPU와 메모리의 속도 차이로 인한 병목현상을 완화하기 위해 사용한다.
자주 사용하는 데이터를 캐시메모리의 두고 필요할 때 꺼내 쓰기 때문에 성능 향상의 효과를 볼 수 있다.
그렇지만 속도가 빠르지만 가격이 그만큼 비싸기 때문에 적은 용량으로 사용한다.
메인 메모리에서 캐시로 데이터를 저장할 때 공간적 지역성 때문에 인접한 데이터를
한 번에 저장하고 이때의 단위를 블록이라고 한다. 그리고 캐시는 메인 메모리의 몇 번째 블록인지를 알려주는 태그도 함께 저장한다.
매핑이란 주 기억장치로부터 캐시 메모리로 정보를 옮기는 것이다.
3가지 종류로 나뉘는데 직접 매핑(Direct Mapping), 어소시에이티브 매핑(Associative Mapping), 세트-어소시에이티브 매핑(Set-Associative Mapping)이 있다
직접 매핑 : 캐시에 저장된 데이터들은 메인 메모리와 동일한 배열을 가지도록 매핑하는 방법이다.
그 이유로 매우 단순하고 탐색하기 쉽지만, 적중률은 낮다는 단점이 있다
어소시에이티브 매핑 : 직접 매핑의 단점을 보완하기 위해 나온 매핑이다. 캐시에 저장된 데이터들은 메인 메모리의 순서와 아무런 관련이 없기 때문에 캐시를 전부 뒤져서 태그가 같은 데이터를 찾아야 한다. 따라서 병렬 검사를 위해 복잡한 회로가 있기 때문에 시간이 오래 걸린다는 단점과 적중률이 높다는 장점을 가지고 있다.
세트-어소시에이티브 매핑 : 직접 매핑의 단순한 회로와 어소시에이티브 매핑의 적중률 두 개의 장점만 사용하기 위해 나온 매핑이다. 세트 번호를 통해 병렬 탐색을 줄이고, 모든 라인에 무작위로 위치해서 직접 매핑에 단점도 보완하였다. 세트 안의 라인 수에 따라 n-way 연관 매핑이라고 한다.
CPU가 캐시에 주소를 전송 -> 태그 메모리 탐색 -> 일치하는 태그 발견 -> 블록 상태 갱신 -> 데이터 메모리에서 블록 추출 -> 요청받은 데이터 선택 -> 캐시가 CPU에 데이터 전송
CPU가 캐시에 주소를 전송 -> 태그 메모리 탐색 -> 일치하는 태그 없음 -> 주소를 메모리로 전송해 대응하는 블록을 캐시에 저장 -> 요청받은 데이터 선택 -> 캐시가 CPU에 데이터 전송