¿En qué modo funcionan las modernas PC con chip Intel de 64 bits en el sector de arranque?

12

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?

mring
fuente

Respuestas:

12

Todas las computadoras compatibles con x86 actuales (esto también incluye la arquitectura x64, tanto de Intel como de AMD, pero no de Itanium) ejecutan el código del sector de arranque en modo real x86 , exactamente como lo hizo la PC original de IBM hace más de 20 años. No es el modo kernel, es el modo segmentado original sin protección de memoria, multitarea o niveles de privilegios de código.

Si puede obtener una unidad de disquete, coloque MS-DOS (o FreeDOS ) en ella y se atasque en la computadora de hoy, comenzará a arrancar.

Es tarea del código de arranque cambiar al modo protegido, configurar la protección de la memoria, etc. Por lo tanto, su suposición es parcialmente correcta. El gestor de arranque inicia la ejecución como modo real x86 y cambia al modo protegido, carga y comienza a ejecutar el núcleo del sistema operativo en modo "núcleo" (anillo 0).

Para obtener más información, puede visitar el artículo de Wikipedia sobre el proceso de inicio de Windows NT , que tiene bastantes detalles sobre este tema.

haimg
fuente
Haimg, gracias por ese enlace y aclaración. @Deshe, lamento quitarte la mejor respuesta.
mring
Ahora es el momento de editar esto, de lo contrario no está de acuerdo con su propia respuesta :-)
Daniel Beck
13

¿Qué pasa con las arquitecturas modernas 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. haimgLa 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 CSregistro 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.

JdeBP
fuente
El enlace al proceso de arranque parece estar roto / muerto. No puedo encontrar un reemplazo.
slm
¿Esto es tuyo? - jdebp.eu/FGA/pcat-boot-process.html
slm
1
Y ahora sé tu nombre mirando las URL 8-). No intentar espiar no pudo evitar notarlo.
slm
Creo que moviste cosas de ntlworld, ¿es correcto?
slm
Posible reemplazo de URL para 1st - jdebp.eu/FGA/pcat-boot-process.html . Dios mío, copia / pega tu A'er por todas partes. Incluso esta wikipedia tiene este A'er citado: en.wikipedia.org/wiki/Talk%3AReal_mode .
slm
1

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.

Deshe
fuente
1

Manual de Intel Volumen 3 Guía de programación del sistema 325384-053ES Enero de 2015:

2.2 MODOS DE OPERACIÓN

El procesador se coloca en modo de dirección real después del encendido o reinicio.

Solo por las patadas, un buen diagrama del manual:

ingrese la descripción de la imagen aquí

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 :

El bit 'CR0' 0 (PE) debe establecerse.

No estoy seguro acerca de GRUB y x86_64.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
GRUB inicia sistemas operativos compatibles con la especificación de arranque múltiple en modo protegido. Eso incluye los * BSD, pero que yo sepa, Linux no sigue esta especificación y hace lo suyo. Al iniciar un sistema operativo compatible con la especificación de arranque múltiple, la configuración de GRUB utiliza la multibootpalabra clave; para Linux, no se dedican linux, linux16y, en las versiones UEFI de GRUB, linuxefipalabras clave, contando GRUB para utilizar un protocolo de arranque específica de Linux.
telcoM
@telcoM bastante justo
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件