OS自作において、多くの開発者が「安定した基盤」と「野心的な機能」の間で揺れ動きます。PangeaOSは、Rustの言語的隔離(Language-Based Isolation)を武器に、UNIXの古い常識を覆すSASOS(Single Address Space OS)を目指しています。
今回は、バージョン 0.0.1-6 から 0.0.1-6-1 へ至る、NVMe非同期I/Oの実装とセキュリティ基盤構築の激闘を振り返ります。
1. 突破した「死の谷」:完全非同期NVMeドライバ (v0.0.1-6)
v0.0.1-6 での最大の目標は、「ブロックしない(Non-Blocking)ストレージI/O」でした。
何をしたか?
PCIeバスをスキャンし、NVMeコントローラ (1b36:0010) を自動検出。
Admin QueueとI/O Queueを切り分け、Rustの Future モデルを直接カーネルに実装しました。
技術的な見どころ
カーネルの Executor がタスクをpollし、I/Oが完了していなければ Poll::Pending を返す。この間、キーボード入力やタイマー割り込みといった他の処理を止めることはありません。
まさに、OSが「ディスク待ち」で止まる時代を終わらせる基盤が完成しました。
2. 防衛線の構築:v0.0.1-6-1 のセキュリティ強化
基盤が動いたところで、次は「悪意あるハードウェアとタスクからの防衛」です。v0.0.1-6-1 では、SASOS特有のリスクをケアするために2つの防衛機構を組み込みました。
① DMAハイジャックを防ぐ「IOMMU探索」
NVMeは超高速ですが、CPUの許可なくメモリを書き換えるDMA攻撃の脅威があります。
実装内容: ACPIテーブルを走査するパーサーを実装し、DMAR(Intel VT-d)や IVRS(AMD-Vi)のテーブルを自動探索。
意義: ハードウェアレベルでメモリ保護を適用するための第一歩を刻みました。
② CPU占有を防ぐ「プリエンプション・ウォッチドッグ」
協調的マルチタスク(async/await)の弱点は、一つのタスクが無限ループに入るとシステム全体がフリーズすることです。
実装内容: APICタイマー割り込みに AtomicU64 のカウンターを埋め込み、1,000ティック(約1秒)yieldしないタスクを検知してログを出す仕組みを構築しました。
意義: 将来的な強制終了(Preemption)に向けた「番犬」をOSの心臓部に置きました。
3. 開発の舞台裏:Rustの壁と「APIC/ACPI」の罠
今回の開発は、技術的な実装以上に、Rustの環境設定との戦いでした。
stdの亡霊: ベアメタル(no_std)環境で fatfs や font8x8 を使う際、デフォルトで std がリンクされてしまいコンパイルエラーの山が発生。default-features = false の設定で一つずつ鎮火していきました。
名前のトラップ: apic.rs(割り込み)と acpi.rs(構成情報)という極めて紛らわしいファイル名の間で、コードが入れ替わるというOS自作er伝統のミスも経験しました。
Artifactの迷宮: cargo run でカーネルが認識されない問題は、bindeps の設定が build-dependencies にあるべきというRustのビルドシステムへの理解不足を露呈させました。
結び:PangeaOSは「鉄壁」へ
v0.0.1-6-1 の開発を通じて、PangeaOSは「動くだけのOS」から「強固な基盤を持つシステム」へと進化しました。
安定した非同期I/O
ハードウェアと同期したセキュリティ探索
スタベーションを防ぐ番犬の常駐
この基盤があれば、次は「ファイルシステムの実装」や「本格的なプリエンプションの実行」といった、より高次元な機能へとアクセスできます。
「鍛え上げられた鉄壁の上で、最高のパフォーマンスを。」
PangeaOSの次なる冒険は、ファイルシステムのNVMe上への実装です。ぜひ、私たちのリポジトリをフォローして、このSASOSの進化を見守ってください!
https://github.com/forestnote/pangeaos
文責:PangeaOS 開発チーム