페이징은 현대 운영체제에서 메모리를 관리하는 중요한 기법 중 하나이다. 이는 물리 메모리와 가상 메모리 간의 매핑을 통해 프로그램이 실행에 필요한 메모리 공간을 효율적으로 사용할 수 있도록 한다. 페이징의 기본 개념은 메모리를 고정된 크기의 작은 블록으로 나누는 것이다. 이러한 블록을 페이지라고 하며, 각 페이지는 가상 메모리와 물리 메모리 모두에 존재할 수 있다.
페이징 시스템에서, 가상 메모리는 페이지 단위로 나뉘며, 각 페이지는 물리 메모리의 페이지 프레임이라고 불리는 동일한 크기의 블록에 매핑된다. 프로그램이 실행될 때, 필요한 가상 메모리 페이지는 물리 메모리의 페이지 프레임에 로드되며, 이를 통해 CPU가 해당 데이터에 접근할 수 있게 된다. 만약 필요한 페이지가 물리 메모리에 존재하지 않는 경우, 페이지 폴트(Page Fault)가 발생하고, 운영체제는 해당 페이지를 디스크에서 물리 메모리로 가져오는 작업을 수행한다.
페이징의 주요 장점 중 하나는 외부 단편화를 방지할 수 있다는 점이다. 외부 단편화는 메모리가 여러 크기의 가변 블록으로 나뉠 때 발생하며, 빈 공간이 존재하더라도 할당 가능한 연속된 큰 블록이 부족하여 메모리를 효율적으로 사용할 수 없게 되는 현상이다. 페이징을 사용하면, 모든 페이지와 페이지 프레임의 크기가 동일하기 때문에 이러한 외부 단편화 문제를 해결할 수 있다. 대신, 페이징은 내부 단편화를 야기할 수 있는데, 이는 페이지 내에서 실제로 사용되지 않는 빈 공간이 발생하는 경우이다.
페이징의 구현은 페이지 테이블을 통해 이루어진다. 페이지 테이블은 각 가상 페이지와 해당 물리 페이지 프레임 간의 매핑 정보를 저장하는 데이터 구조이다. CPU가 가상 주소를 참조할 때, 페이지 테이블을 조회하여 해당 가상 페이지가 매핑된 물리 페이지 프레임을 찾아낸다. 이를 통해 가상 주소는 물리 주소로 변환되며, CPU가 데이터에 접근할 수 있게 된다. 페이지 테이블은 운영체제에 의해 관리되며, 메모리 접근 시마다 빠르게 조회될 수 있도록 고속 캐시 메모리인 TLB(Translation Lookaside Buffer)를 사용하여 성능을 향상시킨다.
페이징 시스템에서 중요한 또 다른 개념은 페이지 교체 알고리즘이다. 물리 메모리가 제한된 용량을 가지고 있기 때문에, 새로운 페이지를 로드하기 위해 기존의 페이지를 내보내야 하는 경우가 발생할 수 있다. 이러한 상황에서 운영체제는 페이지 교체 알고리즘을 사용하여 어떤 페이지를 내보낼지 결정한다. 대표적인 페이지 교체 알고리즘으로는 FIFO(First-In-First-Out), LRU(Least Recently Used), LFU(Least Frequently Used) 등이 있다. 각 알고리즘은 다양한 기준에 따라 페이지 교체를 수행하며, 시스템의 성능과 효율성에 영향을 미친다.