위 그림처럼 프로세서가 프로그램을 실행하면 프로그램이 로딩될 때 디스크에서 메인 메모리로 복사되고, 프로그램을 실행할 때 인스트럭션들은 메인 메모리에서 프로세서로 복사된다. 이러한 여러 복사과정들이 프로그램의 실제 작업을 느리게 하는 오버헤드(overhead)다.
레지스터를 크게 만들면 굳이 여러 복사 과정이 필요가 없다. 하지만, 물리학의 법칙 때문에 더 큰 저장장치들은 보다 작은 저장장치보다 느린 속도를 갖고 더 빠른 장치들은 더 느린 장치들보다 만드는 데 더 많은 비용이 든다.
일반적인 레지스터 파일은 수백 Byte의 정보를 저장하는 반면, 메인 메모리의 경우는 십억 개의 Byte를 저장한다. 그러나 프로세서는 레지스터 파일의 읽기 속도보다 100배 더 빠르다.
기술이 발달하여 프로세서-메모리 간 격차가 지속적으로 증가하여 시스템 설계자들이 고안한 것이 캐시 메모리다.
캐시 메모리(Cache Memory)는 프로세서가 단기간에 필요로 할 가능성이 높은 정보를 임시로 저장할 목적으로 사용된다. 다시 사용될 정보를 굳이 메인 메모리에서 가져올 필요가 없는 것이다.
위 그림에서 프로세서(ALU)가 처리한 결과를 레지스터 파일에 '일시'적으로 저장한다면, 캐시는 레지스터 파일에 있는 정보를 담아 '임시'로 저장했다가 필요할 때 레지스터 파일만큼 빠른 속도로 액세스하여 작업을 수행할 수 있다.
캐시 메모리를 이해하는 응용 프로그래머는 캐시를 활용하여 자신의 프로그램 성능을 10배 이상 개선할 수 있다.
앞서 이야기한 것처럼, 저장장치가 빠를수록 용량이 작고 가격(cost)이 비싸고 느릴수록 용량이 크고 가격이 저렴하다. 위 그림은 메모리 계층구조의 예다.
L0는 레지스터, L1~L3는 캐시 메모리(SRAM)로 CPU 안에 구성돼있다. 아래와 같이 Windows에서 [작업 관리자]-[성능] 탭에 들어가면 각 캐시의 용량을 확인할 수 있다.
L4는 메인 메모리(DRAM)이며 L5~L6는 디스크에 해당된다. 그림처럼 한 레벨의 저장장치가 다음 하위레벨 저장장치의 캐시 역할을 한다.
출처 : Computer Systems A Programmer's Perspective(3rd Edition)