Siehe https://github.com/zhengruohuang/toddler-ng für das Kleinkind der nächsten Generation!
Kleinkind war ursprünglich ein halbhobby- und halbforschungsbekannte Projekt, das im Sommer- und Winterpausen entwickelt wurde, als ich auf dem College war. Das ursprüngliche Kleinkind wurde für kleine IA32-Systeme mit kleinem Maßstab entwickelt. Das herausragendste Merkmal waren die für die Synkronisierung verwendeten praktischen lock-freien Techniken. Das alte Kleinkind war jedoch sowohl für hardwarebezogene als auch für reguläre Betriebssystemkomponenten übermäßig ausgelegt. Dann wurde es schließlich unpraktisch, die Entwicklung fortzusetzen. Das letzte Kleinkind konnte Benutzerprozesse und -Threads erstellen und ausführen sowie Tastatureingänge akzeptieren, obwohl keine Shell implementiert oder portiert wurde.
Das neue Kleinkind hingegen ist mit einem völlig anderen Ziel gestaltet. Obwohl es sich immer noch um ein Hobby -Projekt handelt, soll es einen voll verwendbaren Mikrokernel und eine vollständige OS -Umgebung für mehrere Architekturen und Plattformen bereitstellen. Die lock-freie Idee ist aufgegeben, da sie zu viel unnötige Komplexität geschaffen hat.
Kleinkind hat ein eigenes Bausystem in Python: Tmake . Tmake kümmert sich um Dateiabhängige und bietet eine Reihe von Primitiven wie Kompilieren , Verknüpfen , Erstellen und usw. Tmake -Skripte (auch in Python) und verwenden dann die Primitiven, um das Gebäudeverfahren zu konstruieren.
Python ist für alle Ziele erforderlich; GCC und Binutils sind sowohl für Host- als auch für Zielarchitekturen erforderlich. NASM ist für x86 (IA32- und AMD64) -Ziele erforderlich. Der Standard -Emulator (QEMU/SIMH/SKI) ist ebenfalls erforderlich, wenn Sie ein Kleinkind testen möchten.
Sobald alle Pakete installiert sind, holen Sie den Quellcode.
git clone https://github.com/zhengruohuang/toddler.git
cd toddler Typ ./tmake build um Kleinkind zu bauen. Sobald es fertig ist, generiert es Festplattenbilder im target/ Verzeichnis. Wenn QEMU für die Zielarchitektur installiert ist, geben Sie einfach ./tmake qemu ein, um QEMU mit Standardparametern zu starten.
Die beiden Schritte können durch Eingeben kombiniert werden ./tmake all oder einfach ./tmake .
Tmake unterstützt Aktionen . Um Aktionen anzugeben, verwenden Sie ./tmake <actions> . Zum Beispiel wird ein ./tmake clean build .
Tmake unterstützt mehrere Ziele. Um für ein bestimmtes Ziel zu erstellen, verwenden Sie ./tmake target=<arch-machine>[-suffix] . Beachten Sie, dass Bogen- und Maschinenfelder durch Tmake erforderlich sind und das Suffix optional ist. Für das tatsächliche Implementierung eines bestimmten Ziels kann der Benutzer jedoch einen Wert für das Suffix liefern.
Zum Beispiel wird ./tmake target=ia32-pc-bios für ein BIOS-basiertes IA32-PC-System aufbauen. ./tmake target=armv7-rpi2 baut Kleinkind für Raspberry Pi 2 auf.
Beachten Sie auch, dass Sie möglicherweise nicht willkürlich Bogen- und Maschinenfelder mischen. Zum Beispiel ist target=ia32-rpi2 ungültig. Ungültige Kombinationen von Feldern können Ihr Gerät nicht kompilieren oder sogar beschädigen.
Die Hardware -Abstraktionsschicht (HAL) bietet eine Abstraktion jedes Prozessormodells und grundlegenden IO -Geräte. Es exportiert eine Reihe von Funktionen und Konstanten nach Kernel. Hal wird auf die höchsten 4 MB aller Prozesse, einschließlich des Kernel -Prozesses, zugeordnet.
Im Gegensatz zu herkömmlichen Betriebssystemen ist das Kernel des Kleinkindes ein echter Prozess. Der Kernel wird nicht dem Adressraum von Benutzerprozessen zugeordnet. Das virtuelle Adressraumlayout des Kernels unterscheidet sich jedoch etwas von anderen Prozessen. Der Kernel hat dank der geringen Größe von HAL eine Eins-zu-Eins- Kartierung. Infolgedessen ist das physische Speichermanagement viel einfacher und sauberer.
Obwohl Kleinkind ein Micro-Kernel-Betriebssystem ist, ist es möglicherweise keine gute Idee, viele Server zu sein. Stattdessen werden in einem einzelnen Server viele Funktionen auf Systemebene bereitgestellt. Der Systemprozess implementiert Universal Resource Manager (URS), User Account Manager (UAM) und mehrere Dateisysteme.
Der Treiberprozess bietet mehrere wichtige Geräte -Treiber, einschließlich Tastaturen, Konsolen und Festplatten.
| Architektur | Breite | Zielmaschine | Status |
|---|---|---|---|
| Ia32 | 32 | NetBurst-basierter PC | Aktuell |
| ARMV7 | 32 | Raspberry Pi 2, Qemu Raspi2 | Aktuell |
| MIPS32 | 32 | Schöpfer CI20, Qemu Malta | Aktuell |
| PPC32 | 32 | MAC Mini G4, Powermac G4, Qemu G3beige, Qemu Mac99 | Aktuell |
| Sparcv8 | 32 | QEMU SUM4M SPARCSTATION 10, QEMU LEON-3 | Aktiv |
| RISCV32 | 32 | Spitze | Geplant |
| M68K | 32 | QEMU MCF5208EVB | Geplant |
| SH4 | 32 | Qemu Shix | Geplant |
| Vax | 32 | Simh Vax | Geplant |
| or1k | 32 | Qemu or1k-sim | Geplant |
| AMD64 | 64 | Skylake-basierter PC | Geplant |
| ARMV8 | 64 | Raspberry Pi 3, Qemu Virde | Aktiv |
| PPC64 | 64 | Powermac G5, Qemu Mac99 | Geplant |
| MIPS64 | 64 | Loongson 3 Desktop, Qemu Malta | Aktuell |
| Sparcv9 | 64 | Qemu sun4u | Anfänglich |
| Alpha | 64 | Qemu Clipper | Anfänglich |
| RISCV64 | 64 | Spitze | Geplant |
| S390 | 64 | Qemu S390X | Geplant |
| Ia64 | 64 | Ski | Geplant |
| Hppa | 64 | HP 9000 PA-RISC Workstation, Qemu HPPA-Generik | Geplant |