¿Cómo funciona el proceso de arranque en PC x86? Si tuviera que hacer mi propio pequeño sistema operativo, ¿cómo lo arranco?

Lo esencial

En las PC, el BIOS maneja la inicialización y la búsqueda del procedimiento de arranque. (Tenga en cuenta el punto de Robert Wagner sobre el arranque UEFI en máquinas nuevas).

Sin embargo, debe almacenar el cargador en una unidad secundaria. Tradicionalmente, esto fue en los primeros sectores de la unidad. Hacer esto en una computadora nueva es obsoleto ya que el viejo modelo de cilindro, cabeza y sector (que tenía sentido para un disco duro) es inútil, por lo que el BIOS busca en su memoria secundaria designada una partición activa . La desventaja de esto es que una partición activa también debe ser primaria (a menos que la unidad se particione a través de GPT)
La mayoría de las PC nuevas probablemente todavía usen las tablas de estilo de Master Boot Record (MBR), simplemente porque es suficiente. Esto remonta sus raíces en los años 80, en la época de las primeras máquinas CP / M. Una de las limitaciones más claras es que solo puede tener 4 particiones. Para evitar esto, el MBR puede tener 3 particiones primarias y una partición ‘extendida’ que incluye todo lo demás. Es por eso que las particiones secundarias / lógicas en este bloque no son de arranque. Tenga en cuenta que la conversión de su disco a GPT para configuraciones de arranque múltiple sin complicaciones no es un proceso sin riesgos, y si decide hacerlo, debe hacer una copia de seguridad de sus datos.

Además, un disco GPT no funcionará cuando se transfiera a una PC desactualizada por razones obvias (el BIOS busca las ID incorrectas en la parte incorrecta del disco).

Particiones de arranque y referencia

Entonces, una forma de hacerlo es configurar una partición de arranque (unos pocos MB) y colocar un cargador de arranque designado. No soy un experto en UNIX, así que los únicos que conozco son LILO y GRUB. Si necesita un gestor de arranque particularmente pequeño para su aplicación, vea cómo lo hicieron en uC Linux u otras microdistribuciones.

Windows 7 en realidad usa esto también; una instalación estándar crea una partición de cargador de arranque de 100 MB que está oculta para el usuario.
Partición típica encontrada en una computadora portátil Wintel: Tenga en cuenta que aunque Windows está almacenado en disk0 \ part2, el activo es part1.

Nota: el método anterior debería funcionar para USB y tarjetas flash, siempre que el BIOS sepa también buscarlos.
poco anticuado Cómo funcionan los cargadores de arranque
Gestor de arranque GRUB 2 – Tutorial completo
También busque en Stackoverflow preguntas similares: Bootloader Working

Las particiones también tienen un encabezado pequeño que identifica su propósito, dirección y tipo de inicio / detención, incluido el sistema de archivos:
Tipo de partición
Tabla de particiones GUID

Cuando las cosas van mal…

Un error frecuente en el tiempo de Windows XP fue la infame ‘falta de NTLDR’, que fue causada fundamentalmente por una corrupción o modificación en el MBR, o en el gestor de arranque en sí. Si bien es posible ‘arreglarlo’, la mayoría de los usuarios no tenían la experiencia para hacerlo, lo que terminó en reinstalaciones completas y pérdida de datos. Las ventanas posteriores a Vista son mucho menos propensas porque el gestor de arranque está en una partición separada. Si bien este último punto no es particularmente útil en el contexto, es útil saber que es poco probable que rompa el sistema operativo en sí simplemente jugando con el gestor de arranque; esto puede reescribirse y reconfigurarse en la gran mayoría de los casos.

Si aparecen otros errores de “disco no encontrado”, compruebe que la partición correcta está marcada como activa y que está iniciando desde la unidad correcta (orden de inicio en la configuración CMOS).

En cuanto a por qué necesita un gestor de arranque separado: el espacio en el chip del BIOS generalmente es limitado; 512 KB a 4 MB de flash. Si creó un software que supiera reconocer todos los tipos e ID de particiones posibles, necesitaría aumentar el tamaño del chip, lo que no es deseable por razones económicas. No tiene que usar una versión completa de LILO o GRUB, pero tiene que usar al menos un script de shell (lo considero un Autoexec antiguo estilo DOS) para decirle a la PC qué cargar a continuación.

Sin embargo, recuerde que el gestor de arranque es un objetivo muy atractivo para un pirata informático, por lo que si necesita incluir características de seguridad, deberá comprometerse con el tamaño y la velocidad.


Aplicaciones integradas *

Si su objetivo no es una PC, depende de la CPU, pero todas las CPU tienen un vector de inserción (el Microchip PIC de gama baja usa 0x0000 0008). Simplemente escriba la dirección donde comienza el programa en ese vector, y la CPU debería saltar automáticamente el contador del programa a esa ubicación y ejecutar las instrucciones que le haya dado.

Si su programa no usa la EEPROM interna, entonces tiene que escribir el gestor de arranque, que le dice a la CPU esencialmente a qué periférico necesita acceder para obtener el resto del programa (y en qué ubicación de dirección), y quizás usted Es posible que desee transferir eso a una RAM o algo más rápido que una memoria flash. Dependiendo de la sofisticación del sistema, puede omitir todo el bit de dirección y crear un traductor para un sistema de archivos FAT32. es decir, en lugar de saltar a un 0x0000A0F2 algo ambiguo, busque /hd2/boot.img
La mayoría de los compiladores integrados decentes (generalmente pagados) ya tendrán una biblioteca para que la use.

* Es posible que excluya los dispositivos Android de esto, ya que utilizan un enfoque muy similar al de la PC de IBM, aunque es cierto que dependen más del firmware del dispositivo.

Todas las PC y sistemas operativos se inician de la misma manera: son cargados e iniciados por la Interfaz de firmware extensible unificada (UEFI). El SO se compila en un ejecutable normal y se almacena en un directorio llamado \ BOOT \ BOOTIA64.EFI

Eso es por 64 bits. Los sistemas operativos de 32 bits se inician a la antigua, por el BIOS.