Sé que con máquinas más antiguas como 286, los primeros 512 bytes cargados desde el primer sector de la unidad de arranque a 0000: 7C00 en la memoria se ejecutaron en modo real de 16 bits, pero ¿qué pasa con las arquitecturas modernas de 64 bits?
Editar: Supongo que esta es una pregunta incorrecta al pensar en ello. El escritor del gestor de arranque es quien decide qué instrucciones de ensamblaje de modo usar, ¿verdad? El hardware solo hace lo que se le dice. Entonces mi pregunta debería ser, ¿qué modo usan los principales cargadores de arranque del sistema operativo como Windows 7, Mac OS X (el último) y GRUB en máquinas de 64 bits?
Eso depende del firmware que se encuentre en la máquina moderna de 64 bits con la arquitectura moderna de 64 bits.
haimg
La respuesta habría sido el caso hace unos cinco o seis años para el mundo x86, pero hoy está desactualizado para el mundo x86.Antiguos firmwares de PC / AT
Algunas de esas máquinas modernas de 64 bits tienen firmware antiguo de PC / AT. Como se señaló en otras respuestas, cargan y ejecutan el programa de arranque desde el sector # 0 de un disco de la misma manera que lo hizo la PC / AT. Este es el antiguo proceso de arranque de PC / AT.
Nuevos firmwares EFI
Otras máquinas modernas de 64 bits tienen nuevos firmwares EFI. Estos no cargan un programa de arranque desde el sector # 0 de un disco en absoluto . Se inician mediante el gestor de arranque EFI cargando y ejecutando una aplicación de cargador de arranque EFI . Dichos programas se ejecutan en modo protegido. Este es el proceso de arranque EFI.
Los firmwares EFI en general cambian al modo protegido dentro de unas pocas instrucciones de salir del reinicio del procesador. El cambio al modo protegido se realiza desde el principio en la llamada "Fase SEC" de la inicialización del firmware EFI. Técnicamente, los procesadores x86 de 32 bits y mayores ni siquiera comienzan en modo real propiamente dicho, sino en lo que se conoce coloquialmente como modo irreal . (El descriptor de segmento inicial para el
CS
registro no describe el mapeo en modo real convencional y es lo que lo hace "irreal").Como tal, se podría decir que esos sistemas EFI nunca ingresan al modo real propiamente dicho , al iniciar de forma nativa a un gestor de arranque EFI (es decir, cuando no emplean un módulo de soporte de compatibilidad ), ya que cambian del modo irreal directamente al modo protegido y permanecer en modo protegido a partir de entonces.
fuente
Hasta donde yo sé, el código de arranque siempre se ejecuta en modo Kernel.
Por un lado, es imposible que algo decida qué modo usar ya que se ejecuta desde el sector de arranque, simplemente porque son las primeras instrucciones que debe ejecutar el firmware. No hay forma de que el código establezca las instrucciones disponibles antes de que comience a ejecutarse. Así, por diseño, el conjunto de ensamblaje disponible para el código en el sector de arranque está predeterminado por la arquitectura.
Si se hubiera elegido cualquier modo desfavorecido para eso, habría sido imposible usar instrucciones de modos con privilegios más altos, lo que obliga al hecho de que el código de arranque se ejecuta con el modo más privilegiado disponible.
fuente
Manual de Intel Volumen 3 Guía de programación del sistema 325384-053ES Enero de 2015:
Solo por las patadas, un buen diagrama del manual:
GRUB inicia sistemas operativos de arranque múltiple en modo protegido. Especificación de arranque múltiple 0.6.96 Estado de la máquina :
No estoy seguro acerca de GRUB y x86_64.
fuente
multiboot
palabra clave; para Linux, no se dedicanlinux
,linux16
y, en las versiones UEFI de GRUB,linuxefi
palabras clave, contando GRUB para utilizar un protocolo de arranque específica de Linux.