페이징은 프로세스의 물리 주소 공간이 연속되지 않아도 되는 메모리 관리 기법으로 연속 메모리 할당의 외부 단편화와 관련 압축의 필요성 문제를 해결한다.
물리 메모리는 프레임이라 불리는 같은 크기 블록으로 나누어진다.
논리 메모리는 페이지라 불리는 같은 크기의 블록으로 나누어진다.
CPU에서 나오는 모든 주소는 페이지 번호(p)와 페이지 오프셋(d) 두 개의 부분으로 나누어진다.
1 ) 페이지 번호 : 페이지 테이블을 액세스할 때 사용된다
cf ) 페이지 테이블은 물리 메모리의 각 프레임의 시작 주소를 저장하고 있다.
2 ) 오프셋 : 참조되는 프레임 안에서의 위치를 가리킨다.
→ 프레임의 시작 주소와 페이지 오프셋이 결합하여 물리 메모리 주소가 된다.
[페이징 예시]
논리 메모리의 페이지 번호 N = 2, 오프셋 M = 4이 되는 것을 아래 그림에서 유추할 수 있다.
페이지 번호 0번은 페이지 테이블에서 물리 메모리 주소 5번지와 연결되는 것을 확인할 수 있다.
[페이징 과정]
과정은 다음과 같다.
1 ) 페이지 번호 p를 추출하여 페이지 테이블의 인덱스로 사용한다.
2 ) 페이지 테이블에서 해당 프레임 번호 f를 추출한다.
3 ) 논리 주소의 페이지 번호 p를 프레임 번호 f로 바꾼다.
-> CPU에서 나온 페이지 번호는 페이지 테이블에서 f로 치환된다. 오프셋은 변하지 않기 때문에 대체되지 않는다.
[페이지 테이블이 만들어지는 과정]
운영체제는 비어있는 프레임 리스트 정보를 가지고 있고 이를 통해 새로운 페이지 테이블을 만들어 준다.
페이지의 경우 외부 단편화 문제는 해결하지만 내부 단편화의 문제는 해결하지 못한다.
예를 들어 페이지의 크기가 2,048B이고 72,766B를 요구한다면 35개의 페이지를 할당하고 1,086B가 남는다.
36번째 할당되는 페이지 프레임은 2048 - 1086 = 962의 내부 단편화가 발생한다.
그렇다면 페이지 크기를 작게 할당하는 것이 바람직할까?
-> 페이지의 크기가 작아지면 그에 반비례하여 페이지 테이블의 크기가 커지게 되고 디스크에 여러번 접근해야 하기 때문에 효율이 떨어진다.