次世代の幼児については、https://github.com/zhengruohuang/toddler-ngを参照してください!
幼児はもともと、私が大学にいたときに夏と冬の休憩中に開発された半分の屋根と半分の研究プロジェクトでした。元の幼児は、小規模なマルチプロセッサIA32システム用に設計されています。最も顕著な機能は、syncronizationに使用される実用的なロックフリーテクニックでした。ただし、古い幼児は、ハードウェア関連のOSコンポーネントと通常のOSコンポーネントの両方に対して過度に設計されていました。その後、開発を継続することはついに非現実的になりました。最後の幼児は、シェルは実装または移植されていませんが、ユーザープロセスとスレッドを作成および実行することができ、キーボード入力を受け入れることができました。
一方、新しい幼児は、まったく異なる目標で設計されています。それはまだ趣味のプロジェクトであり、複数のアーキテクチャとプラットフォームに完全に使用可能なマイクロカーネルと完全なOS環境を提供することを目的としています。ロックフリーのアイデアは、不必要な複雑さが大きすぎるため、放棄されます。
幼児には、Python: Tmakeで書かれた独自の建物システムがあります。 Tmakeはファイルの依存症を処理し、コンパイル、リンク、ビルドなどの一連のプリミティブを提供します。Tmakeスクリプト(Pythonでも)を使用してから、プリミティブを使用して建物の手順を構築します。
すべてのターゲットにはPythonが必要です。 GCCとBinutilsは、ホストアーキテクチャとターゲットアーキテクチャの両方に必要です。 NASMは、X86(IA32およびAMD64)ターゲットに必要です。幼児をテストする場合は、デフォルトのエミュレータ(QEMU/SIMH/SKI)も必要です。
すべてのパッケージがインストールされたら、ソースコードを取得します。
git clone https://github.com/zhengruohuang/toddler.git
cd toddlerタイプ./tmake build 、幼児を構築します。完了すると、 target/ディレクトリでディスクイメージを生成します。 QEMUがターゲットアーキテクチャ用にインストールされている場合は、QEMUを入力するだけで./tmake qemuを入力して、デフォルトのパラメーターを使用してQEMUを開始します。
2つのステップは./tmake all 、または単に./tmakeを入力することで組み合わせることができます。
Tmakeはアクションをサポートします。アクションを指定するには、 ./tmake <actions>を使用します。たとえば、 ./tmake clean build既存のオブジェクトとバイナリファイルをクリーンアップし、新しいビルドを開始します。
Tmakeは複数のターゲットをサポートします。特定のターゲットに合わせて構築するには、 ./tmake target=<arch-machine>[-suffix]を使用します。 Tmakeではアーチフィールドとマシンフィールドが必要であり、接尾辞はオプションであることに注意してください。ただし、特定のターゲットの実際の実装では、ユーザーが接尾辞の値を提供する必要があります。
たとえば、 ./tmake target=ia32-pc-bios BIOSベースのIA32 PCシステムの幼児を構築します。 ./tmake target=armv7-rpi2 Raspberry Pi 2用の幼児を構築します。
また、アーチフィールドとマシンフィールドを任意に混ぜることはできないことに注意してください。たとえば、 target=ia32-rpi2は無効です。フィールドの無効な組み合わせは、デバイスをコンパイルしたり、損傷したりすることさえあります。
ハードウェア抽象化レイヤー(HAL)は、各プロセッサモデルと基本的なIOデバイスの抽象化を提供します。一連の関数と定数をカーネルにエクスポートします。 HALは、カーネルプロセスを含むすべてのプロセスの中で最高の4MBにマッピングされます。
従来のオペレーティングシステムとは異なり、幼児のカーネルは実際のプロセスです。カーネルは、ユーザープロセスのアドレス空間にマッピングされません。ただし、カーネルの仮想アドレススペースレイアウトは、他のプロセスとは少し異なります。カーネルには、HALのサイズが小さいおかげで1対1のマッピングがあります。その結果、物理的なメモリ管理ははるかに簡単できれいです。
幼児はマイクロカーネルOSですが、多くの人であることは良い考えではないかもしれません。代わりに、多くのシステムレベルの関数が単一のサーバー - システムで提供されます。システムプロセスは、ユニバーサルリソースマネージャー(URS)、ユーザーアカウントマネージャー(UAM)、およびいくつかのファイルシステムを実装しています。
ドライバープロセスは、キーボード、コンソール、ディスクなど、いくつかの重要なデバイスドライバーを提供します。
| 建築 | 幅 | ターゲットマシン | 状態 |
|---|---|---|---|
| IA32 | 32 | ネットバーストベースのPC | 現在 |
| ARMV7 | 32 | Raspberry Pi 2、Qemu raspi2 | 現在 |
| MIPS32 | 32 | クリエイターCI20、QEMUマルタ | 現在 |
| PPC32 | 32 | Mac Mini G4、PowerMac G4、Qemu G3Beige、Qemu Mac99 | 現在 |
| SPARCV8 | 32 | QEMU SUM4M SPARCSTATIAN 10、QEMU LEON-3 | アクティブ |
| RISCV32 | 32 | スパイク | 計画 |
| M68K | 32 | QEMU MCF5208EVB | 計画 |
| SH4 | 32 | Qemu Shix | 計画 |
| vax | 32 | Simh Vax | 計画 |
| OR1K | 32 | Qemu or1k-sim | 計画 |
| AMD64 | 64 | SkylakeベースのPC | 計画 |
| ARMV8 | 64 | Raspberry Pi 3、Qemu Virt | アクティブ |
| PPC64 | 64 | PowerMac G5、QEMU MAC99 | 計画 |
| MIPS64 | 64 | Loongson 3デスクトップ、Qemu Malta | 現在 |
| SPARCV9 | 64 | QEMU SUN4U | イニシャル |
| アルファ | 64 | Qemu Clipper | イニシャル |
| RISCV64 | 64 | スパイク | 計画 |
| S390 | 64 | QEMU S390X | 計画 |
| IA64 | 64 | スキー | 計画 |
| HPPA | 64 | HP 9000 PA-RISCワークステーション、QEMU HPPA-Generic | 計画 |