핵심 인사이트 (3줄 요약)

  1. 본질: 스와핑 (Swapping)은 메모리 부족 시 실행 중인 프로세스 전체(또는 페이지 단위)를 디스크의 백킹 스토어 (Backing Store)로 이동시켜 메모리를 확보하는 OS 메모리 관리 기법이다.
  2. 가치: 스와핑은 물리 메모리를 초과하는 총 프로세스 메모리를 실행 가능하게 하는 다중 프로그래밍 (Multiprogramming)의 핵심 메커니즘으로, 물리 메모리 한계를 SW적으로 초월한다.
  3. 융합: 현대 OS는 전체 프로세스 스와핑 대신 **페이지 단위 스와핑 (Paging-based Swapping)**을 사용하며, 스왑 공간, 스왑 데몬 (kswapd), OOM Killer와 연동하여 메모리 압박을 자동으로 관리한다.

Ⅰ. 개요 및 필요성

물리 메모리 (DRAM) 크기는 유한하다. 동시에 실행되는 프로세스들의 총 메모리 요구량이 물리 메모리를 초과하면, OS는 일부 프로세스를 디스크로 내보내야 한다.

💡 비유: 작은 책상(RAM)에 올려둔 책(프로세스)들이 너무 많으면, 지금 안 보는 책은 서랍(디스크 스왑 영역)에 잠시 넣는 것.

┌──────────────────────────────────────────────────────────────┐
│         스와핑 동작 흐름                                     │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  [메모리 부족 감지]                                          │
│       │                                                      │
│       ▼                                                      │
│  [스왑 아웃 (Swap Out)]                                      │
│  ● OS가 희생 프로세스(Victim) 선택                           │
│  ● 프로세스 메모리 전체를 디스크 스왑 공간으로 복사          │
│  ● 해당 프레임들을 비워 다른 프로세스에 할당                 │
│                                                              │
│  [실행 준비된 스왑 아웃 프로세스]                            │
│       │                                                      │
│       ▼                                                      │
│  [스왑 인 (Swap In)]                                         │
│  ● 스왑 공간에서 프로세스를 메모리로 복원                    │
│  ● 주소 바인딩 재수행 (실행 시간 바인딩 필요)                │
│  ● CPU 스케줄러가 레디 큐에 배치                             │
│                                                              │
│  스왑 오버헤드 (HDD 기준):                                   │
│  100MB 프로세스 스왑 아웃: 100MB / 50MB/s = 2초              │
│  스왑 인: 추가 2초 → 총 4초 오버헤드!                        │
│  (NVMe SSD: ~200ms로 단축)                                   │
└──────────────────────────────────────────────────────────────┘

📢 섹션 요약 비유: 스와핑은 좁은 주방(RAM)에서 지금 안 쓰는 냄비(프로세스)를 창고(디스크)로 잠시 옮기는 것 — 새 냄비를 올릴 공간이 생기지만, 다시 꺼내오는 데 시간이 걸립니다.


Ⅱ. 아키텍처 및 핵심 원리

표준 스와핑 vs 페이징 기반 스와핑

항목표준 스와핑 (전체 프로세스)페이징 기반 스와핑 (현대)
단위전체 프로세스페이지 (4KB)
I/O 크기수십~수백MB최소 4KB
오버헤드매우 큼작음
유연성낮음높음 (워킹 셋 유지)
현대 OS거의 사용 안 함기본 사용

Linux kswapd 데몬 동작

┌──────────────────────────────────────────────────────────────┐
│         Linux 메모리 회수 흐름 (kswapd + OOM Killer)         │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  메모리 사용량 임계값:                                       │
│  ● min / low / high 워터마크                                 │
│                                                              │
│  [high 이상]: 정상 운영                                      │
│  [low ~ high]: kswapd 백그라운드 회수 시작                   │
│    ● 파일 캐시(file-backed) 페이지 먼저 제거                 │
│    ● 익명(anonymous) 페이지는 스왑 공간으로                  │
│  [min 미만]: 직접 회수 (Synchronous Direct Reclaim)          │
│    → 메모리 할당 요청 스레드가 직접 페이지 회수              │
│    → 심각한 레이턴시 유발                                    │
│  [완전 고갈]: OOM Killer 발동                                │
│    → oom_score 기반으로 희생 프로세스 선택 후 SIGKILL        │
│                                                              │
│  명령어:                                                     │
│  swapon -s           # 스왑 사용 현황                        │
│  free -h             # RAM·스왑 전체 현황                    │
│  vmstat 1            # 스왑 인/아웃 속도 모니터링            │
└──────────────────────────────────────────────────────────────┘

📢 섹션 요약 비유: kswapd는 청소부 — 방(메모리)이 너무 꽉 차기 전에 미리 안 쓰는 물건을 창고(스왑)로 옮겨요. OOM Killer는 창고마저 꽉 찼을 때 가장 큰 짐을 들고 있는 사람(프로세스)에게 나가달라고 하는 보안 요원이에요.


Ⅲ. 비교 및 연결

스왑 공간 종류

종류특성설정
스왑 파티션전용 디스크 파티션, 빠름/dev/sda2 swap
스왑 파일일반 파일시스템 파일, 유연fallocate + swapon
zRAMRAM을 압축해 스왑 공간으로modprobe zram
zswap압축 후 스왑 파티션으로쓰기 전 압축 캐시

zRAM은 Android 스마트폰에서 널리 사용. 실제 디스크 I/O 없이 RAM 내 압축 공간을 스왑으로 사용하여 빠른 스와핑을 지원한다.

📢 섹션 요약 비유: zRAM은 서랍에 진공 압축팩으로 옷을 넣는 것 — 작은 서랍에 더 많은 옷(프로세스)을 넣을 수 있어요.


Ⅳ. 실무 적용 및 기술사 판단

실무 시나리오:

  1. SSD 기반 서버: NVMe SSD로 스왑하면 HDD 대비 10~50배 빠름. 단, SSD 수명(TBW) 소모 주의.
  2. 클라우드 VM 메모리 과도할당: Hypervisor가 VM들의 총 메모리를 물리 메모리보다 많이 할당하고 스와핑으로 관리 (Balloon Driver + Swap).

안티패턴:

  • 스왑 없는 서버: OOM 상황에서 즉시 프로세스 종료 위험. 작은 스왑 버퍼(2~4GB)라도 유지 권장.
  • 과도한 스와핑 (Thrashing): 프로세스가 실행될 때마다 스왑 인/아웃이 반복되어 CPU가 스와핑에만 95% 소비 → 전체 처리량 급락.

📢 섹션 요약 비유: 스래싱(Thrashing)은 좁은 책상에 책을 계속 서랍에서 꺼내고 넣기를 반복하다 실제 공부는 못 하는 상황 — 이사 자체가 일이 돼버린 비효율입니다.


Ⅴ. 기대효과 및 결론

구분스와핑 없음스와핑 적용
다중 프로그래밍 수준물리 메모리에 제한물리 메모리 초과 실행 가능
메모리 부족 시즉시 OOM/크래시스왑으로 완충
I/O 오버헤드없음스왑 I/O 레이턴시

스와핑은 OS의 메모리 초과 할당을 가능하게 하는 필수 메커니즘이다. 현대에는 페이지 단위 스와핑+zRAM으로 오버헤드를 최소화하며, kswapd의 선제적 회수와 OOM Killer의 최후 방어선으로 메모리 관리 안전망을 구성한다.

  • 📢 섹션 요약 비유: 도구의 장점만 외우는 것이 아니라 어디까지 믿고 어디서 보완해야 하는지 기억하는 정리 노트와 같다.

📌 관련 개념 맵

개념연결 포인트
공유 라이브러리 (Shared Library) 스터브 (Stub) 코드현재 개념으로 들어오기 전에 함께 이해하면 경계가 선명해지는 기반 개념이다.
정적 연결 (Static Linking)현재 개념이 등장하게 만든 직접적인 선행 흐름이다.
스왑 아웃 (Swap out) / 스왑 인 (Swap in)현재 개념이 구현·세분화될 때 바로 연결되는 후속 개념이다.
표준 스와핑 (전체 프로세스) vs 페이징 시스템 스와핑 (페이지 단위)확장 학습이나 심화 비교로 이어지는 다음 단계의 키워드다.

📈 관련 키워드 및 발전 흐름도

[정적 연결 (Static Linking)]
    │
    ▼
[스와핑 (Swapping)]
    │
    ├──▶ [스왑 아웃 (Swap out) / 스왑 인 (Swap in)]
    └──▶ [표준 스와핑 (전체 프로세스) vs 페이징 시스템 스와핑 (페이지 단위)]

이 흐름도는 선행 개념에서 현재 개념으로 넘어온 뒤, 구현 세분화와 후속 확장으로 이어지는 학습 순서를 압축해 보여준다.

👶 어린이를 위한 3줄 비유 설명

  1. 스와핑은 책상(RAM)이 꽉 찼을 때 안 보는 책(프로세스)을 서랍(디스크)에 잠깐 넣는 것이에요.
  2. 나중에 그 책이 필요하면 서랍에서 다시 꺼내서 책상 위에 올리는데 — 이게 스왑 인이에요!
  3. 서랍이 너무 느려서 책 넣었다 꺼냈다만 반복하면 공부(연산)는 하나도 못 해요 — 이를 스래싱이라고 해요!