18. 커널 메모리 할당자: 버디 시스템(Buddy System)과 슬랩(Slab) 할당
문제 18 — 커널 메모리 할당자: 버디 시스템(Buddy System)과 슬랩(Slab) 할당
운영체제 커널은 물리 페이지와 작은 커널 객체를 서로 다른 계층의 할당자로 관리한다. **버디 시스템(buddy allocator)**과 **슬랩/슬럽 할당자(slab/slub allocator)**의 동작 원리와 역할 분담을 설명하고, 이들이 단편화(fragmentation)와 성능에 어떻게 대응하는지 답하라. 또한 이 개념이 게임 서버의 유저 공간 메모리 풀 설계에 주는 시사점을 논하라.
다음을 포함해 설명하라.
-
버디 시스템: 2의 거듭제곱 크기 블록으로 페이지를 관리하는 방식, 분할(split)과 병합(coalesce), "버디"의 정의와 병합 조건. 외부 단편화(external fragmentation)를 어떻게 완화하며 어떤 내부 단편화(internal fragmentation)를 유발하는가.
-
슬랩/슬럽 할당자: 같은 크기·같은 타입의 객체를 캐시(slab)로 미리 떼어 관리하는 이유. 객체 생성/소멸 비용 절감, 캐시 컬러링(cache coloring), per-CPU 캐시로 락 경합을 줄이는 방식. 버디에서 페이지를 받아 잘게 나눠 쓰는 계층 관계.
-
내부 vs 외부 단편화: 두 단편화의 정의와, 버디(주로 내부)와 슬랩(크기별 클래스로 외부 단편화 억제)이 각각 어느 쪽을 다루는지.
-
게임 서버 유저 공간에의 시사점: tcmalloc/jemalloc 같은 유저 할당자가 크기 클래스·per-thread 캐시·아레나로 이 아이디어를 차용하는 점, 그리고 게임 서버가 동일 크기 객체(엔티티·패킷 버퍼·세션)를 오브젝트 풀/슬랩식 풀로 관리해 할당 지터와 단편화를 줄이는 설계.
직접 답을 작성한 뒤, 위 해설 보기에서 모범답안과 대조하세요.