핵심 키워드 : 페이징, 페이지 테이블, PTBR, TLB

프로세스를 메모리에 연속적으로 할당하는 방식은 두 가지 문제를 내포하고 잇습니다. 한 가지는 앞선 절에서 다루었던 외부 단편화이고, 또 하나는 물리 메모리보다 큰 프로세스를 실행할 수 없다는 점입니다. 프로세스를 반드시 메모리에 연속적으로 할당해야 한다면 메모리보다 큰 프로그램은 적재할 수 없습니다. 4GB 메모리가 설치된 컴퓨터로는 4GB 이상의 프로그램을 실행할 수 없지요.

**가상 메모리(virtual memory)**는 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술입니다. 이를 가능케하는 가상 메모리 관리 기법에는 크게 페이징과 세그멘테이션이 있습니다.

페이징이란

연속 메모리 할당 방식에서 외부 단편화가 생긴 근본적인 이유는 각기 다른 크기의 프로세스가 메모리에 연속적으로 할당되었기 때문입니다.

만일 메모리와 프로세스를 일정한 단위로 자르고, 이를 메모리에 불연속적으로도 할당할 수만 있다면 외부 단편화는 발생하지 않습니다.

**페이징(paging)**은 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 **프레임(frame)**이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법입니다.

메모리에 적재될 필요가 없는 페이지들은 보조기억장치로 **스왑 아웃**되고, 실행에 필요한 페이지들은 메모리로 스왑 인 되는 것이지요. 페이지 아웃, **페이지 인**이라고 부르기도 합니다.

이는 다르게 말하면 한 프로세스를 실행하기 위해 프로세스 전체가 메모리에 적재될 필요가 없다는 말과 같습니다. 프로세스를 이루는 페이지 중 실행에 필요한 일부 페이지만을 메모리에 적재하고, 당장 실행에 필요하지 않은 페이지들은 보조기억장치에 남겨둘 수 있습니다. 이와 같은 방식을 통해 물리 메모리보다 더 큰 프로세스를 실행할 수 있습니다.

페이지 테이블

그런데 여기서 문제가 잇습니다. 프로세스가 메모리에 불연속적으로 배치되어 있다면 CPU입장에서 이를 순차적으로 실행할 수가 없습니다. 프로세스를 이루는 페이지가 어느 프레임에 적재되어 있는지 CPU가 모두 알고 있기란 어렵기 때문입니다. 즉, 프로세스가 메모리에 불연속적으로 배치되면 CPU 입장에서 다음에 실행할 명령어 취치를 찾기가 어려워집니다.

이를 해결하기 위해 페이징 시스템은 프로세스가 비록 (실제 메모리 내의 주소인) 물리 주소에 불연속적으로 배치되더라도 (CPU가 바라보는 주소인) 논리 주소에는 연속적으로 배치되도록 **페이지 테이블(page table)**을 이용합니다.

페이지 테이블은 페이지 번호와 프레임 번호를 짝지어 주는 일종의 이정표입니다. CPU로 하여금 페이지 번호만 보고 해당 페이지가 적재된 프레임을 찾을 수 잇게 합니다. 다시 말해 페이지 테이블은 현재 어떤 페이지가 어떤 프레임에 할당되었는지를 알려줍니다.