NixOctet
  • Home
  • SASOSについて

NixOctet Blog

Featured

【OS自作】PangeaOS v0.0.1-6/6-1 開発記:非同期ストレージと鉄壁のセキュリティ

kayo PangeaOS 2026年06月22日 参照数: 1

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 開発チーム

Featured

時代が追いついてきたSASOS

kayo PangeaOS 2026年06月22日 参照数: 1

PDF : 単一アドレス空間オペレーティングシステム(SASOS)の包括的研究:アーキテクチャ、利点、欠点、および将来の展望

PDF : メモリ管理の常識を覆す:30年間に予言された「単一アドレス空間」が今、再評価される理由

https://github.com/forestnote/pangeaos

Featured

【Rust × 自作OS】コンテキストスイッチを葬り去れ。PangeaOS v0.0.1-5 がNVMeドライブを「覚醒」させた日

kayo PangeaOS 2026年06月22日 参照数: 4

こんにちは。いつもブログを読んでいただきありがとうございます。

ここ最近、私はNixOSとKDEという最高に快適なデスクトップ環境に引きこもり、ひたすら「ある狂気のプロジェクト」に没頭していました。それは、Linuxのクローンでも、POSIX互換のホビーOSでもありません。

Rust言語のコンパイラが持つ型システムと所有権モデルを極限まで絞り尽くし、ハードウェアの分離(MMU)に頼らない「単一アドレス空間OS(SASOS: Single Address Space Operating System)」をゼロから組み上げるという挑戦です。

そして今日、ついに歴史的なマイルストーンとなる PangeaOS v0.0.1-5 をリリースしました。 今回のアップデートは単なるバグフィックスではありません。レガシーなBIOSやUEFIの抽象化を完全に引き剥がし、OSが直接PCI Expressバスを這い回り、NVMeストレージのコア・レジスタを直接叩き起こしたのです。

技術的な興奮冷めやらぬまま、このv0.0.1-5で一体何が起きたのか、その全貌を解説します。

🚀 なぜ今、SASOS(単一アドレス空間)なのか?

現在のモダンなNVMe SSDは、毎秒7GB以上の速度でデータを転送し、マイクロ秒単位のレイテンシで応答します。しかし、私たちが普段使っている伝統的なOS(LinuxやWindowsなど)のアーキテクチャは、この超高速デバイスの足を引っ張っています。

なぜなら、伝統的なOSはセキュリティのためにプロセスごとに独立した仮想メモリ空間を持ち、プロセスを切り替えるたびに「ページテーブルの切り替え」と「TLB(Translation Lookaside Buffer)のフラッシュ」という非常に重いハードウェア・コンテキストスイッチを発生させているからです。

PangeaOSは、この50年続く常識を根本から否定します。

すべてのプロセス(タスク)は、特権レベルのRing 0、かつ完全に同一の物理/仮想アドレス空間で動作します。 「そんなことをしたら、プロセス同士がメモリを破壊し合ってカーネルパニックになるのでは?」と思うでしょう。そこで登場するのが、Rustです。

PangeaOSは、ランタイム時の「ハードウェアによる隔離」を捨て、コンパイル時の「言語仕様による隔離(Language-Based Isolation)」を採用しています。Rustの厳格な借用チェッカーとライフタイムにより、他人のメモリ領域を侵犯するコードは「そもそもコンパイルが通らない」という最強の盾を手に入れました。

コンテキストスイッチのオーバーヘッドは事実上ゼロ。これがPangeaOSの目指す究極のパフォーマンスの土台です

🧠 v0.0.1-5 の核心:NVMeとの「直接対話」

今回のバージョンでは、このSASOSの基盤の上で、モダンハードウェアの象徴であるNVMeとの完全な通信チャネルを確立しました。

1. PCIバスの自力スキャン(Enumeration)
PangeaOSは、ブートローダーが用意してくれた便利なAPIを使いません。0xCF8 と 0xCFC のI/Oポートを直接叩き、バス番号0から255まで、すべてのスロットを舐めるようにスキャンするカスタム・エニュメレータを実装しました。 これにより、バス上に潜む 1b36:0010(QEMU NVMe Controller)を自力で発見します。

2. MMIOの直接マッピングと能力(Capabilities)の抽出
NVMeコントローラを発見したら、PCIのコンフィグレーション空間からBAR(Base Address Register)を読み取り、64ビットの物理アドレスを特定。それをOSの仮想メモリにマッピングして「操縦席」を確保します。 バージョン情報や、コントローラがサポートする最大キューサイズ(MQES)を、CPUからPCIeバス経由で直接読み取ることに成功しました。

3. Admin Queue の物理メモリ構築とドアベル(Doorbell)
ここがハイライトです。NVMeに「Identify(お前は誰だ?)」というコマンドを送るため、以下の超低レベル操作をRustで実装しました。

DMAバッファの確保: 物理メモリの 32MB 地点をハードコードで借用し、Submission Queue(送信箱)と Completion Queue(受信箱)を配置。

バイナリコマンドの生成: 0x06 (Identify) オペコードを含む生のコマンド構造体を構築し、メモリに書き込みます。
ドアベルを鳴らす: NVMeのMMIOレジスタにある「Tail Doorbell」に書き込みを行い、SSDにハードウェア割り込みをかけます。

フェーズタグのポーリング: SSDが処理を終え、受信箱のフェーズタグ(1ビットのフラグ)を反転させるまでスピンロックで待機。

4. そして、運命の文字列
この手順を踏み、データバッファからASCII文字列を抽出した瞬間、漆黒の画面(私のNixOS環境では美しい青緑色のカスタムフォント)に以下の文字が輝きました。

Plaintext

-> Model : QEMU NVMe Ctrl
-> Serial: PANGEA_NVME_001

PangeaOS v0.0.1-5


OSが、完全に自力でSSDから情報を引きずり出した瞬間です。非同期タイマーが一切の乱れなく時を刻む下で表示されたこの文字列は、OS開発者にとって最高のご褒美でした。

🛠️ NixOS × Rust Nightly という最強のハック環境

この極端なベアメタル開発を支えているのが、私の愛用する NixOS です。

OS開発では、「QEMUのバージョンが違う」「クロスコンパイラの設定が壊れた」といった環境依存のトラブルが付き物ですが、PangeaOSのプロジェクトルートには shell.nix が置かれています。 これにより、NixOS上で nix-shell を叩くだけで、Rust Nightlyツールチェーン、OVMF(UEFIファームウェア)、そしてQEMUが完全に分離・再現された状態で立ち上がります。

ホスト環境を一切汚さずに、cargo run -Z bindeps でカーネルをバイナリ化してディスクイメージに焼き込み、仮想NVMeドライブをアタッチしてQEMUを起動する一連のパイプラインは、一度味わうと後戻りできない快適さです。

視線は次の地平へ
NVMeの初期化とAdminコマンドの送信に成功した今、PangeaOS v0.0.1-5 は巨大な壁を一つ越えました。

次のステップは「I/O Queue の構築」と「LBA(論理ブロックアドレス)単位でのセクタ読み書き」、そして最終的にはPangeaOS独自の非同期ファイルシステムの構築へと進みます。 Rustの async/await を活用し、ストレージへのアクセス待ち時間で一切CPUをブロックしない、真の非同期ベアメタルI/Oの実現も目前です。

PangeaOSの進化はまだ始まったばかりです。ハードウェアと直接対話するこのヒリヒリするような楽しさを、これからもブログで発信していきます。

コンテキストスイッチのない世界へようこそ。それでは、また次回のアップデートでお会いしましょう!

プロジェクトの全貌やソースコードのアーキテクチャについては、GitHubの最新の README.md をチェックしてください。

https://github.com/forestnote/pangeaos

Featured

コンテキストスイッチの死。PangeaOS v0.0.1-3が証明した「真のSASOS」の姿

kayo PangeaOS 2026年06月22日 参照数: 1

システムプログラミングを愛するすべてのハッカーたちへ。

今日、私たちはひとつのオペレーティングシステムが「ただの実験」から「パラダイムシフトの証明」へと変貌を遂げた瞬間を目撃しました。それが、Rustによってゼロから構築されているベアメタルOS、「PangeaOS v0.0.1-3」です。

このバージョンで行われたアップデートは、単なる機能追加ではありません。既存のWindowsやLinuxが数十年にわたって抱え続けてきた「パフォーマンスの呪い」を解き放つ、革命的なアーキテクチャの完成を意味しています。

このv0.0.1-3がいかに狂気的で、そして美しい進化なのかを紐解いていきましょう。

 

1. 既存OSの呪い:「コンテキストスイッチ」という重税


私たちが普段使っているOSは、複数のアプリ(タスク)が「同時に動いている」ように見せかけるため、ハードウェアのタイマーを使って定期的に実行中のタスクを強制終了させ、別のタスクにCPUを明け渡しています(プリエンプティブ・マルチタスク)。

しかし、この切り替え(コンテキストスイッチ)には莫大なコストがかかります。 プロセスごとに仮想メモリ空間が分かれているため、切り替えのたびにCPUのキャッシュ(TLB)を破棄し、レジスタを退避させ、ページテーブルを切り替えなければなりません。これは例えるなら、「荷物を運ぶトラックの運転手を交代させるために、わざわざトラックのエンジンを解体して組み直している」ようなものです。

PangeaOSは「Single Address Space OS(SASOS)」として、全プロセスが同じメモリ空間(Ring 0)に同居するというアプローチをとっています。仮想メモリの壁がないため、Rustのコンパイラが安全性を担保する限り、切り替えコストは理論上ゼロに近づきます。

そして、その理論を「非同期(Async)ランタイムの自作」によって現実のものにしたのが、今回のv0.0.1-3なのです。

 

2. v0.0.1-3のブレイクスルー:ハードウェアと非同期Futureの融合

 

v0.0.1-3の最大の功績は、ハードウェアの割り込み(Interrupt)と、ソフトウェアの処理(Task)の間に「非同期キューという美しい境界線」を引いたことです。

従来のOS開発チュートリアルでは、キーボードが押されると割り込みハンドラが呼ばれ、その場でキーの解読(スキャンコードのパース)から画面の描画までを行ってしまいます。しかし、これではタイマーなどの別の割り込みを阻害してしまいます。

PangeaOS v0.0.1-3は、Rustの async / await をベアメタル上で完全に再構築しました。

割り込みハンドラの極小化: キーボードやタイマーから信号が来ると、ハードウェアはただ crossbeam_queue(ロックフリーのキュー)に「1バイトのデータ」を投げ込み、スケジューラを起こして(Waker)、即座に元の処理にリターンします。
Cooperative(協調的)なスケジューラ: カーネルのメインループには、自作の Executor(実行部)が鎮座しています。彼はキューにデータが溜まっているのを見つけると、対応する非同期タスク(Future)を一歩だけ進めます。
これにより、「タイマーが1秒ごとにUptimeを描画する処理」と「ユーザーが打ち込んだキーボードの文字を描画する処理」が、ハードウェアによる強制的なコンテキストスイッチを一切行わずに、シングルスレッド上で完璧に並行処理されるようになりました。

 

3. グローバルアロケータの覚醒(動的メモリへの進出)


この非同期スケジューラという魔法を実現するためには、タスクを動的に管理するための Box や BTreeMap、Arc といったヒープメモリ(動的メモリ確保)が不可欠です。

v0.0.1-3では、OS全体のメモリ確保ルール(#[global_allocator])として linked_list_allocator を採用し、カーネルのバイナリ内の .bss セクションに1MBの空間を切り出してヒープ領域としてマッピングしました。

ここで特筆すべきは、Rust 2024エディションで厳格化された static mut 変数への参照警告に対し、安全な core::ptr::addr_of_mut! マクロを用いてポインタを取得し、一切のWarning(警告)を出さずに完璧なコンパイルを通している点です。最新の言語仕様に追従する、非常に堅牢な設計です。

結論:PangeaOSは「OSの未来のプロトタイプ」である
バージョン 0.0.1-3 の PangeaOS をビルドしてQEMUを立ち上げたとき、画面に表示されるのは一見するとただの文字の羅列かもしれません。

しかし、その裏側で起きているのは、「仮想メモリの壁を持たず」「割り込みのオーバーヘッドを非同期ランタイムで吸収し」「コンパイラの型推論によってメモリ安全性を証明された」という、既存OSのアーキテクチャへの痛烈なアンチテーゼです。

土台は完全に固まりました。 今後、この非同期スケジューラの上に、PCI ExpressのドライバやNVMeストレージ、そして極限まで無駄を削ぎ落としたGUIフレームワークが乗ってきたとき、PangeaOSは既存のLinuxやWindowsでは絶対に到達できないレスポンス速度を叩き出すことになるでしょう。

PangeaOS v0.0.1-3 は、コンテキストスイッチの終焉を告げる、静かで力強い産声なのです。

https://github.com/forestnote/pangeaos

 
  • 1
  • 2
1 / 2
© 2026 NixOctet
  • Home
  • SASOSについて