저장 장치 계층 구조
,캐시 메모리
,캐시 적중률
,참조 지역성의 원리
이번 절에서는 저장 장치 계층 구조를 통해 저장 장치의 큰 그림을 그리고, CPU와 메모리 사이에 위치한 캐시 메모리를 학습합니다.
저장 장치는 일반적으로 '1) CPU와 가까운 저장 장치를 빠르고, 멀리 있는 저장 장치는 느리다', '2) 속도가 빠른 저장 장치는 저장 용량이 작고, 가격이 비싸다'는 두 가지 명제를 따른다. 즉, 낮은 가격대의 대용량 저장 장치를 원한다면 느린 속도는 감수해야 하고, 빠른 메모리를 원한다면 작은 용량과 비싼 가격은 감수해야 한다. 그래서 일반적으로 컴퓨터는 다양한 저장 장치를 모두 사용한다. 그리고 이들을 'CPU에 얼마나 가까운가'를 기준으로 계층적으로 나타낼 수 있으며 이를 저장 장치 계층 구조(memory hierarchy)
라고 한다.
CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 느리다. 그럼에도 불구하고 CPU는 프로그램을 실행하는 과정에서 메모리에 빈번히 접근해야 하기 때문에 등장한 저장 장치가 캐시 메모리(cache memory)
다. CPU와 메모리 사이에 위치하고, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치다.
저장 계층 구조에 캐시 메모리를 반영하면 느린/큰/저렴한 순서부터 보조기억장치 > 메모리 > 캐시 메모리 > 레지스터다. 더 자세히 컴퓨터 내부에는 여러 개의 캐시 메모리가 있다. 그리고 이 캐시 메모리들은 CPU와 가까운 순서대로 계층을 구성한다. 코어와 가장 가까운 메모리부터 L1 캐시
, L2 캐시
, L3 캐시
라고 부른다. 용량, 속도, 가격도 같은 순으로 커지고, 느려지고, 저렴해진다. 데이터 검색도 같은 순으로 진행된다.
멀티 코어 프로세서에서 L1, L2 캐시는 코어마다 고유한 캐시 메모리로 할당되고, L3 캐시는 여러 코어가 공유하는 형태로 사용된다.
보조기억장치는 전원이 꺼져도 기억할 대상을 저장하고, 메모리는 실행 중인 대상을 저장한다면 캐시 메모리는 CPU가 사용할 법한 대상을 예측하여 저장한다. 이때 지주 사용될 것으로 예측한 데이터가 실제로 들어맞아 캐시 메모리 내 데이터가 CPU에서 활용될 경우를 캐시 히트(cache hit)
하고 한다. 반대로 자주 사용될 것으로 예측하여 캐시 메모리에 저장했지만, 예측이 틀려 메모리에서 필요한 데이터를 직접 가져와야 하는 경우를 캐시 미스(cache miss)
라고 한다. 키시 히트 비율은 '캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)'이며 캐시 적중률(cache hit ratio
라고 한다.
캐시 메모리는 참조 지역성의 원리(locality of reference, principle of locality)
에 따라 메모리로부터 가져올 데이터를 결정한다. 이는 두 가지 경향을 바탕으로 만들어진 원리이다.
CPU는 변수가 저장된 메모리 공간을 언제든 다시 참조할 수 있다. 그리고 변수에 저장된 값은 일반적으로 한 번만 사용되지 않고 프로그램이 실행되는 동안 여러 번 사용된다. 즉, CPU는 최근에 접근했던 메모리 공간을 여러 번 다시 접근할 수 있다. 이러한 경향을 시간 지역성(temporal locality)
라고 한다.
메모리 내에 A, B, C라는 프로그램이 있다고 가정해 보자. 이 세 프로그램은 서로 관련 있는 데이터끼리 모여서 저장된다. 또, A라는 프로그램 안에 ㄱ, ㄴ, ㄷ라는 기능이 있다고 했을 때 각각의 기능과 관련한 데이터는 모여서 저장된다. 만약 CPU가 ㄴ이라는 기능을 사용하면 이가 모여 있는 공간 근처를 집중적으로 접근할 것이며 이 경향을 공간 지역성(spatial locality)
라고 한다.