토픽 51 / 111·메모리 계층 (Memory Hierarchy)
메모리 단편화 (Memory Fragmentation)
메모리 단편화 (Memory Fragmentation)
메모리 할당·해제가 반복되면서 사용 가능한 메모리가 비효율적으로 분산되어 실제 가용 용량보다 적게 활용되는 현상
목적: 단편화 유형 식별 및 적절한 해결 기법 적용을 통한 메모리 이용률 극대화
유형
- •내부 단편화(Internal Fragmentation): 할당된 블록 내부에 사용되지 않는 공간 발생, 고정 크기 할당(페이징) 시 발생, 평균 낭비 = 블록크기/2
- •외부 단편화(External Fragmentation): 할당된 블록 사이에 작은 빈 공간이 흩어져 총합은 충분하나 연속 할당 불가, 가변 크기 할당(세그멘테이션) 시 발생
내부 단편화 원인: 고정 크기 블록 할당(페이징 4KB), 메모리 정렬(alignment) 패딩, 힙 할당기의 최소 블록 크기
외부 단편화 원인: 가변 크기 세그먼트 할당·해제 반복, 프로세스 종료 후 비연속 빈 공간 발생
내부 단편화 해결
- •슬랩 할당기(Slab Allocator): 동일 크기 객체를 미리 할당된 슬랩에서 관리, 커널 객체에 활용(Linux)
- •다양한 블록 크기: 페이지 크기 다변화(4KB/2MB/1GB), 요청에 맞는 크기 선택
- •메모리 풀(Memory Pool): 용도별 고정 크기 풀 사전 할당, 실시간 시스템에서 활용
외부 단편화 해결
- •압축(Compaction): 사용 중인 블록을 한쪽으로 이동, 연속 빈 공간 확보, 높은 오버헤드(프로세스 중단·주소 재배치)
- •페이징: 고정 크기 페이지로 분할하여 외부 단편화 원천 제거, 현대 OS 표준
- •버디 시스템(Buddy System): 2^n 단위 분할·병합, 빠른 할당·해제, 내부 단편화 존재하나 외부 단편화 감소
- •메모리 배치 기법: First Fit(빠름) / Best Fit(공간 효율) / Worst Fit(큰 잔여) / Next Fit(균등 분산)
- •세그멘테이션+페이징: 세그먼트를 페이지로 재분할, 논리적 구조 유지하면서 외부 단편화 제거
50% 규칙 (Knuth): First Fit 사용 시 n개 할당 블록이 있으면 약 0.5n개의 빈 블록(hole) 발생
적용사례: OS 메모리 관리(Linux buddy+slab), 힙 할당기(malloc/free), JVM GC(compaction), 디스크 단편화(defragmentation)
비교: 내부 단편화(블록 내부 낭비/고정크기/페이징) vs 외부 단편화(블록 사이 낭비/가변크기/세그멘테이션)
연관: 페이징, 세그멘테이션, 가상 메모리, 버디 시스템, 슬랩 할당기, 가비지 컬렉션