프로세스를 실행하려면 해당 프로세스가 반드시 메모리에 적재되어야 합니다. 이때 프로세스에 연속적인 메모리 공간을 할당하는 방식을 연속 메모리 할당(Contiguous Memory Allocation)이라고 합니다. 이 환경에서 메모리를 효율적으로 관리하기 위한 기법과 발생하는 문제점들을 알아봅시다.
메모리에 적재된 프로세스 중에는 현재 실행되지 않는 프로세스들이 있습니다. 입출력 작업 요구로 대기 상태가 된 프로세스나, 오랫동안 사용되지 않은 백그라운드 프로세스 등이 이에 해당합니다.
이렇게 당장 필요 없는 프로세스들을 임시로 보조기억장치(하드 디스크 등) 일부 영역으로 쫓아내고, 그로 인해 생긴 메모리상의 빈 공간에 당장 실행할 다른 프로세스를 적재하여 실행하는 방식을 스와핑(Swapping)이라고 합니다.

💡 핵심 포인트: 스와핑 기법을 활용하면, 여러 프로세스들이 요구하는 메모리 주소 공간의 총합이 실제 물리 메모리 크기보다 큰 경우에도 프로세스들을 동시에 실행하는 것처럼 보이게 만들 수 있습니다.

메모리 내에 빈 공간이 여러 개 흩어져 있다면, 새로운 프로세스를 어디에 배치해야 할까요? 빈 공간에 프로세스를 연속적으로 할당하는 3가지 대표적인 방식을 살펴봅니다.
연속 메모리 할당 환경에서는 치명적인 한계점이 존재합니다. 프로세스들이 메모리에 연속적으로 할당되고 종료되기를 반복하다 보면, 메모리 사이사이에 작은 빈 공간(자투리)들이 생겨납니다.
이러한 흩어진 빈 공간들의 총합은 충분히 크더라도, 공간이 연속적이지 않아 정작 덩치가 큰 새로운 프로세스를 적재하지 못하고 메모리가 낭비되는 현상이 발생하는데, 이를 외부 단편화(External Fragmentation)라고 합니다.
외부 단편화를 해결하기 위한 임시방편으로, 여기저기 흩어져 있는 작은 빈 공간들을 한쪽으로 몰아넣어 하나의 큰 빈 공간으로 만드는 '압축' 방법이 있습니다. (메모리 조각 모음과 비슷합니다.)
🚨 압축의 단점 (오버헤드)