이 포스팅은 Operating Systems: Three Easy Pieces, Remzi H. Arpaci-Dusseau & Andrea C. Arpaci-Dusseau을 읽고 개인 학습용으로 정리한 글입니다.
페이지 크기를 n배 증가시키면, 페이지 테이블의 크기가 1/n으로 감소된다
페이지 크기의 증가는 내부 단편화(internal fragmentation)을 증가시킨다
-> 페이지 내부의 낭비 공간 증가
-> 컴퓨터 시스템의 메모리가 금방 고갈
결국 대부분의 컴퓨터 시스템들은 비교적 작은 페이지를 사용한다
-> 일반적으로 4KB(x86) 또는 8KB(SPARCv9) 사용
프로세스 전체 주소 공간을 위한 하나의 페이지 테이블을 두는 대신, 논리 세그멘트마다 따로 페이지 테이블을 두자
-> 코드, 힙, 스택 세그멘트에 대해 각각의 페이지 테이블을 둔다
베이스 레지스터: 세그멘트의 페이지 테이블의 시작 주소 저장
바운드 레지스터: 세그멘트의 페이지 테이블의 끝을 나타냄
프로세스당 하나의 페이지 테이블 대신 하나의 시스템에 하나의 역 페이지 테이블을 유지한다
페이지 테이블: 가상 주소 상의 페이지 -> 물리 메모리의 페이지
역 페이지 테이블: 물리 메모리의 페이지 -> 가상 주소 상의 페이지
-> 역 페이지 테이블의 각 항목은 해당 물리 페이지를 사용 중인 프로세스 번호 & 해당 가상 페이지 번호를 가짐
역 페이지 테이블에서는 주소 변환을 위해 전체 테이블을 검색해서 원하는 가상 주소 페이지를 갖는 항목을 찾아야 한다
-> 탐색 속도 향상을 위해 주로 해쉬 테이블 사용
이제까지는 페이지 테이블이 커널이 소유하고 있는 물리 메모리 영역에 존재한다고 가정하였음
어떤 시스템들은 페이지 테이블들을 커널 가상 메모리에 존재시키고,
시스템의 메모리가 부족할 경우, 페이지 테이블들을 디스크로 스왑(swap)하기도 한다