Смотрите https://github.com/zhengruohuang/toddler-ng для малыша следующего поколения!
Первоначально малыш был наполовину и полушеседованным проектом, разработанным в течение летних и зимних каникул, когда я учился в колледже. Оригинальный малыш был разработан для небольших многопроцессорных систем IA32. Наиболее выдающейся особенностью были практические методы без блокировки, используемые для синхронизации. Тем не менее, старый малыш был чрезмерно спроектирован как для оборудования, так и для обычных компонентов ОС. Затем, наконец, стало непрактичным продолжать развитие. Окончательный малыш смог создать и запустить пользовательские процессы и потоки, а также принимать входы клавиатуры, хотя оболочка не была реализована или переносилась.
Новый малыш, с другой стороны, разработан с совершенно другой целью. Alghough это все еще является хобби -проектом, он направлен на предоставление полностью полезного микрокернела и полную среду ОС для нескольких архитектур и платформ. Идея без блокировки оставлена, поскольку она создала слишком много ненужной сложности.
Малыш имеет свою собственную строительную систему, написанную на 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 установлен для целевой архитектуры, просто введите ./tmake qemu , чтобы запустить QEMU с параметрами по умолчанию.
Два шага могут быть объединены путем ввода ./tmake all или просто ./tmake .
Tmake поддерживает действия . Чтобы указать действия, используйте ./tmake <actions> Действия>. Например, ./tmake clean build очистит существующий объект и двоичные файлы, а затем запустит новую сборку.
Tmake поддерживает несколько целей. Чтобы построить для определенной цели, используйте ./tmake target=<arch-machine>[-suffix] . Обратите внимание, что Arch и Machine Fields требуются Tmake, а суффикс не является обязательным. Однако фактическое реализацию конкретной цели может потребовать, чтобы пользователь поставлял значение для суффикса .
Например, ./tmake target=ia32-pc-bios будет создавать малыш для системы IA32 на основе BIOS; ./tmake target=armv7-rpi2 будет построить малыш для Raspberry Pi 2.
Также обратите внимание, что вы не можете произвольно смешать арки и машинные поля. Например, target=ia32-rpi2 является недействительным. Неверные комбинации полей могут не скомпилировать или даже повредить ваше устройство.
Уровень аппаратной абстракции (HAL) обеспечивает абстракцию каждой модели процессора и базовых устройств IO. Он экспортирует серию функций и константов в ядро. HAL отображается с самым высоким 4 МБ всех процессов, включая процесс ядра.
В отличие от обычных операционных систем, ядро малыша является реальным процессом. Ядро не отображается с адресным пространством пользовательских процессов. Тем не менее, виртуальная компоновка пространства адреса ядра немного отличается от других процессов. Ядро имеет картирование один на один благодаря небольшому размеру HAL. В результате управление физической памятью намного проще и чище.
Хотя малыш-это ОС Микрокнел, быть многосервером может быть не хорошей идеей. Вместо этого многие функциональные возможности системы предоставляются в одном сервере - системе. Системный процесс реализует Universal Resource Manager (URS), диспетчер учетных записей пользователей (UAM) и несколько файловых систем.
Процесс драйвера предоставляет несколько важных драйверов устройства, включая клавиатуры, консоли и диски.
| Архитектура | Ширина | Целевая машина | Статус |
|---|---|---|---|
| IA32 | 32 | ПК на базе Netburst | Текущий |
| ARMV7 | 32 | Raspberry Pi 2, Qemu Raspi2 | Текущий |
| MIPS32 | 32 | Создатель CI20, Qemu Malta | Текущий |
| PPC32 | 32 | Mac Mini G4, Powermac G4, Qemu G3beige, Qemu Mac99 | Текущий |
| SPARCV8 | 32 | Qemu sum4m sparcstation 10, qemu leon-3 | Активный |
| RISCV32 | 32 | Шип | Запланировано |
| M68K | 32 | QEMU MCF5208EVB | Запланировано |
| SH4 | 32 | Qemu Shix | Запланировано |
| Вакс | 32 | Сим Вакс | Запланировано |
| or1k | 32 | Qemu or1k-sim | Запланировано |
| AMD64 | 64 | ПК на основе Skylake | Запланировано |
| ARMV8 | 64 | Raspberry Pi 3, qemu virt | Активный |
| PPC64 | 64 | Powermac G5, Qemu Mac99 | Запланировано |
| MIPS64 | 64 | Loongson 3 Desktop, Qemu Malta | Текущий |
| SPARCV9 | 64 | Qemu sun4u | Исходный |
| альфа | 64 | Qemu clipper | Исходный |
| RISCV64 | 64 | Шип | Запланировано |
| S390 | 64 | Qemu S390x | Запланировано |
| IA64 | 64 | Лыж | Запланировано |
| HPPA | 64 | HP 9000 PA-RISC Workstation, QEMU HPPA-Generic | Запланировано |