백엔드

가상 메모리(Virtual Memory)와 페이지(Page)

땅다람쥐 2026. 5. 23. 12:54

요약

1. 가상 메모리는 OS가 할당해주는 물리적으로 존재하지 않는 메모리.

2. 이 메모리를 이용해서 Page Table을 만들어 가상 메모리와 물리적 메모리와 연결

3. 가상 메모리와 연결된 물리적 메모리가 없으면 Page Fault 발생.

 

Generated by GPT

가상 메모리(Virtual Memory)는 뭘까?


컴퓨터 구조(Machine Architecture) 수업을 들은 분들은 RAM 혹은 캐시(Cache)에서 말하는 메모리의 의미를 이해하고 계실겁니다. 데이터를 임시적으로 저장해놓고 하드 디스크(Hard Disk)에 안가고 바로 필요한 정보를 가져오게 되죠. 그럼 가상 메모리(Virtual Memory)도 그런 비슷한 기능을 하는걸까요?

 

결론부터 말씀드리면, 가상 메모리는 RAM처럼 실제 데이터를 직접 들고 있지는 않습니다. 대신 운영체제(OS)가 각 프로그램에게 가짜 메모리 공간을 가상으로 떼어주는 데요. 이 과정에서 가짜 주소와 실제 데이터의 위치를 연결해 주는 페이지 테이블(Page Table)을 만드는 데 꼭 필요한 개념입니다.

 

페이지(Page)와 페이지 테이블(Page Table)


페이지 테이블에 대해 설명하기 앞서서 페이지(Page)에 대한 개념을 설명해야 될 것 같습니다. 페이지는 단순하게 가상 메모리를 특정 크기(주로 4KB)로 잘라놓은 한 조각입니다. 이 조각에는 프로세스가 가지고 있는 주소 공간(e.g. 코드영역, 데이터 영역, 힙 영역, 스택 영역)을 아래 그림처럼 파편화된 채로 가지고 있죠. 

 

그리고 페이지 테이블은 이 가상 페이지들을 실제 메모리 주소와 연결해 주는 역할을 합니다. 예를 들어, 가상 메모리의 'Page 0'이 실제 물리 메모리의 'Frame 3'에 저장되어 있다면, 페이지 테이블이 그 둘의 위치를 매핑(연결)해 놓고 있는 거죠. 그럼 여기서 질문이 생길 것 같습니다. 왜 굳이 가상 메모리를 사용하고, 페이지 테이블을 만드는 방식으로 운영체제는 디자인이 됐을까요?

 

다양한 이유가 있겠지만, 대표적인 핵심은 바로 효율성과 속도 때문입니다. 실제로 메모리에 데이터가 저장될 때는 한 곳에 깔끔하게 뭉쳐서 저장되는 게 아니라, 빈 공간을 찾아 이곳저곳 '조각 조각' 흩어져서 저장되곤 합니다.

만약 가상 메모리가 없다면 프로세스가 실행될 때마다 이 흩어진 조각들의 실제 위치를 일일이 계산하고 찾아다녀야 해서 시간이 오래 걸리겠죠? 하지만 가상 메모리와 페이지 테이블을 사용하면, 프로세스 입장에서는 데이터가 연속적으로 예쁘게 모여있는 것처럼 보이기 때문에 필요한 주소를 바로바로 헤매지 않고 찾을 수 있게 됩니다. 하지만 만약에 가상 메모리와 연결된 메모리 주소가 존재하지 않는다면 어떻게 될까요?

페이지 폴트 (Page fault)


가상 메모리와 연결된 메모리 주소가 존재하지 않을 때는 페이지 폴트(Page fault)라는 현상이 발생합니다. 이러한 현상이 발생하게 되면, 하드 디스크라라는 심연까지 데이터를 찾으러 멀리 떠나야 합니다. 디스크에서 데이터를 찾으면 물리 메모리(RAM)의 빈 공간에 쏙 집어넣은 뒤, 페이지 테이블의 연결선을 그 새 자리로 최신화해 줍니다.

 

여기서 재밌는 사실이 하나 있습니다. 프로그램(프로세스)이 처음 켜질 때, 처음 생성된 가상 주소들은 무조건 이 페이지 폴트를 겪게 됩니다.

왜 그럴까요? 이유는 간단합니다. 운영체제가 미리 데이터를 RAM에 다 올려두는 게 아니라, 일단 가상 메모리만 먼저 깔아두기 때문입니다. 즉, 첫 실행 시점에는 실제 메모리에 연결된 데이터가 당연히 '아무것도 없기' 때문에, 일단 첫 페이지 폴트라는 쾅(!) 소리를 내며 심연에서 데이터를 하나씩 끌어올리면서 컴퓨터가 작동하기 시작하는 것이죠.

 

미리 RAM에 데이터를 올려놓는 것이 아닌, 필요할 때마다 가져오는 방식을 Demand Paging이라고 부릅니다.

 

 

 

 

 

 

References


1. https://docs.kernel.org/mm/page_tables.html

 

Page Tables — The Linux Kernel documentation

Page Tables Paged virtual memory was invented along with virtual memory as a concept in 1962 on the Ferranti Atlas Computer which was the first computer with paged virtual memory. The feature migrated to newer computers and became a de facto feature of all

docs.kernel.org

2. https://www.geeksforgeeks.org/operating-systems/what-is-demand-paging-in-operating-system/

 

Demand Paging in Operating System - GeeksforGeeks

Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and programming, school education, upskilling, commerce, software tools, competitive exams, and more.

www.geeksforgeeks.org

3. 컴퓨터 밑바닥의 비밀 chapter 3.1 - 3.2

'백엔드' 카테고리의 다른 글

TCP의 혼잡 제어  (0) 2026.05.30
OSI 7계층과 TCP/IP 4계층  (0) 2026.05.30
CPU와 GPU: 왜 AI는 CPU말고 GPU를 사용할까?  (0) 2026.05.23
RAM보다 더 빠르게: 캐시  (0) 2026.05.22
REST API란 뭘까요?  (0) 2022.01.30