
2026/04/04 15:58
**Show HN: 「Anos」– x86‑64 と RISC‑V 用の手書き ~100 KiB マイクロカーネル** * Anos は、C/C++ だけでインラインアセンブリを併用して作られたミニマルなマイクロカーネルです。 * ソースサイズは約 100 KiB で、現在入手可能なフル機能のカーネルの中でも最小規模の一つです。 * **x86‑64** と **RISC‑V** の両方を対象にしており、大手 CPU ファミリー間での移植性を示しています。 * 主な特徴は以下の通りです: * 基本的なプロセススケジューリング * 割込み処理 * ページング付きメモリ管理 * シンプルな IPC プリミティブ * このプロジェクトはオープンソースで、GitHub 上でコードを閲覧し、改善提案や貢献が可能です。 ぜひチェックしてみてください。そしてご感想や質問はコメント欄にどうぞ!
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Anos は、x86_64 PC および初期の RISC‑V マシン向けに開発された趣味レベルの非 POSIX オペレーティングシステムであり、完全に機能する状態に達しています。
そのコアは STAGE3 というマイクロカーネルで、最大16CPUまでのプリエンプティブ・マルチタスク、基本ドライバ、タイマー、割り込み、メモリ管理、スケジューリング、IPC、および限定的なデバイスサポートを提供します。スケジューラは4つの優先クラスを持つ優先度付きラウンドロビンアルゴリズムを使用し、リアルタイムやレガシーPIC/PITのサポートはありません。
カーネル上には USER‑MODE SYSTEM レイヤがあり、仮想ファイルシステム(VFS)、ネットワークスタック、USB(xHCI)、GUI、およびACPIまたはデバイスツリーを介したハードウェアディスカバリ(WIP)を実装しています。プロジェクトは Binutils、GCC 16‑experimental、Newlib、および独自の libgloss をベースにしたツールチェーン、ビルドスクリプト、そして GDB デバッグサポートを同梱します。
Anos は Haswell クラスの Intel CPU で最大16コアまでの対称マルチプロセッシング(SMP)拡張性を示しており、QEMU 上または実機上で動作します。最低サポート対象マシンは Haswell i5 です。RISC‑V のサポートはまだ初期段階であり、QEMU 上の単一コア操作のみが可能で、ACPI/デバイスツリー処理、デバイスマネージャ、および PCI サポートは未実装です。
将来の作業としては、RISC‑V ポートの完成(ACPI/デバイスツリー追加、完全なデバイスマネージャ、PCI)、x2APIC を介した8コア以上での SMP の安定化、およびドライバカバレッジの拡大が含まれます。OS は趣味家や研究者に低レベル開発と安全なアプリケーション分離のためのサンドボックスを提供し、マイクロカーネル研究や趣味家 OS コミュニティへの影響を与える可能性があります。
本文
注記
これはまだオペレーティングシステムではありませんが、現在は toy kernel(おもちゃカーネル)レベルに達しています。
最大16CPUまでのユーザモードプリエンプティブマルチタスク、ユーザー空間で動作するデバイスドライバをサポートできるカーネル機能が備わっており、実際のハードウェア上でも動作します 🥳。
高レベル概要
Anosはx86_64 PCとRISC‑Vマシン向けに設計された、モダンで意見を持つ非POSIXオペレーティングシステム(ただの趣味プロジェクトであり、GNU/Linux® のように大規模・商用向けではありません)です。
現在構成されている主な要素は次の通りです。
- STAGE3マイクロカーネル – スケジューリング、メモリ管理、IPCプリミティブ
- SYSTEMユーザモードスーパーバイザー – 共通OS抽象化レイヤー
- OSコアを実装する一連のサーバ
Binutils、GCC (16‑experimental)、Newlib(カスタム libgloss)に基づく開発中のツールチェーンが利用可能です。
AnosはGPLv2でライセンスされており、リンク例外も主要なフリーOSと同様に設けられています。
TL;DR / 主要機能
-
STAGE3マイクロカーネル(非積極的)
- カーネルハードウェア用の最小限ドライバ
- CPUサポート(x86_64 & RISC‑V)
- 基本タイマー(HPET, TSC, SBI Timers)
- 割り込み(LAPIC, MSI/MSI‑X, S‑mode interrupts)
- 物理/仮想メモリ管理(48bit)
- スレッド/プロセスとアドレス空間のプリミティブ
- スケジューリング(優先度付きラウンドロビン、4つの優先クラス)
- IPC(同期、ゼロコピーメッセージパッシング)
-
小規模なシステムコールインターフェース
- 高速チャネル:x86_64ではSYSCALL/SYSRET、RISC‑Vではecall
- 遅いチャネル:廃止予定のint 0x69
-
デリゲート可能なキャパビリティベースのシステムコール制御
-
SYSTEMスーパーバイザー – OSサービス
- ユーザ空間ブートストラップ&設定
- プロセスマネジメントインターフェース
- VFSサポート
-
ハードウェアドライバ(PCI, AHCI via MMIO)、ユーザモード端末/ログ出力、ネットワーキング、GUI、USB (xHCI) – 全て開発中
-
レガシーサポートは限定的/無し;最低対応アーキテクチャ:Haswell(第4世代)
カーネル設計(進行中)
カーネルは現在も進化中です。 64ビットシステムとして設計され、モダン機能と実験を最大限に活用します。
今までの主要決定
| 機能 | ステータス |
|---|---|
| 最小ドライバ | ✅ |
| CPUサポート | ✅ |
| タイマー | ✅ |
| 割り込み | ✅ |
| メモリ管理(48bit) | ✅ |
| スレッド/プロセス・アドレス空間プリミティブ | ✅ |
| スケジューリング | ✅(単純ラウンドロビン、改善予定) |
| IPC | ✅ |
高速SYSCALL/SYSRETまたはecallを使用した小規模でターゲット化されたシステムコールインターフェース。
デリゲート可能なキャパビリティベースの制御が実装済みです。
現状
- ユーザモードマルチタスクは、単純なシステムコール(x86_64ではint 0x69、SYSCALL/SYSRET、RISC‑Vではecall)で機能します。
- スケジューラ:優先度付きラウンドロビン、4つの優先クラスと各クラス255レベル。
- SMPサポート(x86_64のみ):最大16対称コア。8コア超えは現在x2APIC切替が未実装で不安定。
- ツールチェーン(Binutils, GCC 16‑experimental, Newlib + カスタム libgloss)は両方のアーキテクチャで動作し、可能な限り機能パリティを保っています。
ビルド方法
全て
make で構築します。Anosツールチェーンは先にビルドしてインストールし、 $PATH に配置してください。
x86_64
- NASM ≥ 2.16 が必要です。
- 実行/デバッグには
(Bochsも可)を使用。qemu-system-x86_64 - UEFIイメージ用FATファイルシステム構築:
(mformat, mcopy)。mtools
make
これでユニットテストの実行、カーネルとSYSTEMスーパーバイザーのビルド、単一ELF64へのリンク、
.dis ファイル生成、およびUEFI起動用FATイメージ作成が完了します。
オプションターゲット:
– テストのみ実行make test
– イメージだけビルドmake build
– QEMUでイメージを起動make qemu-uefi
カバレッジレポートは
make coverage(LCOVが必要)で取得。
RISC‑V
追加のアセンブラは不要。すべて GCC で構築します。
ARCH=riscv64 make clean all
x86_64 と同じターゲットが利用可能です。RISC‑V のテストはまだ完全にはサポートされていません。OSを実行するには
qemu-system-riscv64 を使用。
実行方法
エミュレータで起動
UEFIをサポートするQEMUが必要です。
make qemu-uefi # x86_64 ARCH=riscv64 make qemu-uefi # RISC‑V
実機で起動
- x86_64 –
をUSBスティックに書き込む(balenaEtcher, UNetbootin 等)。anos-uefi.img - RISC‑V – 現時点では実機テストは行っていません。DeepComputing の RISC‑V メインボードを想定しています。
デバッグ
最適化なしでビルドするとデバッグが容易になります。
OPTIMIZE=0 make clean debug-qemu-uefi # もしくは OPTIMIZE=0 ARCH=riscv64 make debug-qemu-uefi
これにより、GDBリモートスタブ付きでQEMUが起動し、自動的に GDB が起動します(
.gdbinit が付属)。ラベルまたは行番号でブレークポイントを設定できます:
b entrypoint.c:bsp_kernel_entrypoint b startup.c:35
IDE からデバッグする場合:
- CLion – 「Remote debugging」を
に設定。localhost:9666 - VSCode – 同梱の
/launch.json
を使用し、適切なネイティブデバッガ拡張をインストール。tasks.json
開発
コード整形には
clang-format を推奨します。 pre-commit フックも利用可能です:
pip install pre-commit pre-commit install
コミット時に自動で実行されます。
ステータス & 画像(x86_64)
- 実機(Haswell i5, 16 GiB RAM)で稼働。
- Limine を経由したUEFIブートをサポート。
- 複数のユーザモードプロセス:SYSTEM スーパーバイザー、DEVMAN デバイスマネージャ、PCI と AHCI ドライバ;すべて IPC 経由で SYSTEM からロードされた RAM ディスク上に配置。
- ELF ローディング、キャパビリティ委譲、ドライバ初期化、環境/引数渡しが機能。
主要ブートステージ
- UEFI → Limine → カーネル初期化(スタックベースPMM, VMM, アロケータ, ACPIでHPET/LAPIC取得)。
- すべてのCPUでスケジューラ起動。
- SYSTEM が IPC チャネルを作成し、ログビューア (
) を起動。kterm - DEVMAN がキャパビリティを取得し、自身の ELF バイナリをロード、環境設定後、ACPI MCFG で PCI 列挙要求。
- 各バスセグメントに対して PCI ドライバプロセスが生成。
- AHCI ドライバがコントローラを初期化し、キューを割り当て、DEVMAN に登録。
- FAT32 ファイルシステムドライバが UEFI ルートパーティションをマウントし、VFS エンドポイントを SYSTEM に登録。
RISC‑V
- QEMU (
) 上で動作確認済み。qemu-system-riscv64 - SMP は未実装。
- ユーザ空間は遅延が大きく、デバイスツリー/ACPI 未サポート、DEVMAN なし、PCI 未実装。「Failed to get firmware tables」というカーネルメッセージが表示されます。