운영체제에서 Swap Disk는 물리 메모리(RAM)가 부족할 때, 일부 메모리 페이지를 임시로 저장하기 위한 디스크 공간이다. 일반적으로 가상 메모리 시스템에서 사용되며, 실제 RAM처럼 데이터를 저장하지만, 속도는 느리고 용량은 더 크다.
“메모리가 부족하면 일부 데이터를 디스크로 밀어낸다”는 개념이 바로 스와핑(Swapping) 이다.
운영체제는 각 프로세스에 독립된 가상 메모리 공간을 제공해야 하며, 이는 실제 RAM보다 훨씬 큰 주소 공간일 수 있다. 하지만 실제 메모리는 제한적이기 때문에, 다음과 같은 경우 스왑이 필요하다:
| 동작 | 설명 |
|---|---|
| Swap-out | 현재 메모리에서 사용되지 않는 페이지를 Swap Disk로 이동 |
| Swap-in | 필요한 페이지가 메모리에 없으면 다시 Swap Disk에서 불러옴 (Page Fault) |
Swap-out과 Swap-in은 Page Replacement Policy에 의해 결정되며, 스왑 공간은 항상 디스크 I/O 비용이 크기 때문에 최소화되어야 한다.
Anonymous Page는 backing file이 없기 때문에, 페이지가 교체될 경우 무조건 Swap Disk로 저장해야 한다.
반면, File-backed Page는 원본 파일로부터 다시 읽어오면 되므로 스왑이 필요하지 않을 수도 있다.
운영체제 구현에서는 스왑 디스크를 다음과 같이 구성한다:
#define SECTORS_PER_PAGE (PGSIZE / DISK_SECTOR_SIZE)
struct swap_table {
struct bitmap *swap_bitmap; // 사용 가능 여부
struct disk *swap_disk; // 스왑 디스크 장치
};
[1] 페이지가 메모리에서 제거될 필요가 있음 (교체 대상)
↓
[2] 스왑 디스크에 빈 슬롯 확보 (bitmap에서 비트 확인)
↓
[3] 페이지를 디스크에 저장 (disk_write)
↓
[4] 페이지 테이블에서 해당 페이지 제거
↓
[5] 나중에 다시 필요 시 → Page Fault 발생
↓
[6] 디스크에서 페이지를 다시 읽어와 Swap-in (disk_read)
↓
[7] 프레임 재할당 후 페이지 테이블에 등록
따라서 현대 시스템에서는 충분한 RAM 확보와 함께, Swap은 최후의 수단으로 활용됩니다.
| 명령어 | 설명 |
|---|---|
swapon -s | 현재 활성화된 스왑 공간 확인 |
free -h | 메모리/스왑 사용량 확인 |
sudo swapoff -a | 모든 스왑 비활성화 |
sudo swapon -a | 모든 스왑 활성화 |
dd if=/dev/zero of=/swapfile bs=1M count=1024 | 스왑 파일 생성 (예: 1GB) |
mkswap /swapfile | 스왑 포맷 |
swapon /swapfile | 스왑 등록 |