기억장치 분할과 고정·가변 메모리 관리
기억장치 분할의 고정 분할과 가변 분할을 비교하고, 단편화·적재 전략·페이징 및 세그먼테이션과의 관계를 정리한다.
2026-08-14 · 최초 발행 2026-01-04
여러 프로세스를 메모리에 함께 올리기 위한 출발점
기억장치 분할(Memory Partitioning)은 물리 메모리를 여러 파티션으로 나누고, 각 영역에 프로세스를 배치하는 메모리 관리 기법이다. 하나의 프로세스가 메모리를 독점하던 단일 프로그래밍 환경에서 벗어나 여러 프로세스를 동시에 적재하기 위해 사용됐다.
분할은 단순히 공간을 나누는 작업이 아니다. 제한된 메모리를 활용하면서 프로세스 사이의 메모리 침범을 막고, CPU가 유휴 상태에 머무는 시간을 줄여 시스템 처리량을 높이는 역할도 맡는다.
메모리 관리 방식은 단일 프로그래밍에서 고정 분할, 가변 분할을 거쳐 페이징과 세그먼테이션으로 발전했다. 이 흐름에서 고정 분할은 단순성을, 가변 분할은 적재 유연성을 얻는 대신 각각 다른 단편화 문제를 남겼다.
미리 나눈 영역에 적재하는 고정 분할
고정 분할(Fixed Partitioning)은 시스템 부팅 시 메모리를 정해진 크기의 파티션으로 미리 나누는 방식이다. 파티션의 크기는 이후 바뀌지 않으며, 하나의 파티션에는 하나의 프로세스를 적재한다. 관리 오버헤드가 낮고 구현이 간단하다는 점이 특징이다.
균등 분할은 모든 파티션을 같은 크기로 만든다. 관리가 단순하고 프로세스 크기와 관계없이 할당하기 쉽지만, 큰 프로세스를 수용할 수 없고 내부 단편화가 심해질 수 있다.
비균등 분할은 파티션마다 다른 크기를 둔다. 예를 들어 2MB, 4MB, 8MB 크기의 파티션을 함께 구성하면 다양한 크기의 프로세스를 받아들일 수 있고 내부 단편화도 어느 정도 줄어든다. 다만 파티션 자체가 고정 크기라는 제약은 남는다.
남는 공간과 적재 위치의 제약
고정 분할에서 대표적인 문제는 내부 단편화(Internal Fragmentation)다. 파티션보다 작은 프로세스를 적재하면 할당은 됐지만 사용되지 않는 공간이 파티션 내부에 남는다. 4MB 파티션에 3MB 프로세스를 올리면 1MB가 낭비되는 식이다.
프로세스가 어느 파티션보다도 크면 실행할 수 없다. 오버레이(Overlay) 기법으로 우회할 수 있지만 관리가 복잡해진다. 작은 프로세스가 큰 파티션을 차지하는 경우도 있어, 제한된 파티션 수는 다중 프로그래밍 수준을 낮출 수 있다.
절대 적재와 재배치 가능 적재
절대 적재(Absolute Loading)는 프로그램을 특정 파티션에만 적재하는 방식이다. 컴파일 단계에서 절대 주소로 변환하므로 재배치할 수 없고, 사용할 수 있는 파티션도 특정 위치로 제한된다. 그만큼 메모리 사용의 융통성이 떨어진다.
재배치 가능 적재(Relocatable Loading)는 여러 파티션 가운데 하나를 선택해 프로그램을 적재할 수 있다. 재배치 레지스터(Relocation Register)를 사용하며, 논리 주소에 기준 주소를 더해 물리 주소를 만든다. 프로그램이 머무를 파티션을 선택할 수 있어 절대 적재보다 유연하다.
요청 크기에 맞춰 영역을 만드는 가변 분할
가변 분할(Dynamic Partitioning)은 프로세스가 메모리를 요청하는 시점에 필요한 크기만큼 파티션을 생성한다. 실행 중 파티션의 크기와 개수가 바뀌며, 프로세스가 종료되면 해당 공간은 반환된다. 인접한 빈 공간은 병합(Coalescing)해 관리한다.
이 방식에서는 연속 메모리 공간을 할당할 위치를 결정해야 한다. First Fit은 메모리를 순서대로 찾다가 처음 발견한 충분한 공간을 사용한다. 할당이 빠르지만 메모리 앞부분에 작은 빈 공간이 누적될 수 있다.
Best Fit은 모든 빈 공간 가운데 요청 크기에 가장 가까운 곳을 고른다. 큰 빈 공간을 보존할 수 있는 반면 전체 탐색이 필요하고, 아주 작은 빈 공간을 만들 수 있다.
Worst Fit은 가장 큰 빈 공간에 할당한다. 남는 공간이 커 재사용될 가능성은 높지만 큰 빈 공간이 빠르게 소진될 수 있다.
빈 공간이 흩어지는 외부 단편화
가변 분할은 내부 단편화가 없지만 외부 단편화(External Fragmentation)가 발생한다. 빈 공간의 총합은 충분해도 여러 위치에 흩어져 있으면 연속 공간을 요구하는 프로세스를 적재할 수 없다. 예를 들어 3MB 빈 공간이 여러 개 있어도 8MB 프로세스에는 할당할 수 없다.
압축(Compaction)은 흩어진 빈 공간을 한쪽으로 모아 큰 연속 공간을 만드는 방법이다. 외부 단편화를 해소할 수 있지만, 모든 프로세스를 이동해야 하므로 오버헤드가 매우 크고 시스템 정지가 필요하다. 프로세스를 이동할 때 주소를 다시 계산해야 하므로 재배치 레지스터나 동적 주소 바인딩도 필요하다.
관리 방식이 바꾸는 기준
| 구분 | 고정 분할 | 가변 분할 |
|---|---|---|
| 파티션 크기 | 고정 (시스템 부팅 시 결정) | 동적 (프로세스 요청 시 결정) |
| 파티션 개수 | 고정 | 동적 (변동) |
| 내부 단편화 | 발생 (심각) | 없음 |
| 외부 단편화 | 없음 | 발생 |
| 구현 복잡도 | 낮음 | 높음 |
| 관리 오버헤드 | 낮음 | 높음 |
| 메모리 효율 | 낮음 | 높음 |
| 유연성 | 낮음 | 높음 |
고정 분할은 예측 가능하고 단순한 대신 프로세스 크기에 맞춰 공간을 조정할 수 없다. 가변 분할은 그 제약을 완화하지만 연속 공간을 유지하기 위한 관리 비용을 감수해야 한다.
페이징과 세그먼테이션으로 이어진 분할 개념
페이징(Paging)은 메모리를 고정 크기 페이지로 나누는 방식으로, 고정 분할이 발전한 형태다. 논리 주소와 물리 주소를 분리하며 외부 단편화가 없고 내부 단편화를 최소화한다.
세그먼테이션(Segmentation)은 코드, 데이터, 스택처럼 프로그램의 논리적 단위를 가변 크기 세그먼트로 나눈다. 가변 분할의 특성을 이어받아 프로그램 구조를 반영할 수 있지만 외부 단편화가 생길 수 있다.
세그먼테이션과 페이징을 함께 쓰는 방식은 세그먼트를 다시 페이지로 나눈다. 현대 운영체제는 이처럼 두 기법의 장점을 결합한 형태로 메모리를 관리하며, 가상 메모리와도 연결한다.
분할 기법이 남아 있는 환경
제한된 메모리에서 예측 가능한 사용 패턴과 실시간 요구사항을 만족해야 하는 임베디드 시스템에서는 고정 분할을 사용할 수 있다.
초기 메인프레임에서는 가변 분할로 대형 배치 작업을 수행했다. MVS, OS/360 등에서는 압축 기법을 이용해 외부 단편화를 관리했다.
현대 운영체제는 페이징과 세그먼테이션으로 발전했지만, 메모리를 분할하고 할당하며 단편화를 다룬다는 기본 원리는 계속 계승하고 있다.