Swap Disk: 메모리가 부족할 때 페이지를 잠시 맡기는 곳
Anonymous Page 구현의 필수 개념인 Swap Disk를 알아본다.
1. 스왑 디스크란?
스왑 디스크(Swap Disk) 는 물리 메모리(RAM)가 부족할 때, 당장 쓰지 않는 페이지를 보조 저장장치(SSD/HDD)에 임시로 맡겨 두는 공간이다.
| 개념 | 설명 |
|---|---|
| 목적 | RAM 부족 시 사용하지 않는 페이지(4KB 단위)를 보조 저장장치에 임시 저장 |
| 형태 | ① 스왑 파티션(독립된 블록 디바이스) / ② 스왑 파일(파일시스템 위의 파일) |
| 상태 구분 | RAM에 있으면 present, 스왑으로 나가면 swapped (PTE의 present 비트 = 0, 나머지 비트에 스왑 슬롯 번호 등 메타데이터 저장) |
| 근거 | 가상 메모리에서 page fault 시 디스크 I/O(DMA)로 페이지를 교체 |
2. 동작 흐름
2-1. Page Fault
CPU가 PTE의 present 비트를 확인해 0이면 트랩이 걸리고, 커널의 page-fault 핸들러로 진입한다.
2-2. 물리 프레임 할당 실패
모든 프레임이 사용 중이면, 페이지 교체 정책(LRU/Clock 등)으로 희생 페이지(victim)를 선정한다.
2-3. Swap-out
- 스왑 비트맵(bitmap)에서 빈 슬롯을 찾는다
- 페이지 내용을 8섹터(512B × 8 = 4KB) 단위로
block_write()한다 - PTE의 present를 0으로 두고, swapped 플래그와 슬롯 번호를 기록한다
2-4. Swap-in (해당 가상 주소 재접근 시)
- 새 프레임을 확보한 뒤
block_read()로 8섹터를 읽는다 - PTE의 present를 1로 바꾸고, 스왑 메타데이터를 초기화하며, TLB를 flush한다
- 비트맵 슬롯을 free한다
2-5. I/O 세부
실제 전송은 디스크 컨트롤러가 DMA로 처리한다. 완료되면 인터럽트가 발생하고, 커널은 잠들어 있던 프로세스를 깨운다.
이 흐름은 Anonymous page의 백업 메커니즘 그 자체다. 원본 파일이 없는 익명 페이지는 evict될 때 갈 곳이 swap뿐이기 때문이다. (관련: Anonymous & File-backed Page, Page Replacement Policy)