CSAPP/1장

[CSAPP] 1-5 캐시가 중요하다.

넌뭐가그렇게중요해 2025. 3. 27. 19:22

전에 쓴 예시를 계속해서 이어보자면 hello 프로그램의 기계어 인스트럭션들은 본래 하드디스크에 저장되어 있다는 것을 알 수 있다. 프로그램이 로딩될 때 이들은 메인 메모리에서 프로세서로 복사된다. 프로세서가 프로그램을 실행할 때 인스트럭션들은 메인 메모리에서 프로세서로 복사된다. 즉, 프로그램이 디스크에 저장되어 있었지만, 메인 메모리로 복사되었다가 디스플레이 장치로 복사된다. 프로그래머 관점에서 보면, 이러한 여러 복사 과정들이 프로그램의 "실제 작업"을 느리게 하는 오버헤드다.

 물리학의 법칙 때문에 더 큰 저장장치들은 보다 작은 저장장치들보다 느린 속도를 갖는다. 프로세스와 메모리의 속도 격차도 똑같다. 하지만 이 격차가 시간이 갈수록 더 벌어지는데 그 이유는 메인 메모리를 더 빠르게 동작하도록 만드는 것보다 프로세서를 더 빨리 동작하도록 만드는 것이 더 쉽고 비용이 적게 들기 때문이다.

 이 격차를 대응하기 위해 캐시 메모리(캐시)라고 부르는 저장장치를 고안하여 프로세서가 단기간에 필요로 할 가능성이 높은 정보를 임시로 저장할 목적으로 사용한다. 밑의 그림은 일반적인 캐시 메모리를 보여준다. 프로세서 칩 내에 들어 있는 L1 캐시는 대략 수천 바이트의 데이터를 저장할 수 있으며, 거의 레지스터 파일만큼 빠른 속도로 액세스 할 수 있다. 이보다 좀 더 큰 L2 캐시는 수백 킬로바이트에서 수 메가바이트의 용량을 가지며 프로세서와 전용 버스를 통해 연결된다. 

 프로세서가 L2 캐시를 액세스할 때 L1 캐시보다 5배 정도 느리지만, 그래도 여전히 메인 메모리를 액세스할 때보다는 5 ~ 10배 정도 빠르다. L1, L2 캐시는 SRAM(Static Random Access Memory)이라는 하드웨어 기술을 이용해 구현한다. 

 보다 새롭고 보다 강력한 시스템은 심지어 3단계의 캐시를 갖는 경우도 있다. L1, L2 그리고 L3. 캐시 시스템의 이면에 깔려 있는 아이디어는 프로그램이 지엽적인 영역의 코드와 데이터를 액세스하는 경향인 지역성(locality)을 활용하여 시스템이 매우 크고 빠른 메모리 효과를 얻을 수 있다는 것이다. 자주 액세스할 가능성이 높은 데이터를 캐시가 보관하도록 설정하면 빠른 캐시를 이용해서 대부분의 메모리 작업을 수행할 수 있게 된다. 

 여기서 지역성에 대해서 추가 설명을 하자면 지역성은 크게 2가지로 나타납니다. 

  • 시간적 지역성(Temporal Locality): 한 번 접근된 데이터는 가까운 미래에 다시 접근될 가능성이 높다는 원리입니다. e.g. 루프 내에서 반복적으로 사용되는 변수
  • 공간적 지역성(Spatial Locality): 메모리의 특정 주소에 접근한 후, 그 주변 주소에 있는 데이터에 접근될 가능성이 높다는 원리입니다. 이는 배열이나 연속적인 메모리 블록에 접근할 때 종종 발생함