캐시 메모리는 속도가 빠른 CPU와 속도가 느린 주기억장치(RAM) 사이에 위치하여 장치간의 병목 현상을 줄이기 위한 범용 메모리이다.
주기억장치에서 자주 사용하는 프로그램과 데이터를 캐시 메모리에 저장해주어 속도를 빠르게 한다.
주기억장치로부터 캐시 메모리로 데이터를 보내는 것을 매핑(Mapping) 이라고 한다.
속도는 캐시 메모리에 CPU가 필요한 정보가 어느 정도 들어있느냐에 따라 결정되기 때문에, 적중률(Hit rate)을 높이기 위해 어느정도 예측이 필요하다. 이를 위해 필요한 개념이 캐시의 지역성이다.
캐시의 지역성이란 데이터의 접근이 시간적이나 공간적으로 가깝게 일어나는 것을 말한다.
프로그램은 정보를 균일하게 참조하는 것이 아니라, 어느 한 순간에 특정 부분을 집중 참조하는 것이 지역성의 특성이다.
캐시의 지역성은 두 가지로 나뉜다.
시간 지역성(Temporal Locality)
: 최근에 사용했던 데이터가 재참조될 가능성이 높은 특성이다.
ex) for 문의 index로 쓰이는 변수 i
공간 지역성(Spatial Locality)
: 최근에 사용했던 데이터와 인접한 데이터가 참조될 가능성이 높은 특성이다.
ex) 자료구조 배열은 연속적인 메모리 공간을 가지므로 탐색 시 가까운 메모리에 연속적으로 접근
캐싱 라인이란 캐시에 데이터를 저장할 때 특정 자료구조를 사용하여 묶어 놓은 것을 말한다.
캐싱 라인은 세 가지 방식으로 매핑을 한다.
직접 매핑(Direct Mapping)
메모리 주소와 캐시의 순서를 일치시켜 주기억장치의 블록들이 지정된 한 개의 캐시 라인으로만 매핑할 수 있다.
적중률과 성능이 낮지만 구현이 간단하고 쉽다.
연관 매핑(Associative Mapping)
순서를 일치시키지 않고 필요한 메모리 값을 캐시의 어느 곳이든 저장할 수 있다.
찾는 과정은 복잡하고 느리지만 적중률이 높다.
직접 연관 매핑(Set Associative Mapping)
직접 매핑과 연관 매핑의 장점을 합쳐 놓은 방식이다. 순서를 일치시키되, 일정 그룹을 두어 그룹 내에서 편하게 저장할 수 있다.
효율적으로 검색하면서 적중률도 높다.