Swap Disk는 운영체제가 메모리가 부족할 때, 일시적으로 데이터를 저장하는 디스크 영역입니다.

운영체제는 가상 메모리 때문에 실제 물리 메모리보다 더 큰 메모리 공간을 지원할 수 있습니다. 그런데 실제로 RAM이 부족하다면 사용하지 않는 페이지를 디스크로 내보내야합니다. 그러고 나중에 다시 필요할 때 swap-in 하면 됩니다.
→ swap은 더 많은 프로세스가 동시에 실행, 프로그램 실행 중 힙 / 스택 확장을 허용합니다. 또한 메모리 사용량의 유연한 조절이 가능하게 합니다.
swap_out())swap_in())
Pintos에서는 디스크의 일부 섹터를 swap 공간으로 활용합니다.
주요 파일인 vm / file.c 에서 구현되며 이름은 자료 구조는 다음과 같습니다.
| 이름 | 설명 |
|---|---|
block_device | 실제 디스크를 추상화한 구조 (devices/block.c) |
swap_bitmap | 어떤 swap 슬롯이 사용 중인지 추적 |
PAGE_SIZE / DISK_SECTOR_SIZE | 한 페이지 = 여러 개의 디스크 섹터에 매핑됨 (보통 8개) |
핵심 함수는 file_backed_swap_in 와 같은 함수명으로 구현되고, 저희는 이 함수에 swap을 구현하면 됩니다.
swap_out(page); 에서 메모리에 있는 페이지 내용을 8개 디스크 섹터로 분할 저장합니다. bitmap_scan_and_flip()으로 빈 swap 슬롯을 찾아 기록합니다.page->anon.swap_slot에 해당 슬롯 번호 저장합니다.swap_in(page, kva); 을 통해 page->anon.swap_slot에 기록된 섹터에서 내용을 읽어 옵니다.swap_slot은 반드시 비워야 합니다.| 항목 | 설명 |
|---|---|
| Swap Disk란? | RAM이 부족할 때 페이지를 임시로 저장하는 디스크 영역 |
| 필요 이유 | 메모리 초과 상황 대응, 다중 프로세스 실행 지원 |
| Pintos 구조 | 디스크 블록을 swap 공간으로 사용, bitmap으로 슬롯 관리 |
| 핵심 함수 | swap_in(), swap_out(), swap_init() |
| 사용 대상 | Anonymous Page, file-backed는 해당 없음 |