독서/[ 혼자 공부하는 컴퓨터 구조 + 운영체제 ]

Chapter 6. 메모리와 캐시메모리

coding-l7 2025. 3. 20. 11:25

RAM

RAM은 휘발성 저장 장치로, 용량이 적을 경우, 보조기억장치에서 실행할 프로그램을 가져오는 일이 잦아 성능이 낮아지게 된다. 이러한 RAM에는 DRAM, SRAM, SDRAM, DDR SDRAM이 있다.

 

DRAM(Dynamic RAM)

데이터가 동적으로 사라지는 RAM을 의미한다. 즉, DRAM은 시간이 지나면 저장된 데이터가 점차 사라지기 때문에 일정 주기로 데이터를 재활성화(다시 저장) 해야 한다. 이러한 단점이 있음에도 소비 전력이 낮고, 저렴하고, 집적도가 높기 때문에 대용량으로 설계하기 용이하여 일반적인 메모리로써 자주 사용한다.

 

SRAM(Static RAM)

데이터가 변하지 않는 RAM을 의미하며, DRAM과는 대조적이다. 그리고, SRAM은 DRAM보다 일반적으로 속도가 빠르다. 하지만 집적도가 낮고 소비 전력이 크며 가격이 더 비싸기 때문에 캐시 메모리와 같은 곳에서 사용된다.

 

SDRAM(Synchronous Dynamic RAM)

클럭 신호와 동기화된, 발전된 형태의 DRAM으로 클럭 타이밍에 맞춰 CPU와 정보를 주고받을 수 있다.

 

DDR SDRAM(Double Data Rate SDRAM)

가장 흔히 사용되는 RAM으로 대역폭을 넓혀 속도를 빠르게 만든 SDRAM으로, SDRAM이 데이터를 한 번에 한 개 를 보낼 때 DDR SDRAM은 한 번에 두 개를 보낼 수 있다. 당연하게도 전송 속도 또한 두 배 가량 빠르다. 또한, DDR SDRAM은 SDRAM보다 대역폭이 두 배 넓고, DDR2 SDRAM은 DDR SDRAM보다 대역폭이 두 배 즉, SDRAM보다 대역폭이 네 배 넓다. 따라서, DDR 뒤의 숫자는 2의 지수승만큼 SDRAM보다 대역폭이 넓다는 것을 의미한다.


메모리의 주소 공간

주소에는 크게 물리 주소와 논리 주소가 있다. 물리 주소는 정보가 실제로 저장된 하드웨어상의 주소를 의미하며, 논리 주소는 실행 중인 프로그램에게 각각 부여된 0번지부터 시작되는 주소를 의미한다.

 

또한, CPU가 메모리와 상호작용하기 위해 논리 주소와 물리 주소 간의 변환이 필요한데, 이는 메모리 관리 장치(MMU; Memory Management Unit)라는 하드웨어에 의해 수행된다. MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더하여 물리 주소로 변환한다.

하지만, 이러한 방법은 다른 프로그램의 메모리 영역에 침법하는 상황이 발생할 수 있다. 이를 방지하기 위해 메모리 보호 기법을 사용한다. 이는 한계 레지스터(limit register)라는 레지스터에 논리 주소의 최대 크기를 저장하며, CPU가 접근하는 논리 주소가 한계 레지스터의 값보다 작은지 확인하는 과정을 거쳐 수행할 수 있다.


캐시 메모리(cache memory)

저장 장치는 다음과 같은 계층 구조를 띄며 이를 저장 장치 계층 구조(memory hierarchy)라 한다.

 

이 중에서 캐시 메모리는 CPU와 메모리(RAM) 사이에 위치한 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치이다. 이중에서도 코어와 가장 가까운 캐시 메모리를 L1(level 1) 캐시, 그다음 가까운 캐시 메모리를 L2 캐시, 다음은 L3 캐시라고 부른다. 일반적으로 L1 캐시와 L2 캐시는 코어 내부에 있으며 L3 캐시는 코어 외부에 위치해 있다.

 

참조 지역성 원리

캐시 메모리는 메모리보다 용량이 적기 때문에 CPU가 사용할 법한 대상을 예측하여 저장한다. 이때 예측한 데이터가 실제로 들어맞아 활용될 경우를 캐시 히트(cache hit)라고 한다. 또한, 예측한 데이터가 틀려서 메모리로부터 데이터를 가져와야 하는 경우를 캐시 미스(cache miss)라고 한다. 이를 활용하여 캐시 적중률(cache hit ratio)을 다음과 같이 계산할 수 있다.

캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)

캐시 적중률을 높이기 위해 다음과 같은 참조 지역성의 원리를 활용한다.

  • 시간 지역성(temporal locality): 최근에 접근했던 메모리 공간에 다시 접근하려는 경향
  • 공간 지역성(spatial locality): 접근한 메모리 공간 근처를 접근하려는 경향

시간 지역성의 예시로는 프로그래밍 언어에서의 변수가 있다. 변수는 특정 주소에 데이터를 저장하고 이를 코드 내에서 여러 번 사용한다.

공간 지역성의 예시로는 프로그래밍 언어에서의 배열(array)이 있다. 반복문(for문)을 활용하여 배열 원소를 순차적으로 접근하는 것이 이에 해당하며, 또 다른 예시로는 하나의 프로그램은 보통 모여서 저장되기 때문에 현재 사용하는 프로그램의 정보는 모두 가까이에 저장되어 있는 것이 해당한다.


참고 자료:

강민철. 혼자 공부하는 컴퓨터 구조 + 운영체제』. 한빛미디어, 2022.