캐쉬
From DevNote
[edit]
Intro
[edit]
CPU 캐쉬 메모리의 필요성
앞서 메모리 기본에서 언급한 바와 같이 전체 성능향상을 위해서 디스크와, 메인메모리 액세스를 줄이는 것이 가장 중요하다. 이러한 이유로 CPU 캐쉬는 오래 전부터 도입되어 왔으며 기본적으로 근접성에 바탕을 두고 캐쉬메모리가 관리된다.
[edit]
근접성의 원칙 (Principle of Locality)
메모리 캐싱(caching)은 근접성(locality)의 원칙을 기본으로 한다. 근접성에는 시간적 근접성과 공간적 근접성이 있다. 간단히 날씨를 예로 들어 보자. 만약 인천에 비가 오고 있다면 서울에도 비가 오고 있을 가능성이 높다. 이것은 공간적 근접성이다. 그리고 오후 1시에 비가 오고 있었다면 2시에도 비가오고 있을 확률이 높다. 이것이 시간적 근접성이다.
컴퓨터 메모리 사용도 마찬가지이다. CPU가 현재 어떤 특정 메모리 주소를 액세스 하고 있다면, 그 주변에 인접한 다른 메모리도 곧 액세스할 가능성이 높고 또 단시간 안에 그 메모리를 다시 액세스할 가능성이 매우 높다. 이 원칙을 기본으로 CPU 캐쉬도 만들어져 있다.
- 시간적 근접성: 최근에 참조된 메모리는 가까운 미래에 다시 참조되기 쉽다.
- 공간적 근접성: 참조된 메모리 부근에 있는 메모리도 곧 참조될 가능성이 높다.
임의의 배열이 가지는 모든 값들의 합계를 구하는 다음 코드를 예로 보자. 배열의 각각의 원소는 메모리 상에서 인접하여 있으므로 공간적 근접성을 보인다. 그리고 sum 변수는 매번 새로운 원소의 값을 더할 때 참조 되므로 시간적 근접성을 보인다.
여기서 데이터 뿐만 아니라 프로그램을 수행하는 코드도 마찬가지로 두 가지 근접성을 보인다.
sum = 0;
for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)
sum += a[i];
return sum;
