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 の追跡記録機能を追加したラッパー構造体。 - Locked
Guard - Tlsf
Heap 🔒 - 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 🔒