July 2025
Intermediate to advanced
492 pages
8h 23m
Japanese
この章ではカーネルメモリの確保と解放について説明します。モジュールを使った効率のよいメモリの扱い方についても解説します。
前半ではカーネルの2つの主要なメモリ確保について説明します。それぞれページアロケータとスラブアロケータです。前者はバディシステムアロケータとも呼ばれます。これらAPIについて、使い方だけではなくメモリ効率が悪くなる場合と、それを解決する方法を説明します。後半では、カスタムスラブキャッシュの作成と、vmalloc、そして状況に応じた適切なAPIの選択について説明します。またメモリの回収、OOM(Out of Memory)キラー、デマンドページングについても説明します。
ページアロケータはページ単位でメモリを扱います。これは物理メモリの空き領域を効率的に管理するためのものです。
しかしページアロケータだけではページサイズ未満のメモリ領域をうまく扱えないため、他のアロケータもあります。その1つがスラブアロケータです。スラブアロケータの実装にはSLAB、SLUB、SLOBの3つがあり、デフォルトはSLUBです。詳細は後述します。
図6-1のようにスラブアロケータはページアロケータの上位に位置します。カーネルのサブシステムやモジュール、ドライバはページアロケータとスラブアロケータのどちらからもメモリを獲得、解放できます。物理メモリの割り当てはページアロケータだけが実施します。
図6-1 スラブアロケータとページアロケータの関係 ...
Read now
Unlock full access