Computer Systems: A Programmer's Perspective
제9장 가상 메모리 (Virtual Memory) - 정리본
🎯 학습 목표
- 물리적 주소 지정과 가상 주소 지정의 차이점 이해
- 주소 공간의 개념과 가상/물리적 주소 공간 구분
- 가상 메모리가 캐싱 도구로서 작동하는 원리 파악
📖 서론: 가상 메모리란?
가상 메모리의 정의
가상 메모리(Virtual Memory, VM)는 하드웨어 예외, 하드웨어 주소 변환, 메인 메모리, 디스크 파일, 커널 소프트웨어의 우아한 상호작용으로 각 프로세스에게 제공하는 메인 메모리의 추상화입니다.
가상 메모리의 3가지 핵심 기능
기능 | 설명 |
---|
캐싱 도구 | 메인 메모리를 디스크에 저장된 주소 공간의 캐시로 취급하여 효율적 사용 |
메모리 관리 도구 | 각 프로세스에게 균일한 주소 공간 제공으로 메모리 관리 단순화 |
메모리 보호 도구 | 각 프로세스의 주소 공간을 다른 프로세스의 손상으로부터 보호 |
9.1 물리적 주소 지정 vs 가상 주소 지정
물리적 주소 지정 (Physical Addressing)

CPU → 물리적 주소 (PA) → 메인 메모리
특징:
- 컴퓨터 메인 메모리: M개의 연속적인 바이트 크기 셀 배열
- 각 바이트는 고유한 물리적 주소(PA) 보유
- 초기 PC, 임베디드 시스템에서 사용
가상 주소 지정 (Virtual Addressing)

CPU → 가상 주소 (VA) → [MMU에서 주소 변환] → 물리적 주소 (PA) → 메인 메모리
핵심 구성 요소:
- 가상 주소(VA): CPU가 생성하는 주소
- 주소 변환(Address Translation): VA를 PA로 변환하는 과정
- MMU(Memory Management Unit): CPU 칩 상의 전용 하드웨어, 실시간 주소 변환 수행
9.2 주소 공간 (Address Spaces)
주소 공간의 정의
주소 공간: 음이 아닌 정수 주소들의 순서집합 {0, 1, 2, ...}
가상 주소 공간
- 크기: N = 2^n 개의 주소
- 표현: {0, 1, 2, ..., N-1}
- 분류: n비트 주소 공간
- 현대 시스템: 32비트 또는 64비트 지원
물리적 주소 공간
- 크기: M바이트 물리적 메모리에 대응
- 표현: {0, 1, 2, ..., M-1}
- 가정: M = 2^m (논의 단순화)
🔑 핵심 개념
주소 공간은 데이터 객체(바이트)와 속성(주소) 사이의 명확한 구분을 만들어, 각 데이터 객체가 서로 다른 주소 공간에서 선택된 여러 독립적인 주소를 가질 수 있게 합니다.
9.3 캐싱 도구로서의 VM
기본 구조

가상 메모리 (디스크) ←캐싱→ 물리적 메모리 (DRAM)
페이지 단위 관리
- 가상 페이지(Virtual Pages, VPs): 크기 P = 2^p 바이트
- 물리적 페이지(Physical Pages, PPs): 크기 P 바이트 (페이지 프레임)
가상 페이지의 3가지 상태
상태 | 설명 | 특징 |
---|
할당되지 않음 (Unallocated) | VM 시스템에 의해 아직 할당되지 않음 | 디스크 공간 차지 안함 |
캐시됨 (Cached) | 현재 물리적 메모리에 캐시됨 | 빠른 접근 가능 |
캐시되지 않음 (Uncached) | 할당되었으나 물리적 메모리에 없음 | 디스크에만 존재 |
9.3.1 DRAM 캐시 구성
용어 구분
용어 | 설명 |
---|
SRAM 캐시 | CPU와 메인 메모리 사이의 L1, L2, L3 캐시 |
DRAM 캐시 | VM 시스템이 가상 페이지를 캐시하는 메인 메모리 |
DRAM 캐시의 특성
📊 성능 비교
- DRAM은 SRAM보다 최소 10배 느림
- 디스크는 DRAM보다 약 100,000배 느림
- 디스크 섹터의 첫 바이트 읽기는 연속 바이트보다 100,000배 느림
🏗️ 설계 특성
특성 | 값/방식 | 이유 |
---|
페이지 크기 | 4KB ~ 2MB | 큰 미스 비용과 첫 바이트 접근 비용 |
연관성 | 완전 연관 | 큰 미스 비용으로 인한 유연성 필요 |
교체 정책 | 정교한 알고리즘 | 잘못된 교체의 높은 비용 |
쓰기 정책 | 쓰기-후 (Write-back) | 디스크의 큰 접근 시간 |
9.3.2 페이지 테이블 (Page Tables)
정의 및 역할

페이지 테이블: 가상 페이지 → 물리적 페이지 매핑 데이터 구조
페이지 테이블 엔트리 (PTE) 구성
구성 요소 | 크기 | 역할 |
---|
유효 비트 (Valid bit) | 1비트 | 가상 페이지가 DRAM에 캐시되어 있는지 표시 |
주소 필드 | n비트 | 물리적 페이지 시작 주소 또는 디스크 주소 |
PTE 상태별 의미
유효 비트 | 주소 필드 | 의미 |
---|
1 | 물리적 주소 | DRAM에 캐시됨 |
0 | Null | 아직 할당되지 않음 |
0 | 디스크 주소 | 할당되었으나 캐시되지 않음 |
9.3.3 페이지 히트 (Page Hits)
동작 과정

1. CPU가 VP 2의 단어 읽기 요청
2. 주소 변환 HW가 가상 주소로 PTE 2 위치 확인
3. PTE 2를 메모리에서 읽기
4. 유효 비트 = 1 → VP 2가 메모리에 캐시됨 확인
5. PTE의 물리적 주소로 단어의 물리적 주소 구성
9.3.4 페이지 폴트 (Page Faults)
정의
페이지 폴트: 가상 메모리 용어로 DRAM 캐시 미스
페이지 폴트 처리 과정


폴트 발생 전:
VP 3이 캐시되지 않은 상태
폴트 처리 과정:
1. CPU가 VP 3의 단어 참조
2. 주소 변환 HW가 PTE 3 읽기
3. 유효 비트 = 0 → 페이지 폴트 예외 발생
4. 페이지 폴트 핸들러 실행:
- 희생 페이지 (VP 4) 선택
- VP 4 수정된 경우 디스크에 쓰기
- VP 4의 PTE 업데이트
- VP 3을 디스크에서 PP 3으로 복사
- PTE 3 업데이트 (유효 비트 = 1)
5. 폴트 명령어 재시작
6. 이제 VP 3이 캐시되어 정상 처리
폴트 처리 후:
VP 3이 PP 3에 캐시됨, VP 4는 메모리에서 제거됨
관련 용어
용어 | 의미 |
---|
스와핑/페이징 | 디스크와 메모리 간 페이지 전송 활동 |
스왑 인/페이지 인 | 디스크 → DRAM 페이지 전송 |
스왑 아웃/페이지 아웃 | DRAM → 디스크 페이지 전송 |
요구 페이징 | 미스 발생 시까지 기다렸다가 스왑 인하는 전략 |
9.3.5 페이지 할당 (Allocating Pages)
새 페이지 할당 과정

malloc 호출 등으로 새 가상 메모리 페이지 할당:
1. 디스크에 VP 5를 위한 공간 생성
2. PTE 5를 새로 생성된 디스크 페이지를 가리키도록 업데이트
3. 유효 비트는 0으로 유지 (아직 캐시되지 않음)
9.3.6 지역성의 구원 (Locality to the Rescue)
가상 메모리 효율성의 핵심: 지역성 원리
📈 성능 보장 메커니즘
전체 프로그램 참조 페이지 > 물리적 메모리 크기
하지만
특정 시점 활성 페이지 (작업 집합) < 물리적 메모리 크기
핵심 개념
개념 | 설명 |
---|
작업 집합 (Working Set) | 특정 시점에서 프로그램이 작업하는 활성 페이지 집합 |
상주 집합 (Resident Set) | 작업 집합과 같은 개념 |
정상 동작 vs 스래싱
✅ 정상 동작:
초기 오버헤드 → 작업 집합 메모리 적재 → 이후 히트만 발생
❌ 스래싱 (Thrashing):
작업 집합 크기 > 물리적 메모리 크기 → 지속적 스왑 인/아웃
⚠️ 성능 저하 징후
프로그램 성능이 급격히 저하되면 스래싱 가능성을 고려해야 합니다.
🔑 핵심 정리
- 가상 메모리는 3가지 도구: 캐싱, 메모리 관리, 메모리 보호
- 주소 변환: MMU가 VA를 PA로 실시간 변환
- 페이지 단위 관리: 가상/물리적 페이지로 메모리 분할
- DRAM 캐시 특성: 큰 페이지, 완전 연관, 쓰기-후
- 페이지 테이블: VP → PP 매핑, PTE로 구성
- 지역성 원리: 작업 집합이 성능의 핵심