- Sistema operativo estilo DOS de 64 bits desarrollado en Rust, con algo de ensamblador x86 usado también para cargar el kernel
- Implementa modo texto VGA (80x25), sistema de archivos FAT12 y pila de red IPv4 sobre SLIP (ICMP/UDP/TCP/HTTP)
- Se ejecuta y desarrolla en una máquina virtual basada en QEMU, y también soporta algunos medios físicos de disquete
- Incluye utilidades básicas como un editor de texto, autocompletado de archivos/directorios con TAB, el juego Snake y más
Arquitectura y bootloader
- La CPU objetivo es x86_64, con soporte futuro planeado para la arquitectura ARM (aarch)
- Las versiones iniciales cargaban y ejecutaban el kernel en memoria con un bootloader escrito a mano
- En el kernel de 64 bits se usa el bootloader GRUB2 para manejar la entrada a Long Mode y la transición a Protected Mode
- El bootloader stage2 realiza tareas como configurar GDT, IDT y paginación, además de asignar el puntero Multiboot2
- El kernel está compuesto por un intérprete de comandos de shell y varios componentes personalizados
Emulación e imágenes en QEMU
- El desarrollo y las pruebas se realizan en un entorno de máquina virtual mediante QEMU
- Creación de imagen ISO: usa grub2-mkrescue y xorriso
- Soporta creación y montaje de imágenes de disquete FAT12, utilizables en hardware real o con la opción de QEMU
-fda fat.img
Proceso de inicialización
- Al entrar al kernel, verifica Long Mode, etiquetas Multiboot2, el sistema de archivos FAT12, el estado de VGA y más
- Tras mostrar un logo en ASCII art, transfiere el control al bucle del shell
Sistema de archivos
- Soporte para sistema de archivos FAT12: lectura/escritura/búsqueda/eliminación de archivos, creación/eliminación de directorios y más
- Permite crear y sobrescribir archivos de texto, con soporte para subdirectorios
- Incluye una herramienta fsck para comprobar la consistencia del sistema de archivos
- También hay planes de añadir soporte para FAT32
Pila de red
- Envío y recepción de paquetes IPv4 basados en el protocolo SLIP
- Soporte para procesamiento de tramas Ethernet (pruebas aún no completadas)
- Soporta ICMP Echo (Request/Reply), UDP y TCP (máquina de estados SYN/SYNACK)
- Servidor HTTP simple: sirve páginas HTML estáticas
Juego Snake
- Incluye el juego Snake, y más adelante también planea una versión multijugador (P2P TCP)
- Los datos del juego (niveles, puntajes) pueden guardarse y cargarse como archivos de texto
- Se sale del juego con ESC, y guarda el High Score según la puntuación
Valor del proyecto y puntos de uso
- Como ejemplo de un sistema operativo escrito en Rust, permite apreciar cómo mejora la seguridad y la productividad en el desarrollo de software de bajo nivel
- Con pruebas de SLIP/ICMP, despliegue sencillo y soporte para hardware real, resulta adecuado para experimentar con sistemas operativos y aprender implementaciones personalizadas
- Permite experimentar directamente una estructura de sistema similar a DOS que combina Rust y ensamblador x86
1 comentarios
Comentarios en Hacker News