메모리 가상화를 하다보면, 프로세스 크기만큼 연속되어 비어있는 메모리 공간을 찾는 것이 (mapping하는 것) 비효율적이라고 느낄 수 있다.
만약에 메모리 공간이 드문드문 비어있어서, 연속되게 비어있는 공간은 적은데에 비해 비어있는 총 공간은 넓다고 치자. 이 때에는 분명 넓은 공간이 비어있음에도 불구하고 연속적으로 빈 공간의 크기가 적어 프로세스를 올리지 못할 수 있다.
이를 해결하기 위해 주소 공간을 페이징 단위로 쪼개는 페이징 기법이 있다.

남아있는 메모리의 크기가 프로세스의 크기보다 크지만, 연속된 공간보다는 크기 때문에 메모리를 할당할 수 없는 경우가 있는데, 이를 외부 단편화라고 한다.

이는 반대로 남아있는 메모리의 크기가 프로세스의 크기보다 크지만, 할당 후 남은 메모리를 사용할 수 없는 문제가 발생한다. (그림에서는 20MB가 남지만, process C가 차지하고 있어 사용이 어렵다.)
고정된 크기(페이징 단위)로 메모리 블럭을 쪼개어, 빈 메모리 공간에 할당하는 것.
앞서 다룬 단편화 문제를 최소화 할 수 있다.

그럼 페이지를 쪼개고 관리하는 곳은 어딜까?
OS는 각 프로세스마다 하나의 페이지 테이블을 할
당. 메인 메모리에 적재되어 있는 페이지 번호와 해당 페이지가 위
치한 실제 메인 메모리의 시작 주소가 매핑된 테이블. MMU가 주
소 변환하는 과정에서 페이지와 프레임을 매핑해주는 역할을 한다
페이지가 항상 VMS의 시작점에 있을 것이라는 보장이 없다.
이 때 페이지의 위치를 추정하기 위해 offset이라는 수치를 사용한다.
offset은 쉽게 말해 'VMS의 시작점과 페이지와의 거리'를 뜻한다.
그림 출처 : https://code-lab1.tistory.com/54 , 교안