작성자 프로필
mouuaw
코드 깎는 다람쥐
2023.06.10

RAM의 특징과 종류

주기억장치의 종류에는 크게 RAM과 ROM이 있습니다. 이번장에서는 RAM용량이 컴퓨터 성능에 어떤 영향을 미치는지 그리고 DRAM, SRAM, SDRAM, DDR SDRAM은 무엇이고 어떤 특징을 가지는지 알아보겠습니다.

RAM의 특징

RAM에는 실행할 프로그램의 명령어와 데이터가 저장됩니다.

여기서 중요한 점은 전원을 끄면 RAM에 저장된 명령어와 데이터가 모두 날아간다는 것입니다. 이렇게 전원을 끄면 저장된 내용이 사라지는 저장 장치를 휘발성 저장 장치라고 합니다.

반면 전원이 꺼져도 저장된 내용이 유지되는 저장 장치는 비휘발성 저장 장치라고 합니다.

CPU는 보조기억장치에 직접 접근하지 못합니다. 그래서 일반적으로 보조기억장치에 '보관할 대상'을 저장하고, 휘발성 저장장치인 RAM에는 '실행할 대상'을 저장합니다. CPU가 실행하고 싶은 프로그램이 보조기억장치에 있다면 이를 RAM으로 복사하여 저장한 뒤 실행합니다.

RAM의 용량과 성능

RAM용량은 컴퓨터 성능에 어떤 영향을 미칠까요? CPU가 실행하고 싶은 프로그램이 보조기억장치에 있다면 이를 RAM으로 가져와야 할 텐데, RAM 용량이 적다면 보조기억장치에서 실행할 프로그램을 가져오는 일이 잦아 실행 시간이 길어집니다.

그래서 RAM용량이 크면 많은 프로그램들을 동시에 빠르게 실행하는 데 유리합니다.

RAM의 종류

이번에는 RAM의 종류를 알아보겠습니다. RAM의 종류에는 크게 DRAM, SRAM, SDRAM, DDR SDRAM이 있습니다.

DRAM

DRAM은 Dynamic RAM의 준말입니다. 이는 저장된 데이터가 동적으로 변하는(사라지는) RAM을 의미합니다. 즉 DRAM은 시간이 지나면 저장된 데이터가 점차 사라지는 RAM입니다.

우리가 일반적으로 메모리로써 사용하는 RAM은 DRAM입니다. 소비 전력이 낮고, 저렴하고, 집적도가 높기 때문에 대용량으로 설계하기 용이하기 때문입니다.

SRAM

SRAM은 Static RAM의 준말입니다. SRAM은 저장된 데이터가 변하지 않는 RAM을 의미합니다. SRAM은 시간이 지나도 저장된 데이터가 사라지지 않습니다. 그리고 DRAM에 비해 속도도 빠릅니다.

하지만 SRAM은 일반적으로 사용되지 않습니다. SRAM은 DRAM에 비해 집적도가 낮고 소비 전력도 크며, 가격도 더 비싸기 때문입니다. 그래서 SRAM은 '대용량으로 만들어질 필요는 없지만 속도가 빨라야 하는 저장 장치' 가령 캐시 메모리에 사용됩니다.

SDRAM

SDRAM은 마치 SRAM과 DRAM의 합성어로 오해하기 쉽지만, SDRAM는 SRAM과 관계가 없습니다.

SDRAM은 클럭 신호와 동기화된, 발전된 형태의 DRAM 입니다. '클럭 신호와 동기화되었다'는 말은 클럭 타이밍에 맞춰 CPU와 정보를 주고받을 수 있음을 의미합니다.

DDR SDRAM

DDR SDRAM은 최근 가장 흔히 사용되는 RAM 입니다. DDR SDRAM은 대역폭을 넓혀 속도를 빠르게 만든 SDRAM입니다. 여기서 대역폭이란 '데이터를 주고받는 길의 너비'를 의미합니다.

한 클럭에 하나씩 정보를 주고받을 수 있는 SDRAM과 비교했을 때 DDR SDRAM은 너비가 두 배인 도로와 같습니다. 그래서 전송속도가 SDRAM에 비해 두 배가량 빠릅니다.

DDR2 SDRAM은 DDR SDRAM보다 대역폭이 두 배 넓은 SDRAM입니다. 그리고 최근에 사용되는 메모리는 DDR4 SDRAM으로 SDR SDRAM보다 열여섯 배 넓은 대역폭을 가집니다.

메모리의 주소 공간

메모리에 저장된 정보의 위치는 주소로 나타낼수 있다고 설명드렸습니다. 사실 이 주소에는 두 종류가 있습니다. 바로 물리 주소와 논리 주소입니다. 물리 주소는 메모리 하드웨어가 사용하는 주소이고, 논리 주소는 CPU와 실행 중인 프로그램이 사용하는 주소입니다.

물리 주소와 논리 주소

CPU와 실행 중인 프로그램은 현재 메모리 몇 번지에 무엇이 저장되어 있는지 다 알고 있을까요?

언뜻 생각하면 당연히 그럴 것 같지만, 실제로는 그렇지 않습니다. CPU와 메모리에 저장되어 실행중인 프로그램은 메모리 몇 번지에 무엇이 저장되어 있는지 다 알지 못합니다.

그 이유는 메모리에 저장된 정보는 시시각각 변하기 때문입니다. 메모리에는 새롭게 실행되는 프로그램이 시시때때로 적재되고, 실행이 끝난 프로그램은 삭제됩니다. 그래서 CPU는 현재 실행중인 프로그램이 현재 메모리 몇 번지에 무엇이 저장되어 있는지 알고있기 어렵습니다.

그렇다면 CPU와 실행 중인 프로그램이 이해하는 주소는 무엇일까요?

주소에는 메모리가 사용하는 물리 주소가 있고, CPU와 실행 중인 프로그램이 사용하는 논리 주소가 있습니다.

메모리가 사용하는 물리 주소는 말 그대로 정보가 실제로 저장된 하드웨어상의 주소를 의미합니다. 반면 CPU와 실행 중인 프로그램이 사용하는 논리 주소는 실행 중인 프로그램 각각에게 부여된 0번지부터 시작되는 주소를 의미합니다.

각각의 프로그램은 다른 프로그램의 메모리 주소를 알지 못합니다. 그래서 프로그램마다 모두 물리 주소가 아닌 0번지부터 시작하는 자신만을 위한 주소인 논리 주소를 가지고 있습니다.

CPU가 메모리와 상호작용 하려면 논리 주소와 물리 주소 간의 변환이 이루어져야 합니다. 그렇다면 논리 주소는 어떻게 물리 주소로 변환될까요? 논리 주소와 물리 주소 간의 변환은 CPU와 주소 버스 사이에 위치한 메모리 관리 장치(MMU)라는 하드웨어에 의해 수행됩니다.

MMU는 CPU가 발생시킨 논리 주소베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환합니다. 베이스 레지스터는 프로그램의 가장 작은 물리 주소, 즉 프로그램의 첫 물리 주소를 저장하는 셈이고, 논리 주소는 프로그램의 시작점으로부터 떨어진 거리입니다.

메모리 보호 기법

각 프로그램은 자신들이 사용할 메모리 범위를 가져가게 됩니다. 다른 프로그램에서 범위를 벗어나는 논리 주소를 요청하는 경우엔 어떻게 될까요?

이런식으로 자기 프로그램의 범위를 벗어나는 논리주소는 실행되어선 안됩니다. 그래서 자신의 메모리 범위를 벗어나는 명령어 실행을 방지할 방법이 필요한데, 이 부분은 한계 레지스터라는 레지스터가 담당하게 됩니다.

베이스 레지스터가 실행 중인 프로그램의 가장 작은 물리주소를 저장한다면, 한계 레지스터는 논리 주소의 최대 크기를 저장합니다. 즉, 프로그램의 물리 주소 범위는 베이스 레지스터 값 이상, 베이스 레지스터 값 + 한계 레지스터 값 미만이 됩니다.

CPU는 메모리에 접근하기 전에 접근하고자 하는 논리 주소가 한계 레지스터보다 작은지를 항상 검사합니다. 만약 CPU가 한계 레지스터보다 높은 논리 주소에 접근하려고 하면 인터럽트를 발생시켜 실행을 중단합니다.

캐시 메모리

CPU가 연산을 아무리 빨리해도 메모리에 접근하는 시간이 느리면 CPU의 빠른 연산 속도는 아무런 쓸모가 없겠죠? 이를 극복하기 위한 저장 장치가 바로 캐시 메모리 입니다.

캐시 메모리의 탄생 배경을 알려면 우선 저장 장치 계층 구조라는 개념을 이해해야 합니다.

저장 장치 계층 구조

저장 장치는 일반적으로 아래와 같은 명제를 따릅니다.

1. CPU와 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다

2. 속도가 빠른 저장 장치는 저장 용량이 작고, 가격이 비싸다.

컴퓨터가 사용하는 저장 장치들은 'CPU에 얼마나 가까운가'를 기준으로 계층적으로 나타낼 수 있습니다. 이를 저장 장치 계층 구조라고 합니다.

캐시 메모리

CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 느립니다. 그럼에도 불구하고 CPU는 프로그램을 실행하는 과정에서 메모리에 빈번히 접근해야만 합니다. 그래서 등장한 저장 장치가 캐시 메모리 입니다. 캐시 메모리는 CPU와 메모리 사이에 위치하고, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치 입니다.

우리가 사용하는 컴퓨터 내부에는 여러 개의 캐시 메모리가 있습니다. 이 캐시 메모리들은 CPU와 가까운 순서대로 계층을 구성합니다. 코어와 가장 가까운 캐시 메모리를 L1 캐시, 그다음을 L2 캐시, 그 다음을 L3 캐시라고 부릅니다.

참조 지역성 원리

캐시 메모리는 메모리보다 용량이 작습니다. 그래서 메모리에 있는 모든 내용을 가져다 저장할 수 없습니다. 그렇다면 캐시 메모리는 무엇을 저장해야 할까요?

캐시 메모리는 CPU가 사용할 법한 대상을 예측하여 저장합니다. 이때 자주 사용될 것으로 예측한 데이터가 실제로 들어맞아 캐시 메모리 내 데이터가 CPU에서 활용될 경우를 캐시 히트라고 합니다. 반대로 예측이 틀릴경우 캐시 미스라고 합니다.

그래서 캐시가 히트되는 비율을 캐시 적중률이라 하고 다음과 같이 계산합니다.

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

우리가 사용하는 컴퓨터의 캐시 적중률은 대략 85%~95% 이상 입니다. 캐시 메모리의 이점을 제대로 활용하려면 CPU가 사용할 법한 데이터를 제대로 예측해서 캐시 적중률을 높여야 합니다. 그렇다면 CPU가 사용할 법한 데이터는 어떻게 알 수 있을까요?

캐시 메모리는 한 가지 원칙에 따라 메모리로부터 가져올 데이터를 결정합니다. 바로 참조 지역성의 원리 입니다. 참조 지역성의 원리란 CPU가 메모리에 접근할 때의 주된 경향을 바탕으로 만들어진 원리입니다.

1. CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.

2. CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다.

자세하게 알아보겠습니다

최근에 접근했던 메모리 공간에 다시 접근하려는 경향은 무엇일까요?

프로그래밍에는 변수라는 개념이 있습니다. 변수에는 값을 저장하고 재사용하게 됩니다. 이는 CPU는 변수가 저장된 메모리 공간을 언제든 다시 참조할 수 있다는 것을 의미합니다. 그리고 변수에 저장된 값은 일반적으로 한 번만 사용되지 않고 프로그램이 실행되는 동안 여러 번 사용됩니다.

이렇게 '최근에 접근했던 메모리 공간에 다시 접근하려는 경향'을 시간 지역성이라고 합니다.

접근한 메모리 공간 근처를 접근하려는 경향은 무엇일까요?

CPU가 실행하려는 프로그램은 보통 관련 데이터들끼리 한데 모여 있습니다. 웹 브라우저 프로그램은 웹 브라우저 관련 데이터들이 모여 저장되고, 게임 프로그램은 게임 관련 데이터들이 모여 저장됩니다.

CPU가 하나의 프로그램을 실행할때 해당 프로그램과 연관된 데이터들 공간 근처를 집중적으로 접근할것입니다. 이렇게 '접근한 메모리 공간 근처를 접근하려는 경향'을 공간 지역성이라고 합니다.

스터디 프로필
코드 깎는 다람쥐
의 다른 카테고리
0
👍0
👏0
🤔
댓글 작성