1. 캐시 메모리(Cache Memory)
캐시 메모리는 CPU와 주 기억장치(메인 메모리, RAM) 사이의 고속 데이터 저장소로 사용된다. 데이터에 빠르게 접근할 수 있도록하여 시스템의 전반적인 성능을 향상시킨다.
캐시 메모리는 CPU가 주 기억장치에 접근하는 것보다 빠른 속도로 데이터에 접근할 수 있도록 해준다. CPU는 먼저 캐시에서 데이터를 찾고 데이터가 없는경우 주 기억장치에서 데이터를 가져온다. 자주 사용되는 데이터나 명령어를 캐시 메모리에 저장하면 CPU는 캐시 메모리에 저장된 정보를 재사용할 수 있다. 이는 반복적인 메모리 접근을 줄인다.
2. 캐시의 지역성(Cache Locality)
CPU는 데이터를 가져오기 위해 캐시 메모리에 먼저 접근하고 데이터가 존재하지 않는다면 주 기억장치에 접근한다. CPU가 주 기억장치에 접근하는 것은 상대적으로 느린 작업이다. 이는 CPU와 주 기억장치의 기술적 특성 차이 때문이다. CPU는 고속으로 데이터를 처리할 수 있도록 설계되었고, RAM은 더 많은 데이터를 저장할 수 있도록 설계되었다.
이러한 이유에 있어서 캐시를 사용하여 효율성을 높여야한다. 그러기 위해서는 캐시의 적중률(Hit-rate)을 높여야한다. 캐시의 적중률을 높이기 위해서는 지역성(Locality)이라는 개념이 사용된다.
3. 지역성(Locality)
3-1. 시간적 지역성(Temporal Locality)
시간적 지역성은 CPU가 접근한 데이터는 추후에 다시 접근될 가능성이 높다는 것을 의미한다. 예를 들어, 반복문에서 같은 변수가 여러 번 사용되거나, 특정 함수가 여러 번 호출되는 경우이다. 짧은 시간 내에 반복적으로 같은 데이터에 접근하기 때문에 메모리에 저장하기 보다는 상대적으로 빠른 캐시 메모리에 저장하면 CPU에서 빠르게 접근할 수 있다.
3-2. 공간적 지역셩(Spatial Locality)
공간적 지역성은 메모리의 특정 위치에 접근한 후, 그곳에서 인접한 메모리 또한 접근될 가능성이 높은 것을 의미한다. 이는 연속된 메모리 공간에 할당되어 순차적으로 처리하는 배열을 예시로 들 수 있다. 배열의 경우 연속적인 메모리 공간에 할당되기 때문에 인접한 데이터를 접근할 가능성이 높다.
// 연속된 메모리 공간에 저장
int arr[5] = {1, 2, 3, 4, 5};
// 연속된 데이터를 순차 접근
for (int i = 0; i < 5; i++) {
printf("%d\n", arr[i]);
}