1.시스템&인프라/개발 입문자를 위한 운영체제

10편. 가상 메모리란? – RAM보다 많은 프로그램을 실행하는 비결

쿼드큐브 2025. 11. 20. 17:46
반응형
반응형

10편. 가상 메모리란? – RAM보다 많은 프로그램을 실행하는 비결

 

📚 목차
1. 실제 메모리와 가상 메모리 - 왜 둘로 나눴을까?
2. 페이지(Page)와 프레임(Frame) - 메모리를 쪼개서 쓰는 이유
3. 주소 변환의 핵심 - 페이지 테이블과 TLB
4. 실습: 리눅스와 윈도우에서 가상 메모리 확인하기
✔ 마무리 - 단순한 기술이 아닌 운영체제의 핵심 전략

 

 

우리는 매일 컴퓨터에서 여러 프로그램을 동시에 실행합니다. 웹 브라우저, 메신저, 동영상 플레이어, 코드 편집기 등 수많은 앱이 동시에 돌아가지만, 컴퓨터가 무한한 메모리를 갖고 있는 건 아닙니다. 실제로는 제한된 양의 RAM(주기억장치)만 있을 뿐이죠.

 

그런데도 많은 프로그램이 부드럽게 돌아가는 이유는 무엇일까요?


그 핵심 기술이 바로 운영체제가 제공하는 가상 메모리(Virtual Memory)입니다.

가상 메모리 개념도
가상 메모리 개념도


이번 글에서는 가상 메모리의 개념부터, 운영체제가 이를 어떻게 관리하고 사용하는지, 그리고 실제 시스템에서 메모리 상태를 확인하는 방법까지 단계적으로 살펴보겠습니다.

 

1. 실제 메모리와 가상 메모리 – 왜 둘로 나눴을까?

컴퓨터가 어떤 프로그램을 실행하려면, 그 프로그램의 코드와 데이터가 반드시 RAM에 올라와 있어야 합니다.
RAM은 CPU가 연산에 사용할 수 있는 가장 빠른 작업 공간이기 때문입니다.

이 메모리는 CPU가 데이터를 처리하는 데 필요한 작업 공간입니다. 그런데 문제는 우리가 사용하는 프로그램이 하나만 실행되는 게 아니라는 점입니다.


브라우저, 메신저, 음악 플레이어, 코드 편집기 등 수많은 앱과 백그라운드 프로세스가 동시에 실행됩니다. 하지만 컴퓨터에 장착된 실제 메모리(물리 메모리)는 한정되어 있기 때문에, 모든 프로그램에 충분한 공간을 제공할 수는 없습니다.


이 문제를 해결하기 위해 등장한 것이 바로 가상 메모리(Virtual Memory)입니다.

 

🔷 RAM이란?

RAM(Random Access Memory)은 컴퓨터 내부에 실제로 장착된 물리적인 메모리 공간입니다.

프로그램을 실행하거나 데이터를 처리할 때, CPU는 이 RAM에서 데이터를 가져오고 저장합니다.

 

비유하자면,

RAM은 마치 책상 위의 작업 공간과 같습니다.

작업하려면 책을 책장에서 꺼내 책상 위에 펼쳐야 하듯, 프로그램도 RAM에 올라와 있어야 실행됩니다.

 

예를 들어, RAM이 꽉 찼을 때는 오래 안 쓴 브라우저 탭이 자동으로 새로고침되기도 합니다. → 이는 RAM에서 내려갔다가 다시 올라오는 과정, 즉 스와핑의 결과입니다.

 

🔷 가상 메모리(Virtual Memory)란?

가상 메모리는 운영체제가 제공하는 논리적 주소 공간입니다.

물리적인 RAM과 별개로, 각 프로그램이 사용할 수 있는 가상의 주소 범위를 만들어주는 기술입니다.

각 프로세스는 자신만의 독립된 주소 공간을 갖고 있으며, 운영체제가 이를 실제 메모리나 디스크로 매핑해서 관리합니다.

즉, 가상 메모리는 한정된 물리 메모리를 더 넓게 쓰게 해주는 착시 공간이며, 운영체제의 똑똑한 분할 기술 덕분에 가능한 기능입니다.

 

만약 실제 메모리가 부족하면, 운영체제는 일부 데이터를 디스크(스왑 공간)으로 보내고, 필요할 때 다시 불러오는 방식으로 처리합니다. 이 과정을 스와핑(Swapping)이라고 합니다.

 

🔷 가상 메모리와 실제 메모리의 분리 구조

가상 메모리와 실제 메모리의 분리 구조
가상 메모리와 실제 메모리의 분리 구조

 

이 그림은 운영체제의 가상 메모리 관리 방식을 시각적으로 나타낸 개념도입니다.

▸ 각 프로그램은 자신만의 0x00000000 ~ 0xFFFFFFFF 같은 가상 주소 공간을 갖습니다.

▸ 실제 메모리(RAM)의 주소와는 다르며, 운영체제가 이를 주소 변환(Memory Mapping)하여 관리합니다.
▸ 메모리가 부족하면, 일부 데이터는 디스크(Swap 공간)로 이동하며, 필요할 때 다시 불러옵니다.


이 구조를 통해 운영체제는

▸ 프로그램끼리 메모리를 안전하게 분리하고,

▸ 실제보다 훨씬 많은 프로그램을 동시에 실행하며,
▸ 메모리 보호와 보안성까지 확보할 수 있게 됩니다.

 

🔷 가상 메모리 도입의 주요 이점

🔸 프로세스 간 간섭 방지

각 프로세스는 자신만의 메모리 공간을 사용하는 것처럼 보이므로, 다른 프로세스의 데이터를 침범하거나 읽는 일이 원천적으로 차단됩니다.

이는 보안성과 안정성을 크게 향상시킵니다.

🔸 메모리 부족 상황에서의 유연한 대처 (스와핑)

사용하지 않는 데이터를 디스크로 임시 보관하고, 필요한 시점에 다시 불러오는 방식으로, 실제 메모리보다 더 많은 프로그램을 실행할 수 있습니다.

이 과정을 스와핑(Swapping)이라고 부릅니다.

🔸 메모리 보호 및 프로그램 오류 격리

프로세스가 잘못된 메모리 주소에 접근하면, 운영체제가 이를 감지하고 Segmentation Fault(세그멘테이션 오류)와 같은 방식으로 프로그램을 종료시킵니다.

다른 프로그램까지 영향을 주지 않도록 문제의 범위를 최소화합니다.

 

예를 들어, 메모리가 8GB밖에 없는 시스템에서도 브라우저, IDE, 동영상 플레이어 등 여러 앱을 동시에 실행할 수 있는 이유는 바로 가상 메모리가 모든 앱에 독립된 주소 공간을 제공하면서, 필요한 순간에만 데이터를 물리 메모리에 올리기 때문입니다.

 

2. 페이지와 프레임 – 메모리를 쪼개서 쓰는 이유

우리가 여러 프로그램을 동시에 실행할 때, 각 프로그램은 마치 자신만의 넓고 연속된 메모리 공간을 갖고 있는 것처럼 동작합니다.

하지만 실제 메모리는 조각조각 나뉘어 있으며, 운영체제가 이를 페이지(Page)와 프레임(Frame)이라는 단위로 쪼개어 관리하기 때문에 가능한 일입니다.

 

이 구조를 이해하면, 메모리를 더 유연하고 효율적으로 사용하는 운영체제의 똑똑한 전략을 이해할 수 있게 됩니다.

 

🔷 페이지(Page)란?

페이지는 운영체제가 가상 메모리 공간을 일정한 크기로 나눈 논리적 단위입니다.

모든 프로그램은 가상 메모리를 일정 크기의 블록으로 나눠서 사용하며, 이 블록 하나하나가 페이지입니다.

 

▸ 일반적으로 4KB 또는 8KB 크기로 나뉘며, 시스템 설정에 따라 다를 수 있습니다.

▸ 예를 들어, 어떤 프로그램이 32KB의 메모리를 필요로 한다면, 4KB 단위로 나눈 8개의 페이지로 구성됩니다.

 

이렇게 나누는 이유는?

▸ 프로그램 전체를 한꺼번에 메모리에 올릴 필요 없이, 필요한 부분만 선택적으로 불러올 수 있기 때문입니다.

▸ 이는 메모리 사용의 효율성과 유연성을 크게 높여 줍니다.

 

🔷 프레임(Frame)이란?

프레임은 페이지와 동일한 크기로 나뉜 실제 물리 메모리(RAM)의 조각입니다.

운영체제는 프로그램의 페이지를 실제 메모리의 프레임에 1:1로 매핑하여 데이터를 저장합니다.

▸ 즉, 페이지는 프로그램이 인식하는 가상 공간의 블록,

▸ 프레임은 운영체제가 관리하는 현실 공간의 블록입니다.


이 매핑 덕분에, 운영체제는 가상 주소를 실제 주소로 연결하고, 페이지가 어디에 있든 문제없이 실행되도록 처리할 수 있습니다.

 

🔷도서관에 비유해 보기

이 구조는 도서관에 비유하면 아주 쉽게 이해할 수 있습니다.

▸ 한 권의 책 = 프로그램(프로세스)
▸ 책의 여러 장 = 페이지(Page)
▸ 도서관 선반 칸 = 프레임(Frame)
▸ 사서 = 운영체제

 

도서관에는 책을 순서대로 진열할 선반이 부족할 수 있습니다.

그래서 사서(운영체제)는 책의 페이지들을 도서관 선반 여기저기에 흩어 저장합니다.

그럼에도 사용자는 책을 펼쳐 읽듯, 페이지 순서를 의식하지 않고 자연스럽게 읽을 수 있습니다.
→ 운영체제가 페이지 위치를 기억하고 연결해 주기 때문에 가능한 일입니다.

 

🔷 페이지와 프레임 매핑 구조도

가상 메모리의 각 페이지가 실제 메모리의 프레임에 어떻게 대응되는지 시각적으로 표현한 구조도입니다.

페이지와 프레임 매핑 구조도
페이지와 프레임 매핑 구조도

설명

▸ 페이지 0은 실제 메모리의 프레임 5에 저장
▸ 페이지 1은 프레임 2에 저장
▸ 페이지 2는 메모리에 없고, 디스크의 스왑 공간에 저장됨

 

이 구조를 통해 다음과 같은 사실을 알 수 있습니다:

▸ 페이지들은 RAM의 임의 위치에 매핑될 수 있으며, 반드시 연속되어 있을 필요는 없습니다.
▸ 일부 페이지는 RAM에 없고, 디스크에 임시로 저장될 수 있습니다.
▸ 하지만 프로그램 입장에서는 여전히 연속된 메모리를 사용하는 것처럼 보입니다.

즉, 가상 메모리는 논리적으로 연속되지만, 실제 메모리(RAM)는 불연속적이고 조각난 상태일 수 있습니다.

 

🔷 왜 이렇게 복잡하게 나눌까요?

페이지-프레임 구조는 다소 복잡해 보이지만, 운영체제가 이를 선택한 데는 명확한 이유들이 있습니다.

 

🔸1. 조각난 메모리 공간도 효율적으로 사용 가능

RAM에 큰 빈 공간이 없어도, 작은 프레임 단위로 프로그램을 분산 배치할 수 있습니다.

→ 큰 프로그램도 쪼개서 조각난 메모리에 담을 수 있게 됩니다.

🔸 2. 프로그램 간 메모리 격리 가능

각 프로그램은 고유한 가상 주소 공간을 갖고, 운영체제는 페이지-프레임 매핑으로 서로 다른 공간처럼 분리해 줍니다.
→ 메모리 침범 방지, 보안 강화, 안정성 확보

🔸 3. 필요한 부분만 메모리에 올릴 수 있음
전체를 올릴 필요 없이, 자주 쓰는 페이지만 메모리에 올리고 나머지는 디스크에 저장해 두는 방식으로 RAM 사용을 최소화할 수 있습니다.
→ 이를 통해 메모리 절약과 성능 최적화가 동시에 이루어집니다.

반응형

 

3. 주소 변환의 핵심 – 페이지 테이블과 TLB

우리가 사용하는 프로그램은 메모리에 접근할 때 가상 주소(Virtual Address)를 사용합니다.

하지만 이 가상 주소는 실제 메모리(RAM)의 물리 주소와 직접 연결되어 있지 않습니다.


그렇다면 컴퓨터는 어떻게 실제 RAM의 위치를 찾아내고, 데이터를 읽거나 쓸 수 있을까요?

그 핵심 열쇠가 바로 페이지 테이블(Page Table)과 TLB(Translation Lookaside Buffer)입니다.
이 두 구조는 마치 지도와 즐겨찾기 목록처럼 함께 작동하며, CPU가 원하는 데이터를 빠르게 찾아낼 수 있도록 도와줍니다.

 

🔷 페이지 테이블(Page Table)은 주소 변환을 위한 “지도”

운영체제는 각 프로그램(프로세스)에게 가상 주소 공간을 제공합니다.

하지만 이 가상 주소는 실제 메모리(RAM)의 위치가 아니기 때문에, 이를 어떤 물리 주소에 대응시킬지 관리하는 정보가 필요합니다.

 

이 역할을 담당하는 것이 바로 페이지 테이블입니다.

▸ 가상 주소를 페이지 번호 + 오프셋(offset)으로 분리
▸ 페이지 번호를 키로 하여, 해당 페이지가 어떤 프레임(Frame)에 매핑되어 있는지를 조회
▸ 이를 통해 가상 주소 → 물리 주소 변환을 수행

 

🔸예시

▸ 어떤 프로그램이 가상 주소 0x3000번지를 요청했다고 가정해 봅시다.

▸ 이 주소는 페이지 번호 3번에 해당하고, 페이지 테이블에는
→ 페이지 3번이 프레임 5번에 매핑되어 있다고 기록되어 있습니다.

▸ 운영체제는 이 정보를 바탕으로 CPU가 RAM의 프레임 5에 접근하도록 명령합니다.

 

🔷 TLB(Translation Lookaside Buffer)는 주소 변환을 위한 “즐겨찾기 목록”

페이지 테이블은 RAM에 저장되어 있으며, 주소 변환 시마다 이를 조회해야 합니다.

하지만 수천만, 수억 번의 메모리 접근마다 이 테이블을 참조한다면 속도는 치명적으로 느려질 수 있습니다.


이 문제를 해결하기 위해 등장한 것이 바로 TLB(Translation Lookaside Buffer)입니다.

 

🔸TLB란?

▸ CPU 안에 내장된 소형 캐시 메모리

▸ 최근에 사용된 주소 변환 결과를 저장하여, 다음 접근 시 빠르게 재사용 가능
▸ 즉, 페이지 테이블을 자주 참조하지 않고도 주소 변환 가능

 

🔸TLB의 작동 흐름

▸ CPU가 가상 주소 A에 접근

▸ TLB에 A에 대한 변환 정보가 있으면 → 즉시 물리 주소로 변환 (매우 빠름)

▸ 없다면 → 페이지 테이블을 조회 → 변환 결과를 TLB에 저장

이처럼 TLB는 자주 사용하는 주소를 빠르게 접근할 수 있도록 도와주는 즐겨찾기 캐시 역할을 수행합니다.

 

비유하자면, 매번 도서관 지도를 펼치지 않고, 자주 가는 서가 위치를 사서가 외워서 바로 안내해주는 것과 비슷합니다.

 

🔷 TLB가 꼭 필요한 이유

현대 컴퓨터는 하루에도 수십억 번 메모리 접근을 수행합니다.

만약 이때마다 페이지 테이블을 매번 조회한다면, 전체 시스템 성능이 심각하게 저하됩니다.

 

TLB를 사용하는 이유는?
주소 변환 속도 향상 (수십 배 이상 차이 날 수 있음)
CPU 파이프라인 처리 효율 유지
메모리 병목(Bottleneck) 방지

 

예를 들어, 반복문 안에서 동일한 배열 요소에 접근하는 경우, 페이지 테이블 대신 TLB를 통해 주소를 캐싱해두면 훨씬 빠르게 실행됩니다.
실제로 대부분의 주소 변환은 TLB 히트(hit)로 처리되며, TLB에 없는 경우에만 페이지 테이블을 보조 수단처럼 활용하게 됩니다.

 

4. 실습: 리눅스와 윈도우에서 가상 메모리 확인하기

가상 메모리가 어떻게 작동하는지 확인하는 가장 좋은 방법은 직접 시스템의 메모리 상태를 보는 것입니다.

 

🔷 Ubuntu

리눅스에서는 다음 두 가지 명령어를 통해 메모리 상태와 스와핑 활동을 확인할 수 있습니다.

🔸free -h – 전체 메모리 상태 요약

free -h

free -h 결과 예시
free -h 결과 예시

▸total : 시스템 전체 메모리 용량

▸used: 현재 사용 중인 물리 메모리

▸free : 아무것도 할당되지 않은 순수한 여유 공간

▸shared: 여러 프로세스가 공유하는 메모리 (예: 쉘 터미널 등)

▸buff/cache: 운영체제가 파일 캐시와 버퍼 용도로 잡아둔 공간
▸available: 애플리케이션이 추가로 사용할 수 있는 실질적 여유 공간
▸Swap: 물리 메모리가 부족할 때 사용하는 디스크 기반 임시 메모리

 

주의할 점: free가 많다고 해서 시스템이 여유 있는 것은 아닙니다.

실제로는 available 값을 보는 것이 더 정확합니다.

 

🔸 vmstat 1 5 – 실시간 메모리 및 스와핑 활동 모니터링

vmstat 1 5

# 1초 간격으로 5번 측정합니다.

vmstat 1 5 출력 예시
vmstat 1 5 출력 예시

▸ si (swap in) : 디스크에서 메모리로 데이터를 다시 불러온 횟수

▸ so (swap out) : 메모리에서 디스크로 데이터를 내보낸 횟수

▸ free : 현재 여유 메모리 양

▸ cache : 캐시로 사용 중인 메모리 양

 

si와 so 값이 0보다 크면, 현재 스와핑이 발생 중이라는 의미입니다.

즉, 메모리가 부족해 일부 데이터를 디스크에 임시 저장하거나, 다시 불러오는 상황입니다.

 

🔷 Windows

Windows에서도 Ctrl + Shift + Esc 키를 눌러 작업 관리자를 실행하여 간단하게 현재 메모리 사용량을 확인할 수 있습니다.

Windows에서 메모리 확인하기
Windows에서 메모리 확인하기

PowerShell에서 다음 명령어를 입력하면, 현재 실행 중인 프로세스 중에서 메모리를 가장 많이 사용하는 상위 10개 프로세스를 확인할 수 있습니다.

Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 10

Windows 상위 10개 프로세스 확인 예시
Windows 상위 10개 프로세스 확인 예시

 

✔ 마무리 - 단순한 기술이 아닌 운영체제의 핵심 전략

가상 메모리는 단순히 ‘메모리를 더 많이 쓰는 기술’이 아닙니다.

이는 운영체제가 수많은 프로그램을 안정적이고 효율적으로 관리하는 핵심 설계입니다.


🔸페이지와 프레임으로 쪼개고,

🔸주소 변환을 페이지 테이블 + TLB로 최적화하고,
🔸부족할 땐 스와핑으로 확장하는 구조는,
🔸제한된 자원을 최대한 활용하기 위한 운영체제의 똑똑한 전략입니다.


이 구조를 이해하면, 메모리 부족, 속도 저하, 스와핑 과다 같은 현상도 눈에 보이기 시작합니다.

또한 서버 성능 튜닝이나 문제 진단 시, RAM 사용량만 보는 것이 아닌 구조 전체를 이해하는 시야를 갖게 됩니다.

 

 


※ 게시된 글 및 이미지 중 일부는 AI 도구의 도움을 받아 생성되거나 다듬어졌습니다.

반응형

 

반응형