Skip to content

06. 가상 메모리와 가상화

학습 목표

  • 가상 메모리(Virtual Memory)의 개념과 필요성을 이해한다.
  • 프로세스별 가상 주소 공간(VMS)의 구조를 설명할 수 있다.
  • 페이지(Page), Page In/Out의 동작 원리와 성능 영향을 파악한다.
  • 가상 메모리가 제공하는 프로세스 격리와 보호의 의미를 설명할 수 있다.
  • 가상화(Virtualization) 기술의 기본 개념과 클라우드와의 관계를 이해한다.

전체 구조


1. Virtual = Logical = 소프트웨어적 (복습)

이전 챕터에서 배운 핵심 개념을 간략히 되짚어 보자.

용어의미
Physical (물리적)실제 존재하는 하드웨어 그 자체
Virtual / Logical (가상적 / 논리적)소프트웨어로 구현된 것, 실체가 아닌 "추상화된" 것

컴퓨터 과학에서 Virtual이라는 단어가 붙으면, 그것은 소프트웨어적으로 만들어낸 것이라는 뜻이다.

  • 물리적(Physical) 메모리 = 실제 컴퓨터에 꽂혀 있는 RAM 하드웨어
  • 가상(Virtual / Logical) 메모리 = 운영체제(OS)가 프로세스에게 보여주는 메모리

프로세스 입장에서는 자신이 메모리를 독점적으로 사용한다고 느끼지만, 실제로는 OS가 물리 메모리와 하드디스크를 조합해서 "메모리가 충분하다"는 환상을 만들어 주는 것이다.


2. 가상 메모리가 필요한 이유

문제 상황

컴퓨터의 RAM이 8GB라고 하자. 각 프로그램이 평균 800MB의 메모리를 사용한다면, 동시에 약 10개의 프로그램만 실행할 수 있다.

그런데 만약 15개의 프로그램을 동시에 돌리고 싶다면? RAM만으로는 물리적으로 불가능하다.

해결: 하드디스크의 일부를 RAM처럼 사용

가상 메모리는 RAM + 하드디스크의 일부 영역을 합쳐서 하나의 커다란 논리적 메모리 공간으로 만든다.

  • RAM에 당장 필요한 데이터를 올려두고
  • 지금 당장 안 쓰는 데이터는 하드디스크에 내려놓고
  • 필요할 때 다시 RAM으로 가져온다

하드디스크는 RAM보다 훨씬 느리기 때문에 성능은 떨어지지만, 더 많은 프로그램을 동시에 실행할 수 있게 된다.

실생활 비유: 책상과 바닥

공부할 때 책상(RAM) 위에 교과서를 다 올려놓으면 편하지만, 책상이 작으면 다 올려놓을 수가 없다. 그래서 당장 안 보는 책은 바닥(하드디스크)에 내려놓고, 필요한 책만 책상 위에 올려놓는다. 바닥에서 다시 꺼내오는 건 귀찮고 느리지만, 적어도 모든 과목을 공부할 수는 있다.


3. VMS (Virtual Memory Space) - 프로세스별 가상 주소 공간

프로세스마다 독립된 메모리 공간

운영체제는 각 프로세스에게 **독립적인 가상 메모리 공간(VMS)**을 부여한다.

  • 32비트 프로세스: 최대 4GB의 가상 주소 공간
  • 64비트 프로세스: 이론상 16EB(엑사바이트)의 가상 주소 공간 (실제로는 훨씬 적게 사용)

핵심은 각 프로세스가 "나만의 4GB(또는 그 이상)의 메모리가 있다"고 착각한다는 점이다. 실제로 대부분의 프로그램은 수백 MB 정도만 사용하며, OS는 실제로 사용하는 부분만 물리 메모리(RAM)에 매핑한다.

실생활 비유: 아파트 단지

아파트 단지에서 각 동(프로세스)은 독립된 주소 체계를 가진다. A동 101호와 B동 101호는 같은 "101호"지만 완전히 다른 집이다. 각 동은 자기 동의 주소 체계만 알면 되고, 다른 동의 내부 구조를 알 필요가 없다.

프로세스 A와 프로세스 B는 동일한 가상 주소(예: 0x1000)를 사용할 수 있지만, MMU(메모리 관리 장치)를 통해 서로 다른 물리 메모리 영역에 매핑된다. 서로의 메모리에 접근할 수 없으므로 완벽하게 격리된다.


4. 페이지(Page) - 가상 메모리의 관리 단위

가상 메모리를 관리할 때, 바이트 단위로 관리하면 너무 세밀해서 효율이 떨어진다. 그래서 OS는 메모리를 "페이지"라는 일정한 크기의 블록으로 나누어 관리한다.

개념설명
페이지(Page)가상 메모리의 관리 단위 (일반적으로 4KB)
프레임(Frame)물리 메모리(RAM)의 관리 단위 (페이지와 같은 크기)
페이지 테이블(Page Table)가상 페이지 -> 물리 프레임의 매핑 정보를 담은 표

각 페이지는 다음 두 곳 중 하나에 존재한다.

  1. **RAM(물리 메모리)**에 올라와 있음 -- 빠르게 접근 가능
  2. **하드디스크(스왑 영역)**에 내려가 있음 -- 접근 시 RAM으로 다시 올려야 함

프로세스 입장에서는 페이지가 어디에 있든 상관없이 동일한 가상 주소로 접근할 수 있다. 페이지의 물리적 위치를 추적하고 관리하는 것은 전적으로 OS의 몫이다.


5. 페이지 인/아웃 (Page In / Page Out = Swap In / Swap Out)

상황 예시

Word 프로그램이 RAM을 많이 차지하고 있는 상태에서, Chrome 브라우저를 새로 실행하려고 한다. 그런데 RAM이 꽉 차서 Chrome을 위한 공간이 없다.

이때 OS가 하는 일은 다음과 같다.

  1. Page Out (Swap Out): Word가 현재 안 쓰고 있는 페이지들을 RAM에서 하드디스크로 이동시킨다.
  2. Page In (Swap In): Chrome이 필요한 페이지를 하드디스크에서 RAM으로 가져온다.

이 과정에서 하드디스크 읽기/쓰기가 빈번하게 발생한다. 하드디스크(특히 HDD)는 RAM보다 수만~수십만 배 느리므로, 이때 시스템이 "버벅거리게" 된다.

컴퓨터가 느려지면서 하드디스크에서 "드르륵" 소리가 나는 이유가 바로 이 Page In/Out 때문이다.

용어 정리

용어방향의미
Page Out (Swap Out)RAM --> 하드디스크안 쓰는 페이지를 디스크로 내보냄
Page In (Swap In)하드디스크 --> RAM필요한 페이지를 RAM으로 가져옴
Page Fault-RAM에 없는 페이지에 접근 시 발생하는 이벤트

6. 페이징의 성능 문제

RAM이 부족하면 무슨 일이 벌어지는가

RAM이 부족할수록 Page In/Out이 빈번하게 발생한다. 이것이 시스템 성능을 심각하게 저하시키는 원인이다.

증상원인
프로그램 전환 시 "응답 없음" 표시Page Fault 발생 후 Page In 대기
전체적인 시스템 버벅거림여러 프로그램이 동시에 Page In/Out 경쟁
하드디스크가 계속 돌아감 (HDD 소음)Page Out/In을 위한 디스크 I/O
극단적인 경우 시스템 먹통 (Thrashing)Page In/Out만 반복하며 실제 작업을 못함

Thrashing(쓰래싱): RAM이 극도로 부족하면 OS가 Page In하자마자 바로 다른 페이지를 Page Out해야 하는 상황이 반복된다. 이렇게 되면 CPU가 실제 작업은 하지 못하고 페이지 교체만 계속하게 되어 시스템이 사실상 멈춘 것처럼 느껴진다.

해결 방법

방법효과
RAM 용량 늘리기근본적인 해결. Page In/Out 빈도 자체가 줄어듦
동시 실행 프로그램 수 줄이기필요한 메모리 총량이 줄어서 Page Fault 감소
HDD를 SSD로 교체Page In/Out 속도가 빨라짐 (근본 해결은 아님)
불필요한 백그라운드 프로세스 정리메모리 사용량 절감

실생활 비유

책상(RAM)이 너무 작아서 책을 바닥(HDD)에 계속 내려놓고 올려놓기를 반복하면, 실제로 공부하는 시간보다 책을 옮기는 시간이 더 길어진다. 결국 공부가 전혀 진행되지 않는 상태가 바로 Thrashing이다. 해결 방법은 더 큰 책상(RAM 증설)을 사거나, 펼쳐놓는 책 수(동시 실행 프로그램)를 줄이는 것이다.


7. 프로세스 격리와 보호 (가상 메모리의 가장 큰 장점)

가상 메모리의 진짜 핵심 가치는 단순히 "메모리를 늘려주는 것"이 아니라, 프로세스 간 메모리를 완벽하게 격리해주는 것이다.

격리가 제공하는 세 가지 보호

장점설명
오류 격리프로세스 A가 오류로 죽어도 프로세스 B는 아무런 영향을 받지 않음
침범 방지프로세스 A가 프로세스 B의 메모리를 읽거나 쓸 수 없음
자동 회수프로세스가 종료되면 OS가 해당 VMS 전체를 회수 -- 메모리 누수 방지

실생활 비유: 아파트의 독립된 벽

아파트 각 세대(프로세스)는 독립된 콘크리트 벽(가상 주소 공간)으로 분리되어 있다. A세대에서 화재(오류)가 나더라도 B세대는 안전하다. A세대 주민이 B세대에 무단으로 들어갈 수도 없다. 그리고 A세대 주민이 이사(프로세스 종료)를 가면, 관리사무소(OS)가 A세대를 정리하고 새 입주자(새 프로세스)에게 배정한다.

프로세스 A의 데이터(파란색)와 프로세스 B의 데이터(초록색)는 물리 메모리에서도 완전히 분리되어 관리된다. 한쪽이 다른 쪽의 영역에 접근하려 하면, OS가 이를 차단하고 해당 프로세스를 강제 종료시킨다.


8. 페이징 파일 (Paging File)

페이징 파일이란

가상 메모리에서 하드디스크에 저장되는 부분을 페이징 파일(Paging File) 또는 **스왑 공간(Swap Space)**이라고 한다.

운영체제페이징 파일 형태
WindowsC:\pagefile.sys 파일 (숨김 파일)
Linuxswap 파티션 또는 swap 파일
macOS/private/var/vm/swapfile*

페이징 풀 vs 비페이징 풀

Windows 작업 관리자에서 볼 수 있는 두 가지 메모리 풀이 있다.

구분설명
페이징 풀 (Paged Pool)Page Out 가능한 커널 메모리 영역. 커널이 사용하지만 급하지 않은 데이터
비페이징 풀 (Non-Paged Pool)절대 Page Out되지 않는 커널 메모리 영역. 인터럽트 핸들러, 디바이스 드라이버 등 항상 RAM에 있어야 하는 데이터

비페이징 풀은 디스크에서 가져오는 지연 시간을 감당할 수 없는 핵심 커널 코드와 데이터를 위해 존재한다. 예를 들어 하드디스크 드라이버 자체가 Page Out되어 버리면, 그것을 다시 읽어올 수단이 없어지므로 시스템이 멈춘다.


9. C/C++ 프로그래밍과 가상 메모리

C/C++에서는 포인터를 통해 메모리를 직접 제어할 수 있다. 이때 매우 중요한 사실이 있다.

C/C++에서 다루는 모든 메모리 주소는 가상 메모리 주소이다.

구분접근 가능 여부
유저 모드 프로그램 (일반 애플리케이션)가상 메모리 주소만 사용 가능
커널 모드 코드 (OS, 디바이스 드라이버)물리 메모리 주소에 직접 접근 가능
c
int *ptr = (int *)malloc(sizeof(int));
*ptr = 42;
// ptr에 담긴 주소값 (예: 0x7ffd5e8a3b40)은 가상 주소이다.
// 이 주소가 실제 RAM의 어느 위치에 매핑되는지는 OS만 알고 있다.

일반적인 프로그래밍에서는 물리 주소를 신경 쓸 필요가 없다. 하지만 시스템 프로그래밍, OS 개발, 디바이스 드라이버 개발 등을 하려면 "내가 다루는 주소가 가상 주소다"라는 전제를 반드시 이해하고 있어야 한다.

이 전제를 모르면 다음과 같은 오해가 생긴다.

  • "포인터 값이 같으면 같은 메모리를 가리킨다" -- 다른 프로세스라면 같은 주소값이어도 전혀 다른 물리 메모리
  • "메모리를 직접 다루니까 OS를 거치지 않는다" -- 모든 메모리 접근은 MMU를 거치며, OS가 관리하는 페이지 테이블에 의해 변환된다

10. 가상화 기술 (Virtualization)

가상화란

가상화는 하드웨어를 소프트웨어로 구현하는 기술이다. 가상 메모리가 "물리 메모리를 소프트웨어적으로 확장"하는 것이었다면, 가상화는 컴퓨터 전체(CPU, 메모리, 디스크, 네트워크)를 소프트웨어적으로 만들어내는 것이다.

가상 머신 (Virtual Machine, VM)

  • 물리 컴퓨터 1대 위에 여러 대의 가상 컴퓨터를 만들어 운영
  • 각 가상 머신에 독립된 OS를 설치하고 실행할 수 있음
  • 가상 머신끼리 서로 격리되어 있어, 한 VM에 문제가 생겨도 다른 VM에 영향 없음

하이퍼바이저 (Hypervisor)

가상 머신을 생성하고 관리하는 소프트웨어를 하이퍼바이저라고 한다.

유형설명예시
Type 1 (Bare Metal)하드웨어 위에 직접 설치VMware ESXi, Microsoft Hyper-V, KVM
Type 2 (Hosted)OS 위에 애플리케이션으로 설치VirtualBox, VMware Workstation

클라우드 컴퓨팅과의 관계

AWS, Azure, GCP 등의 클라우드 서비스는 바로 이 가상화 기술을 기반으로 한다.

  • 거대한 물리 서버 수천 대를 데이터센터에 배치
  • 하이퍼바이저로 각 서버를 수십~수백 개의 VM으로 분할
  • 고객에게 필요한 만큼의 VM을 할당
  • 고객은 "자기만의 서버"를 사용하는 것처럼 느끼지만, 실제로는 물리 서버의 일부

각 고객(A, B, C)은 완전히 독립된 환경에서 자기만의 OS와 애플리케이션을 운영한다. 서로의 존재를 알 수 없으며, 한 VM에 문제가 생겨도 다른 VM에 영향을 주지 않는다. 이것은 앞서 배운 프로세스 격리와 같은 원리가 더 큰 단위(컴퓨터 전체)에 적용된 것이다.


11. 가상 메모리의 장점 요약

장점설명
프로세스 메모리 완벽 분리각 프로세스가 독립된 VMS를 가져 서로의 메모리에 접근 불가
오류 격리한 프로세스가 죽어도 다른 프로세스는 정상 동작
메모리 확장RAM이 부족해도 하드디스크를 활용해 프로그램 실행 가능
효율적 관리OS가 페이지 단위로 메모리를 최적화하여 관리
자동 회수프로세스 종료 시 OS가 메모리를 자동으로 회수 -- 메모리 누수 방지

핵심 암기 포인트

  1. 가상 메모리 = RAM + 하드디스크를 하나의 논리적 메모리로 합친 것이다.
  2. **페이지(Page)**는 가상 메모리의 관리 단위이며, 크기는 약 4KB이다.
  3. Page Out = RAM에서 디스크로, Page In = 디스크에서 RAM으로 이동한다.
  4. RAM이 부족하면 Page In/Out이 빈번해지고, 시스템이 느려진다. 극단적이면 Thrashing이 발생한다.
  5. 가상 메모리의 핵심 장점은 프로세스 격리와 보호이다.
  6. 유저 모드에서 다루는 메모리 = 무조건 가상 메모리 주소이다.
  7. 가상화 = 하드웨어를 소프트웨어로 구현하며, 클라우드 컴퓨팅의 기반 기술이다.

확인 질문

Q1. 가상 메모리가 필요한 이유는 무엇인가?

RAM의 물리적 용량에는 한계가 있어 모든 프로그램을 동시에 올릴 수 없다. 가상 메모리는 하드디스크의 일부를 RAM처럼 활용하여, RAM 용량 이상의 프로그램을 동시에 실행할 수 있게 해준다. 또한 프로세스별 독립된 메모리 공간을 제공하여 메모리 보호와 격리를 실현한다.


Q2. Page Out이란 무엇인가?

Page Out(Swap Out)은 현재 RAM에 올라와 있지만 당장 사용되지 않는 페이지를 하드디스크(스왑 영역)로 옮기는 것이다. RAM 공간이 부족할 때 새로운 페이지를 위한 빈 공간을 확보하기 위해 수행된다. 반대로 하드디스크에서 RAM으로 가져오는 것은 Page In(Swap In)이다.


Q3. 컴퓨터가 느려지면서 하드디스크 소리가 나는 이유는?

RAM이 부족하면 OS가 빈번하게 Page In/Out을 수행하게 된다. 이 과정에서 하드디스크에 대한 읽기/쓰기가 반복되어 물리적 소음이 발생하고, 하드디스크가 RAM보다 수만 배 느리기 때문에 시스템 전반의 응답 속도가 크게 저하된다. 이것이 극단적으로 심해지면 Thrashing이라 하여 시스템이 사실상 멈춘 것처럼 된다.


Q4. 가상 메모리의 가장 큰 장점은 무엇인가?

프로세스 격리와 보호이다. 각 프로세스는 독립된 가상 주소 공간(VMS)을 부여받아 서로의 메모리에 절대 접근할 수 없다. 덕분에 한 프로세스에 오류가 발생해도 다른 프로세스에 영향을 주지 않으며, 프로세스 종료 시 OS가 메모리를 자동 회수하여 누수를 방지한다.


Q5. C언어에서 다루는 메모리 주소는 물리 주소인가, 가상 주소인가?

가상 주소이다. 유저 모드에서 실행되는 모든 프로그램(C/C++ 포함)은 가상 메모리 주소만 사용할 수 있다. 포인터에 담긴 주소값은 가상 주소이며, 이것이 실제 RAM의 어느 위치에 매핑되는지는 OS의 페이지 테이블과 MMU를 통해 변환된다. 물리 주소에 직접 접근하려면 커널 모드에서만 가능하다.