메모리 계층 구조(영어: memory hierarchy)란 컴퓨터 시스템에서 저장 장치를 속도, 용량, 비용의 특성에 따라 여러 계층으로 나누어 구성하는 방식을 의미한다. 이는 CPU가 메모리에 더 빠르게 접근할 수 있도록 하기 위한 설계 원리이다.
구성
메모리 계층 구조는 일반적으로 피라미드 형태로 표현되며, 위로 갈수록 접근 속도가 빠르고 용량이 작으며 비트당 비용이 높아진다. 아래로 갈수록 접근 속도는 느리지만 용량이 크고 비트당 비용이 낮아진다. 주요 계층은 다음과 같다.
-
레지스터(Register): CPU 내부에 위치한 가장 빠른 저장 공간이다. CPU가 현재 처리 중인 명령어와 데이터를 일시적으로 보관하며, 용량은 수백 바이트 수준으로 매우 작다. CPU와 동일한 속도(약 1클록 사이클)로 접근이 가능하다.
-
캐시 메모리(Cache Memory): CPU와 주기억장치 사이의 속도 차이를 줄이기 위해 도입된 고속 메모리이다. 일반적으로 L1, L2, L3의 세 단계로 구성된다. L1 캐시는 CPU 코어 내부에 존재하며 가장 빠르고 작다(수십 KB). L2 캐시는 L1보다 크고 약간 느리며(수백 KB~수 MB), L3 캐시는 여러 코어가 공유하는 더 큰 캐시(수 MB~수십 MB)이다. 캐시 메모리에는 주로 SRAM(Static Random Access Memory)이 사용된다.
-
주기억장치(Main Memory): 일반적으로 RAM(Random Access Memory), 구체적으로는 DRAM(Dynamic Random Access Memory)을 가리킨다. CPU 외부에 위치하며, 현재 실행 중인 프로그램과 데이터를 저장한다. 접근 시간은 약 100ns 수준이며, 용량은 수 GB에서 수백 GB에 이른다. 전원이 꺼지면 데이터가 사라지는 휘발성 메모리이다.
-
보조기억장치(Secondary Storage): 하드 디스크 드라이브(HDD)나 솔리드 스테이트 드라이브(SSD)가 이에 해당한다. 비휘발성이며 용량이 크지만 접근 속도가 가장 느리다. HDD는 수 ms, SSD는 수십~수백 μs 수준의 접근 시간을 가진다. CPU가 직접 접근할 수 없으며, 데이터를 주기억장치로 이동시킨 후에야 접근이 가능하다.
필요성
메모리 계층 구조가 필요한 이유는 세 가지 관점에서 설명할 수 있다.
첫째, 디코딩 속도의 문제이다. 메모리 용량이 커질수록 주소 디코딩에 더 많은 시간이 소요된다. 작은 메모리는 CPU와 데이터 버스로 직접 연결될 수 있지만, 큰 메모리는 디코더를 통해 원하는 위치를 찾아야 하므로 추가적인 지연이 발생한다. 따라서 CPU가 빠르게 접근하기 위해서는 저장 공간이 작아야 한다.
둘째, 참조의 지역성(Locality of Reference) 원리이다. 컴퓨터 과학에서 관찰된 경험적 법칙에 따르면, 프로그램이 실행될 때 모든 데이터가 균등하게 접근되지 않는다. 자주 사용되는 데이터는 계속해서 자주 사용되고, 그렇지 않은 데이터는 계속 사용되지 않는 경향이 있다. 이러한 지역성은 시간 지역성(temporal locality, 한 번 참조된 데이터가 곧 다시 참조될 가능성이 높음)과 공간 지역성(spatial locality, 참조된 데이터 근처의 데이터가 곧 참조될 가능성이 높음)으로 세분화된다. 운영체제와 CPU는 이 원리를 이용하여 자주 사용될 것으로 예상되는 데이터를 상위 계층(캐시)으로 자동으로 읽어온다.
셋째, 경제성의 문제이다. 레지스터, 캐시, 메모리, 하드 디스크는 각각 다른 하드웨어 기술로 제작된다. 상위 계층에 사용되는 SRAM이나 레지스터는 DRAM이나 디스크 저장장치보다 비트당 제조 비용이 훨씬 높다. 따라서 비싼 하드웨어는 필요한 최소한의 크기만 사용하고, 저렴한 하드웨어를 넉넉한 크기로 사용함으로써 전체 시스템의 비용 대비 성능 효율을 극대화한다.
캐싱(Caching) 원리
메모리 계층 구조의 핵심 개념은 각 계층이 바로 아래 계층의 캐시 역할을 수행한다는 것이다. 즉, 상위 계층(k)은 하위 계층(k+1)에 저장된 데이터 중 일부의 복사본을 보관한다. CPU가 데이터를 요청하면 가장 가까운 상위 계층부터 확인하며, 데이터가 존재하면 캐시 히트(cache hit), 존재하지 않으면 캐시 미스(cache miss)가 발생하여 하위 계층에서 데이터를 가져온다. 데이터는 블록(block) 또는 캐시 라인(cache line)이라는 단위로 계층 간에 이동하며, 일반적인 캐시 라인의 크기는 64바이트이다.
캐시 미스는 발생 원인에 따라 강제 미스(compulsory miss, 최초 접근), 용량 미스(capacity miss, 캐시 용량 부족), 충돌 미스(conflict miss, 캐시 배치 정책으로 인한 충돌)로 구분된다.
영향
메모리 계층 구조는 현대 컴퓨터 시스템의 성능에 근본적인 영향을 미친다. 상위 계층에서 데이터를 찾을 확률(히트율)이 높을수록 평균 메모리 접근 시간(AMAT, Average Memory Access Time)이 단축된다. 프로그램의 데이터 접근 패턴을 캐시 친화적으로 작성하는 것(예: 배열의 순차 접근, 구조체 배열 대 배열 구조체 선택 등)은 실질적인 성능 향상으로 이어진다.