¡Vea https://github.com/zhengruohuang/toddler-ng para el niño de próxima generación!
Toddler fue originalmente un proyecto de mitad hobby y media investigación desarrollada durante las vacaciones de verano e invierno cuando estaba en la universidad. El niño original fue diseñado para sistemas IA32 multiprocesador múltiple a pequeña escala. La característica más destacada fueron las técnicas prácticas sin bloqueo utilizadas para la sincronización. Sin embargo, el viejo niño estaba demasiado diseñado para componentes del sistema operativo relacionado con el hardware y regulares. Entonces finalmente se puso práctico continuar el desarrollo. El niño final pudo crear y ejecutar procesos e hilos de los usuarios, así como aceptar entradas de teclado, aunque no se implementó ni se portó un shell.
El nuevo niño, por otro lado, está diseñado con un objetivo completamente diferente. Algough sigue siendo un proyecto de pasatiempo, tiene como objetivo proporcionar un microkernel totalmente utilizable y un entorno de sistema operativo completo para múltiples arquitecturas y plataformas. La idea sin bloqueo se abandona ya que creó demasiada complejidad innecesaria.
El niño tiene su propio sistema de construcción escrito en Python: Tmake . TMake se encarga de las dependencias del archivo y proporciona una serie de primitivas como compilar , enlace , compilación , etc. Tmake scripts (también en Python) y luego use las primitivas para construir el procedimiento de edificio.
Python es necesario para todos los objetivos; Se requieren GCC y binutilos tanto para las arquitecturas huésped como para el objetivo; Se requiere NASM para objetivos X86 (IA32 y AMD64). El emulador predeterminado (QEMU/SIMH/SKI) también se requiere si desea probar el niño pequeño.
Una vez que se instalen todos los paquetes, obtenga el código fuente.
git clone https://github.com/zhengruohuang/toddler.git
cd toddler Tipo ./tmake build para construir niños pequeños. Una vez hecho esto, genera imágenes de disco en target/ directorio. Si se instala QEMU para la arquitectura de destino, simplemente escriba ./tmake qemu para iniciar QEMU con parámetros predeterminados.
Los dos pasos se pueden combinar escribiendo ./tmake all , o simplemente ./tmake .
Tmake apoya las acciones . Para especificar acciones, use ./tmake <actions> . Por ejemplo, ./tmake clean build limpiará los objetos y archivos binarios existentes, luego comenzará una nueva compilación.
Tmake admite múltiples objetivos. Para construir para un objetivo específico, use ./tmake target=<arch-machine>[-suffix] . Tenga en cuenta que Tmake requiere Arch y Machine Cields, y el sufijo es opcional. Sin embargo, la implementación real de un objetivo específico puede requerir que el usuario suministre un valor para sufijo .
Por ejemplo, ./tmake target=ia32-pc-bios construirá un niño pequeño para un sistema de PC IA32 basado en BIOS; ./tmake target=armv7-rpi2 construirá niños pequeños para Raspberry Pi 2.
También tenga en cuenta que no puede mezclar arbitrariamente arco y campos de máquinas . Por ejemplo, target=ia32-rpi2 no es válido. Las combinaciones no válidas de los campos pueden no compilar o incluso dañar su dispositivo.
La capa de abstracción de hardware (HAL) proporciona una abstracción de cada modelo de procesador y dispositivos IO básicos. Exporta una serie de funciones y constantes al kernel. HAL se asigna a los 4 MB más altos de todos los procesos, incluido el proceso del núcleo.
A diferencia de los sistemas operativos convencionales, el kernel de Toddler es un proceso real . El núcleo no está asignado al espacio de direcciones de los procesos del usuario. Sin embargo, el diseño de espacio de dirección virtual del núcleo es un poco diferente de otros procesos. El núcleo tiene un mapeo uno a uno gracias al pequeño tamaño de HAL. Como resultado, la gestión de la memoria física es mucho más fácil y limpia.
Aunque el niño pequeño es un sistema operativo micro-kernel, ser muchos servidores podría no ser una buena idea. En cambio, se proporcionan muchas funcionalidades a nivel de sistema en un solo servidor: sistema. El proceso del sistema implementa Universal Resource Manager (URS), User Cuenta Manager (UAM) y varios sistemas de archivos.
El proceso del controlador proporciona varios controladores de dispositivos esenciales, incluidos teclados, consolas y discos.
| Arquitectura | Ancho | Máquina objetivo | Estado |
|---|---|---|---|
| IA32 | 32 | PC basada en Netburst | Actual |
| ARMV7 | 32 | Raspberry Pi 2, qemu raspi2 | Actual |
| MIPS32 | 32 | Creador CI20, Qemu Malta | Actual |
| PPC32 | 32 | Mac Mini G4, PowerMac G4, QEMU G3Beige, QEMU MAC99 | Actual |
| SPARCV8 | 32 | QEMU SUM4M SPARCSTATION 10, QEMU LEON-3 | Activo |
| riscv32 | 32 | Espiga | Planificado |
| m68k | 32 | QEMU MCF5208EVB | Planificado |
| sh4 | 32 | QEMU SHIX | Planificado |
| vax | 32 | Simh Vax | Planificado |
| o1k | 32 | Qemu o1k-sim | Planificado |
| AMD64 | 64 | PC a base de Skylake | Planificado |
| ARMV8 | 64 | Raspberry Pi 3, Qemu Virt | Activo |
| PPC64 | 64 | PowerMac G5, QEMU MAC99 | Planificado |
| MIPS64 | 64 | Loongson 3 Desktop, Qemu Malta | Actual |
| SPARCV9 | 64 | QEMU SUN4U | Inicial |
| alfa | 64 | Qemu Clipper | Inicial |
| riscv64 | 64 | Espiga | Planificado |
| S390 | 64 | QEMU S390X | Planificado |
| IA64 | 64 | Esquí | Planificado |
| HPPA | 64 | Estación de trabajo HP 9000 PA-RISC, QEMU HPPA-Genérico | Planificado |