페이징 (Paging)

컴퓨터과학·AI
한 줄 정의: 운영체제가 메모리를 일정한 크기의 조각(페이지)으로 나누어, 프로그램의 논리 주소를 물리 메모리의 페이지 단위로 자유롭게 대응시켜 관리하는 기법입니다.

쉽게 풀면

이사할 때 짐을 큰 트럭 한 대에 통째로 실어야 한다면, 트럭 크기와 짐의 모양이 딱 맞지 않는 이상 빈 공간이 많이 남거나 짐이 안 들어갈 수 있습니다. 대신 짐을 똑같은 크기의 상자 여러 개에 나눠 담으면, 상자 하나하나를 트럭의 빈 자리 아무 곳에나 효율적으로 채워 넣을 수 있습니다. 페이징은 바로 이 "규격 상자" 방식입니다. 프로그램이 사용하는 메모리를 "페이지"라는 고정 크기 단위로 잘라두고, 실제 물리 메모리도 같은 크기의 "프레임"으로 나눠둡니다. 프로그램이 어떤 페이지를 필요로 하면 운영체제가 비어 있는 프레임 아무 곳에나 그 페이지를 배치하고, 그 대응 관계를 페이지 테이블에 기록해 둡니다. 그 결과 메모리가 연속된 공간이 아니어도 프로그램은 자신이 마치 하나의 연속된 큰 공간을 쓰는 것처럼 동작할 수 있습니다.

왜 중요한가

페이징은 현대 운영체제가 프로세스 간 메모리를 안전하게 격리하면서도 효율적으로 공유하는 근간이 되는 기법이어서, 운영체제 연구뿐 아니라 가상화·컨테이너 기술, GPU 메모리 관리, 보안(메모리 보호) 연구에서도 빠지지 않고 등장합니다. 페이지 크기와 페이지 테이블 구조를 어떻게 설계하느냐가 시스템 전반의 성능과 확장성에 직결되기 때문에, 시스템 소프트웨어 논문에서 성능 개선의 핵심 지렛대로 자주 다뤄집니다.

논문에서는 이렇게 쓰입니다

"제안된 메모리 관리 기법은 페이징(paging) 단위를 4KB에서 2MB의 대형 페이지(huge page)로 확대하여 페이지 테이블 접근 오버헤드를 감소시켰다."

이 문장은 메모리를 나누는 조각의 크기를 키워서, 주소 변환에 드는 부가 작업의 횟수를 줄였다는 뜻입니다.

"가상화 환경에서는 게스트 운영체제의 페이징과 하이퍼바이저의 페이징이 중첩되는 이중 페이지 테이블 구조로 인해 주소 변환 오버헤드가 추가로 발생한다."

클라우드·가상화 시스템 연구에서 페이징 개념이 여러 계층에 걸쳐 중첩되며 새로운 성능 문제를 낳는 사례를 보여준다.

"GPU 메모리 부족 문제를 완화하기 위해 CPU-GPU 간 통합 페이징을 활용해 필요한 페이지만 온디맨드로 전송하는 기법을 제안하였다."

이질적 컴퓨팅(heterogeneous computing) 분야에서 전통적인 페이징 개념이 GPU 메모리 관리로 확장 적용된 예시이다.

조금 더 깊게 보면

페이징에서 논리 주소를 물리 주소로 변환하는 과정은 페이지 테이블을 참조해 이루어지는데, 이 과정을 매번 메모리에서 조회하면 느리기 때문에 최근 사용한 변환 결과를 캐시해두는 TLB(Translation Lookaside Buffer)가 함께 쓰입니다. 논문에서 성능을 논할 때는 페이지 폴트율뿐 아니라 TLB 적중률, 다단계 페이지 테이블의 탐색 깊이 등을 함께 고려하는 경우가 많으며, 페이지 크기를 키우면 TLB 적중률은 높아지지만 내부 단편화가 늘어나는 트레이드오프가 있다는 점도 자주 언급됩니다.

주의할 점

페이징은 가상 메모리를 실현하는 대표적인 구현 기법 중 하나일 뿐, 가상 메모리 자체와 같은 개념은 아닙니다. 가상 메모리는 "물리 메모리보다 큰 주소 공간을 제공한다"는 목표를 가리키는 개념이고, 페이징은 그 목표를 고정 크기 페이지 단위로 나눠 달성하는 구체적인 방법입니다. 페이지 크기를 어떻게 정하느냐에 따라 페이지 테이블의 크기와 메모리 낭비(내부 단편화) 정도가 달라지므로, 시스템 성능을 논할 때는 이 둘을 구분해서 이해해야 합니다.

관련 용어