バディーシステム
概要
Linuxカーネル内で一番プリミティブなメモリーアロケーター
他のメモリアロケーターのベースとなっている
2のべき乗個の連続した物理メモリページで構成される「メモリーブロック」単位で物理メモリーを管理する
バディーシステムで確保できるメモリーブロックのサイズは最小でページ1つの大きさ(4Kバイト)
https://gyazo.com/a2921f3666e4eb1e979c8e6aa27b6b34
https://gyazo.com/75d8926b9f323df85a6fef19115571e4
仕組み
空きメモリーブロックを大きさ別にリストで管理しておく
リストに空きメモリーブロックがない場合は、倍の大きさの空きメモリーブロックを分割してそのうちの一つを割り当てる
メモリーブロックが解放されると、前後に空きメモリーブロックがないかどうかを調べて、できるだけ大きなサイズになるようにマージしてメモリーブロックを作りリストに登録する
メモリーゾーンごとにメモリーブロックを管理する
用語
メモリーアロケーター
要求したサイズの連続したメモリ領域を確保/解放する仕組み
DMA
Direct Memory Access
周辺機器などでCPUを解さずにデータを転送する
メモリーブロック
2のべき乗個の連続した物理メモリの塊
メモリーブロック単位でリストに登録する
メモリーゾーン
ZONE_DMA
物理メモリー先頭から16Mバイト
古いデバイスにはこの領域に対してしかDMAできないものがあるため区別されている
ZONE_DMA32
物理メモリー先頭から4Gバイトまでの領域からZONE_DMA領域を除いた部分
通常のデバイスがDMA可能な領域
ZONE_NORMAL
ZONE_DMA、ZONE_DMA32を除いたエリア
参照