- Las personas distinguen entre lo complejo y lo meramente complicado. La complejidad se considera interesante, pero lo complicado se considera dañino. El proceso de configuración de una CPU x86_64 es mayormente complicado.
- Se explica cómo configurar la CPU desde modo real de 16 bits hasta modo largo de 64 bits desde un sector de arranque cargado por la BIOS. Esta configuración es básica y se necesita hacer más trabajo.
- Se requiere el manual de desarrollador de software de arquitecturas Intel 64 e IA-32, un ensamblador (usando nasm) y QEMU. Debes conocer ensamblador x86 y la sintaxis de nasm.
Punto de partida: BIOS
- Después del reinicio, una CPU x86 está en "modo real". Este modo tiene un tamaño de operando predeterminado de 16 bits. Puede direccionar 1 MB de memoria usando segmentación.
- El primer código que se ejecuta después de la BIOS está en el sector de arranque. La BIOS busca el primer sector del sistema que termina en
0xaa55 y carga ese sector de arranque en la dirección de memoria 0x7c00.
- La BIOS proporciona 512 bytes, y con ellos hay que hacer bootstrap del resto del bootloader.
Configuración del sector de arranque
- Se configura un sector de arranque simple para mostrar un mensaje en pantalla usando rutinas de la BIOS y luego detenerse. Esto permite verificar que las herramientas funcionen.
- Se configura el sector de arranque usando código ensamblador y un Makefile.
Paso 1 – Cargar la etapa 2 desde disco
- El bootloader puede dividirse en dos etapas. La etapa 1 es el código del sector de arranque, es decir, todo lo que carga la BIOS. El único propósito de la etapa 1 es cargar la etapa 2 en memoria.
- En la etapa 2 se cambia del modo real de 16 bits al modo protegido de 32 bits. En modo protegido no se pueden usar las rutinas de la BIOS. Cargar sectores desde disco se vuelve mucho más complejo.
- Se explica cómo acceder al disco usando la BIOS.
Modo protegido de 32 bits
- Se cambia la CPU de modo real (16 bits) a modo protegido (32 bits). En modo protegido, la segmentación se usa para implementar protección de memoria.
- Antes de cambiar a modo protegido, se debe definir la tabla global de descriptores (GDT). La GDT se define como una estructura contigua en memoria.
- Se explica cómo definir la GDT y cómo cambiar a modo protegido.
Modo largo de 64 bits
- Antes de cambiar a modo largo, la CPU debe estar en modo protegido y la paginación debe estar activada. El modo protegido ya está configurado, pero se necesita paginación.
- La paginación reemplaza a la segmentación para administrar el espacio de direcciones virtuales, permisos y más. Se explica cómo crear tablas de páginas para cambiar a modo largo.
- Se define la GDT para el cambio a modo largo y se explica cómo pasar de modo protegido a modo largo.
Resumen de GN⁺
- Este artículo explica en detalle el proceso de configurar una CPU x86_64 desde modo real de 16 bits hasta modo largo de 64 bits. Con ello, se puede mejorar la comprensión sobre bootloaders y el desarrollo de kernels de sistemas operativos.
- Cubre varios conceptos como BIOS, sector de arranque, modo protegido y modo largo, y ofrece el código ensamblador y los métodos de configuración necesarios para cada etapa.
- Este artículo es útil para quienes estén interesados en el desarrollo de sistemas operativos, especialmente porque ofrece una comprensión profunda de la arquitectura x86. Un proyecto con funcionalidad similar es "Writing a Simple Operating System – from Scratch".
1 comentarios
Comentarios en Hacker News