Skip to main content

Module allocator

Module allocator 

Source
Expand description

§TLSF (Two-Level Segregated Fit) ヒープアロケータ

allocator.rs - 512MBのカーネルヒープ領域を管理するアロケータです。

§採用理由と仕様

以前の first-fit フリーリスト方式では、ブラウザのパース処理などでフリーリストが数万ノードに肥大化した際、 確保・解放が $O(N)$ になり数秒間のフリーズを引き起こしていました。 本実装に用いられている TLSF 方式(rlsf クレートを利用)は、確保・解放ともに 最悪計算量 $O(1)$ が保証されており、 メモリ断片化も有界に抑えられるため、ベアメタル環境において非常に高い安定性とパフォーマンスを発揮します。

§パニック回復とスレッド安全性

パニック時のデッドロックを防止するための Locked ラッパー(コア別のロック保持追跡と強制解放機能)と、 割り込みセーフな spin::Mutex を統合しています。これにより、ロックを保持したままコアが例外で落ちた場合でも、 例外ハンドラのログ出力時にアロケータロックの再デッドロックを防止できます。

Modules§

spin 🔒

Structs§

Locked
割り込みセーフな spin::Mutex をラップし、パニック発生時のデッドロックを防止するために ロックを現在保持している CPU コア ID の追跡記録機能を追加したラッパー構造体。
LockedGuard
TlsfHeap 🔒
TLSFアロケータの実体を保持し、確保・解放および使用量計測を行う内部構造体。

Constants§

KERNEL_HEAP_SIZE
カーネルヒープの大きさ。

Statics§

ALLOCATOR 🔒
カーネル全体のアロケータのグローバルなインスタンス。
TOTAL_HEAP_SIZE 🔒
カーネルヒープ領域全体の総バイト数。

Functions§

check_heap_integrity
旧 first-fit の canary 整合性検査との互換スタブです。
force_release_lock
パニック回復処理において、指定された CPU コア ID が現在ヒープロックを保持している場合、 そのロックを強制解放します。
get_heap_stats
ヒープの (使用中の概算バイト数, 総バイト数) を取得します。
init
指定されたメモリ開始アドレスとサイズで、カーネルアロケータを初期化します。

Type Aliases§

TheTlsf 🔒