Learning
토픽 52 / 85·메모리 관리

슬랩 할당자 (Slab Allocator)

슬랩 할당자 (Slab Allocator)

커널 객체(task_struct, inode 등)를 동일 크기의 사전 할당된 메모리 풀(캐시)에서 빠르게 할당/해제하는 메모리 관리 기법으로, 버디 시스템의 내부 단편화를 해결

목적: 커널 객체의 빈번한 할당/해제 최적화, 내부 단편화 제거, 캐시 효율성 향상

3단계 구조

  • Cache: 특정 객체 타입 전용 (예: task_struct 캐시, inode 캐시), kmem_cache_create()로 생성
  • Slab: 하나 이상의 연속 페이지, 같은 크기의 객체 슬롯들로 구성
  • Object: 실제 할당/해제 단위, 초기화된 상태로 캐싱

동작

Slab 상태: Full(모든 객체 사용 중), Partial(일부 사용), Empty(모두 Free, 회수 가능)

장점: 내부 단편화 제거(객체 크기 정확 할당), 빠른 할당/해제(O(1)), 객체 캐싱(생성/소멸 비용 절감), 하드웨어 캐시 정렬

단점: 메모리 오버헤드(메타데이터), Slab 단위 할당으로 미사용 시 메모리 낭비 가능

Linux 커널 변형: SLAB(원본, Solaris 유래) → SLUB(단순화, 기본값) → SLOB(소형 임베디드용)

비교: Slab(객체캐시/단편화 없음/커널) vs 버디(페이지 단위/내부 단편화) vs malloc(범용/사용자 공간)

연관: 버디 시스템, 메모리 관리, 내부 단편화, Linux 커널, kmalloc