카테고리
게시일
Oct 31, 2025
메모리란?
말 그대로 컴퓨터가 읽고 쓰는 정보를 보관하는 모든 장치(회로)를 메모리라고 한다.
- ROM - 읽기 전용 메모리. 애플리케이션 개발자는 굳이 다룰 일이 없지만, 만약 디바이스 소프트웨어를 개발한다면 자주 다루게 될 것이다. 말 그대로 공장에서 한번 쓰기 된 후 수정이 불가능하거나 힘든 메모리 종류가 속한다.
- RAM - Random Access가 가능한 메모리. 메모리마다 주소가 달려있고, 주소를 주면 곧바로 데이터를 읽을 수 있는 메모리를 말한다. (엄밀히는 ROM도 Random Access가 가능하지만 보통 RAM이라고 하면 읽기, 쓰기가 모두 가능한 메모리에 한정해서 일컫는다.) 일반적으로 맥락없이 메모리라고 하면 RAM을 의미한다. RAM은 휘발성 메모리로, 전원이 꺼지면 내용물이 날아간다.
- Storage - Secondary Storage (보조기억장치) 라고도 한다. 하드디스크나 SSD가 속한다. 보통 용량이 크고, 속도가 느리다. 보통 여기 들어가있는 데이터는 “파일 시스템”이라는 논리적 구조로 저장되어있다. 현대 Storage 들은 Random Access가 가능하지만, 대부분의 파일 시스템은 효율을 위해 논리적으로 순차접근을 하도록 구현되어있다.
물리 메모리의 종류
- 레지스터 : 플립플롭에 비트 저장, 휘발성, 반도체 메모리
- SRAM : 래치에 비트 저장, 휘발성, 반도체 메모리
- DRAM : 커패시터 셀에 비트 저장, 휘발성, 반도체 메모리
DRAM의 실제 구조 간단 요약

PC에 꽂히는 전형적인 형태의 메모리 모듈(DIMM)이다. PC 조립할때 RAM은 바로 이 DIMM을 의미한다.

메모리 모듈에는 여러개의 DRAM IC가 병렬로 묶여있다.
DRAM IC ├─ Bank 0 │ └─ 2D Cell Array (Row × Column) ├─ Bank 1 │ └─ 2D Cell Array ├─ Bank 2 └─ Bank 3 ...
메모리 모듈은 여러개의 Bank로 구성되어있다. Bank는 다시 여러개의 Row로 구성되어있다. DRAM이 메모리를 읽고 쓰는 기본 구조는 Row 단위이다. Column은 Row 안에서 데이터 위치고, CPU가 읽고 쓰는 데이터 선택 단위이다. 이미 열린 Row에서 Column만 바꿔가며 접근이 가능하다.

한 개의 bit는 커패시터와 트랜지스터로 구성된 Cell에 저장된다. 이런 구조는 SRAM에 비해 집적도를 크기 올리고 용량당 비용을 낮출 수 있지만, 전원이 인가된 중에도 주기적으로 전기적으로 리프레시를 해주어야 정보 보존이 가능하고, 더 느리다. 그래서 Dynamic - RAM이라고 불리는 것이다.
DRAM에는 여러 규격이 있지만, 현재는 업계 전체가 사실상 DDR 규격으로 표준화되어있다.
근래에는 연산장치에 적층되어 DRAM이 직접 붙는 HBM 기술이 개발되고 있고, 연산장치와 메모리간 병목을 해결할 것으로 기대된다.
- Flash : Floating gate 트랜지스터에 비트 저장, 비휘발성, 반도체 메모리
- 하드 드라이브 : 자기 디스크에 비트 저장, 비휘발성 (전원 꺼져도 보관), 자기 메모리
CPU 입장에서 접근 지연속도 순서 : 레지스터 > SRAM >> DRAM >>….>> 플래시 >> 하드 드라이브
메모리 계층
메모리 기술은 속도-용량 간 Trade-Off가 있다. 예를 들어 SRAM은 빠르지만 용량당 부피가 크고 생산 비용이 높다. 하드 드라이브는 용량이 크고 용량당 비용이 낮지만 속도가 매우 느리다. 그래서 컴퓨터 구조는 성능 향상을 위해 메모리를 계층으로 나눠놓은 것이다. 자주 바뀌고 자주 보는 메모리는 더 비싸지만 좋은 메모리를 쓰고, 덜 바뀌고 덜 보는 메모리는 더 저렴한 메모리를 쓰는 것이다.

- CPU 내부 레지스터 - 제일 빠르고, 제일 높은 빈도로 읽고 쓰는 메모리다.
- 캐시 - CPU와 주메모리(RAM) 사이에서 주메모리 중 자주 쓰이는 부분을 CPU가 빠르게 접근할 수 있게 저장한다. 일반적으로 SRAM이 사용된다. 과거에는 별도의 칩으로 독립되어 있었지만, 요즘엔 CPU 내부에 캐시 메모리가 포함되어있다. 캐시 메모리의 용량도 CPU 성능에 큰 영향을 미친다.
- 주메모리(RAM) - 운영체제 코드, 프로그램 코드, 변수 등을 저장한다. 일반적으로 DRAM이 사용된다.
- 보조 저장장치(Storage) - 파일을 저장한다. 일반적으로 Flash 드라이브나 하드 드라이브가 사용된다. (DVD, USB 메모리, 과거의 플로피 디스크 따위도 보조 저장장치로 볼 수 있다.)
사실 요즘에는 보조저장장치 내부에도 SRAM, DRAM 캐시를 넣어서 성능을 향상시키고 있다.
물리주소
실제 물리적 메모리가 가지는 물리주소를 말한다. CPU는 최종적으로는 메모리에 물리주소로 접근하게 된다.
Byte Address
현대 대부분의 상용 컴퓨터 시스템(x86, arm 등)에서는 메모리의 한 주소가 Byte단위로 지정된다. 즉 한 주소당 8bit의 데이터를 지정하는 것이다.
CPU에서 메모리를 가져올 때는 워드 단위로 가져온다. 이는 메모리와 CPU간의 통신에서 한 주소씩 꺼내와 CPU에 적재하는 것 보다는 워드 단위로 한번에 끌어오는 것이 훨씬 좋기 때문이다.
왜 CPU로 가져올 때 워드 단위로 가져오는데 왜 여전히 Byte단위로 주소 지정을 하는가?
여러 이유가 있기 때문이지만, Byte 단위의 자료 조작을 CPU 아키텍쳐 단위로 지원하기 위해서이다. 많은 CPU가 byte단위의 적재, 저장 명령어를 갖추고 있다. 이런 기능 덕에 1Byte 자료형이 ASCII 문자형을 적재, 저장하기 편하고, 포인터로 쉽게 메모리 조작이 가능해진다. e.g.) x86의 mov BYTE 명령어
MMU
Cpu안에 내장된 메모리를 제어하는 장치이다. 후술할 가상 주소로의 번역도 이 MMU가 담당한다.
가상주소(=논리주소)

프로그램은 가상 주소라는 것을 사용해서 메모리를 다룬다. 프로그램이 쓰는 가상주소는 CPU 내부의 MMU라는 장치에서 물리주소로 번역된다. 이 MMU를 세팅해주는 일을 운영체제가 “페이징”이라는 메모리 관리 기법으로 수행 한다.
논리주소와 가상주소는 엄밀히는 다른 개념이지만, 현대에는 사실상 둘을 구분하는 의미가 없다.
현대 대부분의 컴퓨터 시스템의 가상주소는 64bit 크기를 가진다. 그러나 64bit 가상주소를 사용하는 경우에도 실제 메모리의 물리주소는 여전히 40bit ~ 52bit 수준에 머물러 있다. 애초에 64bit 주소를 전부 쓰는 메모리 장치는 현 시점에서 개발이 불가능하다. (대략 16 엑사바이트 정도 된다. 참고로 구글 데이터센터 전체 용량이 대략 수십 엑사바이트로 추정되고있는 상황이다.)
가상주소의 크기는 cpu의 word크기와도 관계가 있는데, 자세한건 아래 글 참고
Word Size→ 이후 캐싱과 페이징에 대해 알아볼 것이다.