frostbyte
Un kernel de sistema operativo casero para x86_64, en C y ensamblador. Arranca mediante Multiboot2, pasa a modo de 64 bits con sus propias tablas de páginas, tiene un planificador apropiativo y ejecuta programas en ring 3 - arranca de verdad en QEMU.
Un kernel de sistema operativo escrito desde cero - desde el cargador de arranque hasta ejecutar programas propios en modo usuario. Arranca de verdad, en QEMU.
Descripción general
frostbyte es un kernel x86_64 amateur, escrito en C y ensamblador. El objetivo no era escribir un "sistema operativo" en el sentido cotidiano, sino recorrer todo el camino que suele estar oculto: desde el momento en que el firmware cede el control hasta la ejecución de un programa propio en modo usuario, aislado del kernel.
Es uno de los tipos de proyecto más implacables que uno puede plantearse. Aquí no hay bibliotecas que resuelvan nada por ti, ni una capa que atrape un error. Hay una CPU desnuda, el manual de la arquitectura y tú. Precisamente por eso es una escuela tan buena.
En un programa corriente un error es local: salta una excepción, obtienes una traza de pila, corriges una línea. En un kernel no existe ninguna de esas comodidades. Un bit equivocado en una tabla de páginas y la máquina simplemente se reinicia - sin mensaje, sin registro, sin nada. La depuración se convierte en leer registros y adivinar cuál de tus últimos tres movimientos fue el fatal.
Esa dureza obliga a otra forma de trabajar. Cada paso hay que cerrarlo por separado y comprobarlo de forma aislada antes de añadir el siguiente, porque de lo contrario no se puede distinguir cuál de diez cambios tumbó toda la máquina. La disciplina aquí no es una virtud, sino la condición para avanzar siquiera.
Del firmware al ring 3
Todo el camino es una secuencia de transiciones entre niveles de control cada vez más altos. El firmware carga el kernel mediante Multiboot2 y entrega un mapa de memoria. Luego hay que activar el modo de 64 bits, lo que exige antes una paginación inicial. Después el kernel asume la memoria virtual sobre sus propias tablas de páginas, arranca un planificador que conmuta tareas por interrupción del reloj, y solo al final salta al ring 3.
el cargador de arranque carga el kernel y entrega un mapa de memoria.
activar el long mode exige antes una paginación inicial.
el kernel asume la gestión de la memoria virtual.
una interrupción del reloj conmuta tareas, sin su consentimiento.
un salto al modo usuario y la ejecución del primer programa propio.
El camino del encendido al programa propio
| Etapa | Qué ocurre | Modo |
|---|---|---|
| Multiboot2 | el firmware cede el control, existe un mapa de memoria | ring 0 |
| Long mode | entrada en el modo de 64 bits | ring 0 |
| Tablas de páginas | el kernel asume la memoria virtual | ring 0 |
| Planificador | el reloj conmuta tareas sin consentimiento | ring 0 |
| Ring 3 | el primer programa, aislado del kernel | ring 3 |
Depurar cuando la máquina simplemente desaparece
Como un error no deja rastro, necesitábamos una forma de que el kernel pudiera decir algo antes de tener un controlador de pantalla. La respuesta es QEMU con salida por el puerto serie: el kernel escribe los registros como texto en el serie, y eso va directo a la terminal. Así ves la última línea antes del reinicio en lugar de una pantalla negra.
En modo kernel no hay "casi funciona". Un error en un mapeo de memoria no tumba una función - tumba toda la máquina. Por eso cada paso se probó por separado en el emulador antes de añadir el siguiente, y los indicadores no-reboot y no-shutdown mantienen la máquina congelada ante un fallo en lugar de dejarla desaparecer en un bucle de reinicios.
El resultado: un sistema que de verdad arranca
Lo que sale es un kernel que arranca realmente en QEMU y llega a ejecutar un programa propio en ring 3 - no se detiene en imprimir "hello", sino que recorre todo el camino hasta el modo usuario. Es un proyecto construido para entender el ordenador hasta el fondo, llevado al punto en que esa comprensión queda demostrada por la ejecución, no declarada.
Más proyectos
Más trabajos de la misma categoría - mira cómo abordamos retos parecidos.
¿Tiene un proyecto similar?
Escríbenos - el presupuesto es gratuito y llega en una hora.



