핵심 인사이트 (3줄 요약)
- 본질: 외부 단편화 (External Fragmentation)는 메모리 총량이 부족해서가 아니라, 연속된 빈 공간의 형태가 무너져서 할당이 실패하는 현상이다.
- 가치: 이 문제는 가변 크기 연속 할당이 가진 구조적 약점을 드러내며, 운영체제 (Operating System) 가 메모리를 "얼마나 갖고 있나"보다 "어떻게 배치하나"를 함께 관리해야 함을 보여준다.
- 판단 포인트: 압축 (Compaction), 병합 (Coalescing), 버디 시스템 (Buddy System), 페이징 (Paging)은 모두 외부 단편화를 다루는 전략이지만, 지연시간·구현 복잡도·연속 물리 메모리 요구사항에 따라 선택이 달라진다.
Ⅰ. 개요 및 필요성
외부 단편화 (External Fragmentation)는 가변 크기 프로세스나 세그먼트가 연속 메모리에 배치되고 제거되는 과정에서, 작은 빈 구역들이 메모리 곳곳에 흩어져 큰 요청을 수용하지 못하는 현상이다. 핵심은 총 여유 공간이 아니라 가장 큰 연속 빈 블록의 크기다. 즉 100킬로바이트 (KB)가 비어 있어도 그 공간이 10KB짜리 조각 10개로 흩어져 있으면 40KB 프로세스는 적재할 수 없다.
이 문제가 중요해진 이유는 초기 메모리 관리가 프로그램을 한 덩어리로 연속 배치하는 방식에 의존했기 때문이다. 프로그램이 들어오고 나가는 순서는 제각각이고, 크기도 모두 다르다. 그 결과 운영체제는 시간이 지날수록 빈 공간을 많이 갖고도 새 작업을 받지 못하는 역설에 빠진다.
아래 그림은 외부 단편화가 "메모리 부족"이 아니라 "배치 실패" 문제임을 보여준다.
┌──────────────────────────────────────────────────────────────┐
│ 총 여유 공간은 충분하지만 연속 공간이 부족한 상태 │
├──────────────────────────────────────────────────────────────┤
│ 낮은 주소 │
│ ┌──────┬─────┬──────┬─────┬────────┬─────┬──────────────┐ │
│ │ OS │ P1 │ Hole │ P2 │ Hole │ P3 │ Hole │ │
│ └──────┴─────┴──────┴─────┴────────┴─────┴──────────────┘ │
│ 8KB 12KB 20KB │
│ │
│ 총 여유 공간 = 40KB, 그러나 가장 큰 연속 Hole = 20KB │
│ ⇒ 24KB 요청은 실패 │
└──────────────────────────────────────────────────────────────┘
이 현상을 이해해야 가상 메모리 (Virtual Memory)가 왜 필요한지, 그리고 왜 현대 운영체제가 연속 물리 배치보다 논리적 연속성을 더 중시하는지 자연스럽게 연결된다.
- 📢 섹션 요약 비유: 책장에 큰 책과 작은 책을 섞어 꽂았다 뺐다 반복하면 빈칸은 많아도 큰 전집 한 질이 들어갈 자리는 사라진다. 외부 단편화는 "빈칸 부족"이 아니라 "이어진 빈칸 부족"의 문제다.
Ⅱ. 아키텍처 및 핵심 원리
외부 단편화는 할당 → 해제 → 재할당이 반복될수록 심해진다. 운영체제는 빈 공간 목록을 관리하면서 요청 크기에 맞는 구역을 찾고, 해제 시 인접 빈 공간을 합치며, 필요하면 전체 메모리를 재배열하려고 시도한다. 즉 문제의 본질은 저장 용량보다 배치 정책과 재정리 비용에 있다.
| 메커니즘 | 동작 방식 | 외부 단편화에 미치는 영향 |
|---|---|---|
| 최초 적합 (First Fit) | 앞에서부터 처음 맞는 빈 공간에 배치 | 빠르지만 앞부분에 작은 구멍이 누적되기 쉽다 |
| 최적 적합 (Best Fit) | 남는 공간이 가장 적은 구역 선택 | 미세한 조각을 많이 남겨 장기적으로 불리할 수 있다 |
| 최악 적합 (Worst Fit) | 가장 큰 빈 공간에 배치 | 큰 구역을 유지하려 하지만 검색 비용이 커진다 |
| 병합 (Coalescing) | 인접한 빈 공간을 즉시 합침 | 단편화 완화에 효과적이지만 비인접 조각은 못 합친다 |
| 압축 (Compaction) | 사용 중 블록을 한쪽으로 이동시켜 빈 공간 집중 | 가장 직접적이지만 복사 비용과 중단 시간이 크다 |
아래 흐름은 단편화가 누적되는 전형적인 과정을 나타낸다.
┌──────────────────────────────────────────────────────────────┐
│ 가변 분할 환경의 단편화 누적 흐름 │
├──────────────────────────────────────────────────────────────┤
│ 1) 초기 │
│ [----------------------------- Free --------------------] │
│ │
│ 2) A 20KB, B 10KB, C 15KB 할당 │
│ [ AAAAAAAAAAAAAAAAAAAA | BBBBBBBBBB | CCCCCCCCCCCCCCC ] │
│ │
│ 3) B 해제 │
│ [ AAAAAAAAAAAAAAAAAAAA | 10KB Hole | CCCCCCCCCCCCCCC ]│
│ │
│ 4) D 6KB 할당 │
│ [ AAAAAAAAAAAAAAAAAAAA | DDDDDD | 4KB | CCCCCCCCCCCCCCC ] │
│ │
│ 5) A 해제 │
│ [ 20KB Hole | DDDDDD | 4KB | CCCCCCCCCCCCCCC ] │
│ │
│ 6) E 22KB 요청 │
│ 총 여유 공간은 24KB이지만, 연속 구역 최대값은 20KB │
│ ⇒ 할당 실패 │
└──────────────────────────────────────────────────────────────┘
운영체제 관점에서 까다로운 지점은 주소 재배치다. 압축을 수행하면 프로세스가 참조하던 물리 주소를 모두 옮겨야 하므로, 동적 재배치 하드웨어나 재배치 레지스터 없이는 안전한 수행이 어렵다. 그래서 외부 단편화는 단순한 메모리 관리자 문제를 넘어 하드웨어 지원과 운영체제 정책이 함께 얽힌 통합 설계 이슈가 된다.
- 📢 섹션 요약 비유: 놀이방에서 큰 쿠션과 작은 쿠션을 계속 옮겨 놓으면 통로가 여기저기 끊긴다. 중간중간 치우는 방법은 있지만, 치우는 동안 모두가 잠깐 멈춰야 하므로 정리 비용도 같이 생각해야 한다.
Ⅲ. 비교 및 연결
외부 단편화를 제대로 이해하려면 내부 단편화 (Internal Fragmentation), 세그멘테이션 (Segmentation), 페이징을 함께 봐야 한다. 외부 단편화는 연속 배치의 실패, 내부 단편화는 고정 크기 단위 내부의 남는 공간이다. 전자는 할당 자체를 막을 수 있고, 후자는 공간 효율을 떨어뜨리지만 보통 즉시 치명적이지는 않다.
| 항목 | 외부 단편화 (External Fragmentation) | 내부 단편화 (Internal Fragmentation) |
|---|---|---|
| 발생 조건 | 가변 크기 연속 할당 | 고정 크기 블록·페이지 할당 |
| 낭비 위치 | 블록과 블록 사이 | 할당된 블록 내부 |
| 직접 영향 | 큰 요청이 실패할 수 있음 | 평균 메모리 이용률 저하 |
| 대표 대응 | 병합, 압축, 버디 시스템, 페이징 | 블록 크기 조정, 슬랩 캐시, 페이지 크기 최적화 |
세그멘테이션은 코드, 데이터, 스택처럼 논리 구조를 살리기 좋지만 각 세그먼트 크기가 달라 외부 단편화에 취약하다. 반대로 페이징은 프로세스를 같은 크기의 페이지로 쪼개고, 물리 메모리를 같은 크기의 프레임으로 나눠 어디든 배치할 수 있게 해 외부 단편화를 크게 줄인다. 이때 운영체제는 메모리 관리 장치 (Memory Management Unit) 와 페이지 테이블을 활용해 논리 연속성과 물리 비연속성을 연결한다.
다만 현대 시스템에서도 외부 단편화가 완전히 사라진 것은 아니다. 일반 4킬로바이트 (KB) 페이지는 흩어져 있어도 되지만, 거대 페이지 (Huge Page), 직접 메모리 접근 (Direct Memory Access), 연속 버퍼, 장치 드라이버용 큰 물리 블록은 여전히 연속된 물리 메모리를 요구한다. 그래서 리눅스 (Linux) 같은 운영체제는 버디 시스템과 메모리 압축 기능을 통해 물리 단편화를 계속 관리한다.
- 📢 섹션 요약 비유: 외부 단편화는 큰 소파를 거실에 통째로 넣어야 하는 문제이고, 내부 단편화는 같은 크기의 수납 상자를 쓰다 보니 상자 안에 조금씩 남는 공간 문제다. 페이징은 소파를 작은 모듈 가구처럼 나눠 배치하게 해 주지만, 어떤 손님은 여전히 통짜 소파를 원할 수 있다.
Ⅳ. 실무 적용 및 기술사 판단
실무에서는 외부 단편화를 "고전 개념"으로만 보면 안 된다. 일반 사용자 프로세스는 페이징 덕분에 영향을 덜 받지만, 장시간 실행되는 서버, 대용량 인메모리 데이터 처리, 네트워크 카드 버퍼, 거대 페이지 기반 데이터베이스는 여전히 연속 물리 메모리 확보 여부에 민감하다. 따라서 설계자는 단순히 메모리 사용률이 아니라 연속 블록 확보 가능성을 함께 봐야 한다.
실무 판단 기준
- 가변 크기 연속 할당이 핵심인가?
- 세그먼트 기반, 큰 힙 청크, 연속 버퍼 중심이라면 외부 단편화 위험이 커진다.
- 긴 중단 시간을 허용할 수 있는가?
- 압축은 효과적이지만 복사량이 많아 실시간 시스템에는 부담이다.
- 큰 연속 물리 메모리가 필요한가?
- 거대 페이지, 장치 입출력 (Input/Output), 다이렉트 메모리 맵핑은 단편화에 취약하다.
- 대체 전략이 있는가?
- 페이징, 메모리 풀, 슬랩 할당자 (Slab Allocator), 버디 시스템으로 위험을 완화할 수 있다.
대표 대응 전략
- 페이징 우선 채택: 일반 목적 운영체제라면 외부 단편화 제거 효과가 가장 크다.
- 메모리 풀 적용: 비슷한 크기의 객체를 반복 생성·삭제하는 서버나 게임 엔진에 적합하다.
- 버디 시스템 사용: 2의 거듭제곱 단위로 분할·병합해 연속 블록 관리와 병합 효율을 높인다.
- 압축은 제한적 사용: 모바일 운영체제나 메모리 압박 상황에서 최후 수단으로 고려한다.
안티패턴
-
총 여유 메모리만 보고 "메모리 충분"이라고 판단하는 것
-
압축 비용을 무시한 채 가변 분할이 오래 버틸 것이라 가정하는 것
-
거대 페이지나 장치 버퍼 요구사항을 일반 페이지 할당과 동일하게 보는 것
-
📢 섹션 요약 비유: 창고 운영자는 남은 면적만 보면 안 되고, 지게차가 실제로 들어갈 수 있는 통로 폭도 봐야 한다. 외부 단편화 판단은 "몇 평 남았나"보다 "한 번에 실을 길이 남았나"를 보는 일이다.
Ⅴ. 기대효과 및 결론
외부 단편화를 잘 관리하면 메모리 사용률뿐 아니라 서비스 지속성, 대형 요청 성공률, 지연시간 안정성이 함께 좋아진다. 특히 운영체제는 연속 할당의 한계를 이해해야만 왜 가상 메모리, 페이지 테이블, 버디 시스템 같은 계층형 설계가 필요한지 설명할 수 있다. 즉 외부 단편화는 메모리의 "양"보다 "형태"가 더 중요할 때가 있음을 보여주는 대표 사례다.
반대로 모든 환경에서 외부 단편화를 없애는 것이 최우선은 아니다. 페이징은 내부 단편화와 주소 변환 비용을 감수하고, 압축은 중단 시간을 감수하며, 버디 시스템은 2의 거듭제곱 반올림으로 낭비를 만든다. 따라서 정답은 하나가 아니라, 시스템이 요구하는 연속성·성능·예측 가능성 사이의 균형점이다.
결국 기억해야 할 핵심은 단순하다. 외부 단편화는 "빈 메모리가 없는 상태"가 아니라 "쓸 수 있는 모양의 메모리가 없는 상태"이며, 현대 운영체제는 이를 피하기 위해 논리적 연속성과 물리적 배치를 분리하는 방향으로 진화해 왔다.
- 📢 섹션 요약 비유: 좋은 정리법은 물건 개수를 줄이는 것이 아니라, 필요한 물건이 한 번에 들어갈 자리를 남겨 두는 것이다. 외부 단편화 관리도 결국 공간을 "남기는 법"이 아니라 "이어지게 남기는 법"이다.
📌 관련 개념 맵
| 개념 | 연결 포인트 |
|---|---|
| 세그멘테이션 (Segmentation) | 논리 단위를 살리지만 가변 크기라 외부 단편화에 취약하다 |
| 페이징 (Paging) | 동일 크기 페이지/프레임으로 물리 연속성 의존을 줄인다 |
| 압축 (Compaction) | 흩어진 빈 공간을 한곳으로 모으는 직접적 대응책이다 |
| 버디 시스템 (Buddy System) | 분할과 병합을 체계화해 연속 블록 확보를 돕는다 |
| 거대 페이지 (Huge Page) | 현대 시스템에서도 연속 물리 메모리 확보 이슈를 다시 드러낸다 |
📈 관련 키워드 및 발전 흐름도
연속 메모리 할당
│
▼
가변 분할 · 외부 단편화 (External Fragmentation)
│
├─▶ 병합 (Coalescing) · 압축 (Compaction)
│
▼
세그멘테이션 (Segmentation)의 한계
│
▼
페이징 (Paging) · 가상 메모리 (Virtual Memory)
│
▼
버디 시스템 (Buddy System) · Huge Page · DMA 연속 버퍼 관리
이 흐름은 "연속 할당의 구조적 문제 인식 → 완화 기법 → 페이징 중심 전환 → 현대 물리 메모리 관리 고도화"로 이어지는 진화를 보여준다.
👶 어린이를 위한 3줄 비유 설명
- 큰 장난감과 작은 장난감을 상자에 들락날락 넣다 보면, 빈자리는 많은데 긴 기차 장난감이 통째로 들어갈 자리가 없어질 수 있어요.
- 이게 바로 외부 단편화예요. 자리가 없는 게 아니라, 이어진 자리가 없는 거예요.
- 그래서 컴퓨터는 장난감을 같은 크기 칸에 나눠 담는 방법을 써서 큰 빈틈 문제를 줄이려 해요.