지금까지는 모든 페이지들이 물리 메모리에 존재하는 것을 가정했다. 하지만 큰 주소 공간을 지원하기 위해 OS는 현재는 크게 필요하지 않은 주소공간의 일부를 보관해 둘 공간이 필요하다.
이를 위해 메모리 계층에 레이어의 추가가 필요하다. 현대 시스템에서는 하드 디스크 드라이브가 이 역할을 맡아, 메모리 계층 최하단에는 HDD가 존재하고 그 위에 물리 메모리가 있다.
핵심 질문: 물리 메모리 이상으로 나아가기 위해서는 어떻게 할까?
OS는 어떻게 크고 느린 장치를 사용하면서 마치 커다란 가상 주소 공간이 있는 것처럼 할 수 있을까?
왜 프로세스에게 굳이 큰 주소 공간을 제공해야할까?
편리함과 사용 용이성 때문이다. 주소 공간이 충분히 크면, 프로그램의 자료 구조들을 위한 충분한 메모리 공간이 존재하는지 걱정하지 않아도 된다. 필요할 경우 OS에게 요청만 하면 될 것이다.
스왑 공간의 추가를 통해 OS는 실행되는 각 프로세스들에게 큰 가상 메모리가 있는 것 같은 환상을 줄 수 있다.
디스크에 페이지들을 저장할 수 있는 공간을 스왑 공간이라고 부른다. 메모리 페이지를 읽어서 이곳에 쓰고(swap out) 스왑 공간에서 페이지를 읽어 메모리에 탑재시킨다(swap in). OS는 스왑 공간의 모든 페이지들의 디스크 주소를 가지고 있어야 한다.

프로세스 0,1,2가 물리 메모리를 공유하고 있다. 유효한 페이지만 물리 메모리에 존재하고, 나머지들은 디스크에 swap out 되어있다. 프로세스 3의 경우는 모든 페이지가 스왑 공간에 있어, 현재 실행 중이 아님을 알 수 있다.
이를 통해, 스왑 공간의 사용을 통해, 시스템이 실제 물리적으로 존재하는 메모리 공간보다 더 많은 공간이 존재하는 것처럼 가장할 수 있다는 것을 알 수 있다.
이제 페이지 스왑을 위한 기능을 다뤄보자. 하드웨어 기반의 TLB를 사용하는 시스템을 가정하자.
페이지가 디스크로 스왑되는 것을 가능하게 하려면, 하드웨어가 PTE에서 해당 페이지가 물리 메모리에 존재하지 않는다는 것을 표현해야한다(소프트웨어 TLB의 경우는 OS가).
하드웨어는 present bit를 사용하여 1인 경우 페이지가 물리 메모리에 존재한다는 것을 의미하고, 0일 경우 메모리에는 존재하지 않고 디스크 어딘가에 존재한다는 것이다. 물리 메모리에 존재하지 않은 페이지에 접근하는 행위를 Page Fault 라고 부른다.
하드웨어 기반/ 소프트웨어 기반 TLB 모두 페이지 폴트에 대한 처리는 OS가 맡는다. OS의 페이지 폴드 핸들러가 그 처리 방식을 규정한다.
만약 요청된 페이지가 메모리에 없고 디스크에 스왑되었다면, 해당 페이지를 메모리로 swap in 한다. 원하는 페이지가 어디에 있는지를 알기 위해, 스왑 공간 상의 위치를 페이지 테이블에 저장한다.
디스크 I/O가 완료되면 PTE를 PFN을 페이지의 메모리 위치로 갱신하고, page fault를 발생시킨 명령어를 재실행한다. 최종적으로, TLB에 주소 변환 정보를 찾아 물리 주소에서 원하는 데이터나 명령어를 가져오게 된다.
I/O 전송 중에는, 해당 프로세스가 Block된 상태여야 한다. 페이지 폴트의 처리 동안 OS는 다른 프로세스를 실행시킨다. 이런 식으로 페이지 폴트 작업과, 다른 프로세스의 실행을 중첩(overlap)시키는 것이 멀티 프로그래밍 시스템에서 하드웨어를 최대한 효율적으로 사용하는 방법 중 하나이다.
메모리에 빈 공간이 없다면, 탑재하고자 하는 페이지들을 반입하기 위해 일부 페이지들을 out 시키려 할 것이다. 이를 위한 페이지 교체 정책이 필요하다. 다음 장에서 자세히 다룰 예정이다.
페이지 교체 정책이 비효율적일 경우 프로그램이 디스크와 비슷한 속도로 실행되는 참사가 발생할 수 있다.
프로그램이 메모리에서 데이터를 가져올 때 어떤 일이 발생할까?

하드웨어 기반에서 TLB 미스 시, 세가지 경우가 있다.

OS의 페이지 폴트 처리 과정은 다음과 같다.
지금까지는 메모리 공간이 부족할 때 교체가 일어나는 상황을 가정했다. 그러나 이는 효율적이지 않다. 이를 위해 OS는 항상 어느 정도의 여유 메모리 공간을 확보하고 있다.
대부분의 운영체제는 여유 공간의 최솟값(low watermark), 최댓값(high watermark)을 설정한다. 여유 공간이 최솟값 아래로 떨어지면, swap demon / page demon이라고 불리는 백그라운드 스레드를 통해 여유 공간이 최댓값만큼 생길 때까지 페이지를 제거한다.
동시에 여러개를 교체하면 성능이 개선된다. 이를 위 많은 시스템들이 페이지들을 클러스터(cluster)나 그룹(group)으로 나누어 한번에 스왑 파티션에 저장한다.
백그라운드 페이징 스레드를 위해서는, 그림 24.3의 과정이 조금 수정되어야 한다. 교체를 직접 수행하는 것이 아니라, 사용할 수 있는 페이지 여유 공간을 확인하고 부족할 경우 페이지를 비우는 작업을 수행한다.
프로세스가 보기에는 자신의 개별적인 연속된 가상 메모리를 접근하는 것처럼 보인다. 실제로 페이지들은 물리 메모리 임의(불연속적인)위치에 배치되며, 때로는 디스크에서 가져와야 할 때도 있다.