운영체제가 메모리 부족을 감지하고, 메모리 할당 요청을 받는다.
운영체제는 스왑 디스크로 내보낼 페이지(evict)를 선택한다.
선택된 페이지의 정확한 메모리 상태가 스왑 디스크에 복사 된다. (swap out)
이후 해당 페이지에 접근하려 할 때, 운영체제는 스왑 디스크에서 페이지 내용을 다시 메모리로 읽어온다.
🤔 스왑 디스크가 왜 필요함 ?
모든 프로세스가 실행되기에 물리 메모리는 부족하다.
따라서 추가적인 메모리 공간을 확보할 수 있게 하는 것이 스왑 디스크 영역.
프로세스가 계속 실행될 수 있도록 하기위해
일반적으로 swap disk는 물리 메모리의 2~4배 정도로 설정
(그림은 위 사항을 고려해서 참고)

vm_anon_init()

한 페이지(4096바이트)는 보통 8개의 섹터(4KB / 512바이트)를 차지
ex) swap disk 에 페이지 단위로 스왑 slot의 예시 - page 5개인 경우

만약 물리 메모리가 모두 꽉찬 상황이라면, 프로세스는 실행할 수 없게 된다.
→ 물리 메모리가 존재하지 않는 페이지에 접근하면서 page fault 발생
→ 커널은 페이지 폴트 핸들러의 제어권을 받게 되고, 페이지와 물리 메모리를 매핑하기 위해서
프레임을 얻기 위해 vm_get_frame 함수를 호출
palloc_get_page(PAR_USER)로 물리 메모리를 할당함(kernel pool 영역에)
물리 메모리가 없으면, 쫓겨날 프레임을 선택
→ FIFO(First-In-First-Out)로, 프레임 테이블의 맨 앞에 있는 프레임을 선택하여 스왑 아웃합니다.

장점: 구현이 간단하고, 공정성이 있으며, 메모리 사용량이 많은 프로세스에 유리
단점: 최근에 사용된 프레임도 교체될 수 있어 성능이 저하



이제, 물리 메모리에 가용 frame이 생성되어 page와 매핑 가능한 상태가 됨
→ swap_in 실행

