Voir https://github.com/zhengruohuang/toddler-ng pour le tout-petit de la prochaine génération!
Le tout-petit était à l'origine un projet à moitié pointu et à demi-recherche développé pendant les vacances d'été et d'hiver lorsque j'étais à l'université. Le tout-petit d'origine a été conçu pour les systèmes IA32 multi-processeurs à petite échelle. La caractéristique la plus remarquable était les techniques pratiques sans serrure utilisées pour la syncronisation. Cependant, l'ancien tout-petit a été trop conçu pour les composants du système d'exploitation liés au matériel et réguliers. Ensuite, il est finalement devenu peu pratique de poursuivre le développement. Le dernier tout-petit a pu créer et exécuter des processus et des threads utilisateur, ainsi que l'acceptation des entrées de clavier, bien qu'un shell n'ait pas été implémenté ou porté.
Le nouveau tout-petit, en revanche, est conçu avec un objectif complètement différent. Autant qu'il s'agit toujours d'un projet de passe-temps, il vise à fournir un micro-rotation entièrement utilisable et un environnement OS complet pour plusieurs architectures et plateformes. L'idée sans serrure est abandonnée car elle a créé trop de complexité inutile.
Toddler a son propre système de construction écrit en Python: Tmake . TMake s'occupe des dépendances de fichiers et fournit une série de primitives telles que compiler , lier , build , etc.
Python est requis pour toutes les cibles; Le CCG et les binutilles sont nécessaires pour les architectures hôtes et cibles; Le NASM est requis pour les cibles x86 (IA32 et AMD64). L'émulateur par défaut (Qemu / Simh / Ski) est également requis si vous souhaitez tester le tout-petit.
Une fois tous les packages installés, récupérez le code source.
git clone https://github.com/zhengruohuang/toddler.git
cd toddler Tapez ./tmake build pour construire un tout-petit. Une fois terminé, il génère des images de disque dans target/ répertoire. Si QEMU est installé pour l'architecture cible, tapez simplement ./tmake qemu pour démarrer QEMU avec des paramètres par défaut.
Les deux étapes peuvent être combinées en tapant ./tmake all , ou simplement ./tmake .
TMake prend en charge les actions . Pour spécifier des actions, utilisez ./tmake <actions> . Par exemple, ./tmake clean build nettoiera les fichiers objets et binaires existants, puis démarrer une nouvelle version.
TMake prend en charge plusieurs cibles. Afin de construire pour une cible spécifique, utilisez ./tmake target=<arch-machine>[-suffix] . Notez que les champs d'arc et de machine sont requis par TMake, et le suffixe est facultatif. Cependant, l'implémentation réelle d'une cible spécifique peut nécessiter que l'utilisateur fournit une valeur pour le suffixe .
Par exemple, ./tmake target=ia32-pc-bios créera un tout-petit pour un système PC IA32 basé sur BIOS; ./tmake target=armv7-rpi2 construire un tout-petit pour Raspberry Pi 2.
Notez également que vous ne pouvez pas mélanger arbitrairement les champs d'arc et de machine . Par exemple, target=ia32-rpi2 n'est pas valide. Les combinaisons de champs non valides peuvent ne pas compiler ou même endommager votre appareil.
La couche d'abstraction matérielle (HAL) fournit une abstraction de chaque modèle de processeur et des appareils IO de base. Il exporte une série de fonctions et de constantes vers le noyau. HAL est cartographié au plus haut 4 Mo de tous les processus, y compris le processus du noyau.
Contrairement aux systèmes d'exploitation conventionnels, le noyau du tout-petit est un processus réel . Le noyau n'est pas mappé sur l'espace d'adressage des processus utilisateur. Cependant, la disposition d'espace d'adressage virtuel du noyau est un peu différente des autres processus. Le noyau a une cartographie individuelle grâce à la petite taille de HAL. En conséquence, la gestion de la mémoire physique est beaucoup plus facile et plus propre.
Bien que Toddler soit un système d'exploitation micro-nul, être plusieurs serveurs n'est peut-être pas une bonne idée. Au lieu de cela, de nombreuses fonctionnalités au niveau du système sont fournies dans un seul serveur - système. Le processus système met en œuvre Universal Resource Manager (URS), User Account Manager (UAM) et plusieurs systèmes de fichiers.
Le processus de pilote fournit plusieurs pilotes de périphériques essentiels, y compris les claviers, les consoles et les disques.
| Architecture | Largeur | Machine cible | Statut |
|---|---|---|---|
| IA32 | 32 | PC basé sur Netburst | Actuel |
| armv7 | 32 | Raspberry Pi 2, Qemu raspi2 | Actuel |
| MIPS32 | 32 | Créateur CI20, Qemu Malte | Actuel |
| PPC32 | 32 | Mac Mini G4, PowerMac G4, Qemu G3Beige, Qemu Mac99 | Actuel |
| sparcv8 | 32 | Qemu Sum4m Sparcstation 10, Qemu Leon-3 | Actif |
| RISCV32 | 32 | Pointe | Prévu |
| M68K | 32 | Qemu MCF5208EVB | Prévu |
| sh4 | 32 | Qemu Shix | Prévu |
| vax | 32 | Simh Vax | Prévu |
| OR1K | 32 | Qemu Or1k-Sim | Prévu |
| AMD64 | 64 | PC à base de Skylake | Prévu |
| armv8 | 64 | Raspberry Pi 3, Qemu Virt | Actif |
| PPC64 | 64 | PowerMac G5, Qemu Mac99 | Prévu |
| MIPS64 | 64 | Loongson 3 Desktop, Qemu Malte | Actuel |
| sparcv9 | 64 | Qemu Sun4u | Initial |
| alpha | 64 | Clipper Qemu | Initial |
| RISCV64 | 64 | Pointe | Prévu |
| S390 | 64 | Qemu S390X | Prévu |
| IA64 | 64 | Ski | Prévu |
| hppa | 64 | HP 9000 PA-RISC Workstation, Qemu Hppa-Generic | Prévu |