이전 글에서는 CPU의 빠른 연산 속도를 지원하기 위해 레지스터(Register)와 캐시 메모리(Cache Memory), 그리고 메모리 계층 구조에 대해 정리하였다.
RAM 부족 문제

프로그램이 실행되면 운영체제는 프로그램의 일부를 메모리(RAM)에 적재하여 CPU가 실행할 수 있도록 한다. 하지만 여러 프로그램을 동시에 실행하거나 큰 용량의 프로그램을 실행할 경우 메모리(RAM) 공간이 부족해질 수 있다. 예를 들어 게임, 웹 브라우저, IDE, Docker와 같은 프로그램을 동시에 실행하면 메모리 사용량이 크게 증가하게 된다. 메모리 공간이 부족해지면 프로그램 실행 속도가 느려지거나 일부 프로그램이 정상적으로 동작하지 못하는 문제가 발생할 수 있다.
운영체제는 이러한 메모리 부족 문제를 해결하기 위해 가상 메모리(Virtual Memory) 개념을 사용한다.
가상 메모리(Virtual Memory)

운영체제는 메모리(RAM) 공간이 부족할 경우 보조기억장치(SSD/HDD)의 일부 공간을 메모리처럼 활용하는 가상 메모리(Virtual Memory) 개념을 사용한다. 실제 실행 중인 프로그램의 모든 데이터를 항상 메모리(RAM)에 올려두는 것이 아니라, 현재 필요한 데이터만 메모리에 적재하고 나머지는 보조기억장치에 저장해 두는 방식이다. 이후 CPU가 필요한 데이터를 요청하면 운영체제는 보조기억장치에 저장된 데이터를 다시 메모리(RAM)로 가져와 프로그램이 계속 실행될 수 있도록 한다. 이를 통해 운영체제는 실제 메모리(RAM)보다 더 큰 메모리 공간이 존재하는 것처럼 프로그램을 실행할 수 있게 된다.
운영체제는 이러한 가상 메모리 영역을 처음부터 관리하고 있으며, 메모리 부족 상황에서 페이지(Page) 단위로 데이터를 이동시킨다.
페이지(Page)

운영체제는 메모리를 효율적으로 관리하기 위해 메모리를 일정한 크기의 블록 단위로 나누어 관리한다. 이 블록을 페이지(Page)라고 한다. 메모리를 필요한 크기만큼 나누어 관리할 수 있어 메모리 사용 효율이 높아진다. 또한 프로그램이 필요로 하는 일부 페이지만 메모리에 오를 수 있어, 더 많은 프로그램을 실행할 수 있다.
페이지 크기는 운영체제와 시스템 아키텍쳐에 따라 다르며, 보통 4KB, 8KB, 16KB 등으로 설정된다.
페이지 부재(Page Fault)
운영체제는 필요한 페이지(Page)만 메모리(RAM)에 올려두고 관리한다. 그렇다면 CPU가 필요한 페이지가 현재 메모리(RAM)에 존재하지 않는다면 어떻게 될까?
CPU가 필요한 페이지(Page)가 메모리(RAM)에 존재하지 않는 경우 페이지 부재(Page Fault)가 발생한다. 이 경우 운영체제는 보조기억장치(SSD/HDD)에 저장되어 있던 해당 페이지를 다시 메모리(RAM)로 가져오게 된다. 이후 필요한 페이지가 메모리(RAM)에 적재되면 CPU는 다시 프로그램 실행을 이어간다. 하지만 보조기억장치(SSD/HDD)는 메모리(RAM)보다 훨씬 느리기 때문에 Page Fault가 자주 발생하면 프로그램 성능이 크게 저하될 수 있다.
메모리 공간이 부족할 경우 운영체제는 어떤 페이지를 메모리에서 제거할지 결정해야 하며, 이를 위해 FIFO, LRU와 같은 페이지 교체 알고리즘이 사용된다.
정리
운영체제는 메모리를 효율적으로 관리하기 위해 메모리를 일정한 크기의 블록 단위로 나누어 관리한다. 이 블록을 페이지(Page)라고 한다. 즉, 페이지(Page)는 가상 메모리만을 위한 개념이 아니라 운영체제의 기본적인 메모리 관리 단위라고 볼 수 있다.
운영체제는 처음부터 보조기억장치의 일부 공간을 가상 메모리 영역으로 관리하고 있으며, 메모리(RAM) 공간이 부족해질 경우 사용 빈도가 낮은 페이지(Page)를 보조기억장치(SSD/HDD)의 가상 메모리 영역으로 이동시켜 메모리 공간을 확보한다.