메모리 관리는 컴퓨터 시스템에서 프로그램의 실행과 자원 활용의 핵심 역할을 하며, 시스템의 효율성과 안정성, 보안까지 좌우한다. 메모리 관리를 배우는 이유는 한정된 물리적 자원(메모리)을 효율적으로 사용할 수 있게 하고, 여러 프로그램을 동시에 빠르고 안정적으로 실행할 수 있게 하기 때문이다.
페이징은 프로세스의 주소 공간을 일정 크기의 페이지 단위로 쪼개어, 물리 메모리의 프레임에 불연속적으로 할당하는 방식이다. 페이징은 외부 단편화(continuous space가 부족해 할당이 불가능해지는 공간 낭비.)는 해결할 수 있으나, 내부 단편화(각 페이지가 프레임에 다 채워지지 않아 남는 공간이 다른 프로세스에 사용될 수 없는 현상)는 발생한다. 예시로, Windows, Linux 등 거의 모든 범용 OS에서 프로세스 메모리 관리에 페이징을 사용한다.
내부 단편화와 외부 단편화는 메모리 관리에서 발생하는 "공간 낭비"의 원인이지만, 발생 원인과 현상이 다르다.


사진출처:https://hojunking.tistory.com/109
세그멘테이션은 프로그램을 논리적 단위(코드, 데이터, 스택 등)로 나눠 각각 크기가 다른 메모리 영역에 배치한다. 세그멘트 크기가 가변적이기 때문에, 삭제·할당·조정에서 연속 공간에 빈틈(홀)이 생기며, 이로 인해 외부 단편화 문제가 발생한다. 그럼에도 사용하는 이유는 코드와 데이터의 분리를 통한 보호·공유가 가능하고, 논리적 단위별로 접근 권한을 부여할 수 있기 때문이다. 단점으로는 외부 단편화와 동적 메모리 관리의 어려움, 장점은 내부 단편화가 없고 보호와 공유에 효과적이라는 점이 있다.
가상 메모리는 실제보다 큰 메모리 공간을 제공하는 기술로, 보조저장장치(디스크)를 실제 메모리처럼 사용할 수 있게 한다. 예를 들어, 여러 프로그램을 동시에 실행하면서 실제 메모리 용량을 초과하더라도 실행이 가능하다(대개 Windows PC에서 여러 앱을 띄울 때 등). 페이지 폴트는 프로세스가 필요한 페이지가 실제 메모리에 없을 때 발생하는 예외로, 운영체제가 디스크에서 필요한 페이지를 메모리로 불러오는 과정을 포함한다. 페이지 폴트가 너무 자주 발생하면 시스템 성능 저하가 생기므로, 효율적인 페이지 교체가 중요하다.
페이지 교체 알고리즘은 페이지 폴트 발생 시 어떤 페이지를 교체할지 결정한다. FIFO 방식은 오래된 페이지부터 제거하지만, 페이지 프레임 수가 증가해도 오히려 페이지 폴트가 증가하는 Belady anomaly(비정상적 현상)가 등장할 수 있다. LRU, LFU, OPT 등의 방식이 있고, 실제 운영체제에서는 LRU 변형(Clock 등)이 가장 널리 채택된다. LRU는 최근 사용되지 않은 페이지를 교체하여 실제 사용 패턴에 가깝고, LFU는 사용 빈도가 낮은 페이지를 교체한다. FIFO는 단순하지만 성능에서 단점이 있어 일부 특수 상황에서만 사용된다.
단편화 관련 표가 있어서 더 쉽게 이해했어요!