Este es otro caso en el que la sabiduría popular recibida sobre el tema, como lamentablemente ejemplificada por psusi
la respuesta y, de hecho, parte de la pregunta, está atrapada en el mundo como estaba alrededor de 1991, a pesar de la gran cantidad de referencias técnicas disponibles que explican cómo está ahora. de otra manera.
En el mundo de fines de la década de 1980, el firmware de la máquina, una de las dos cosas llamadas "BIOS" en el mundo de la PC compatible con IBM, estaba en un chip ROM en el bus ISA; y las CPU realmente comenzaron a ejecutar código en la dirección física 000FFFF0
, una ubicación en la "memoria convencional" a la que se accede mediante el puntero de modo real. F000:FFF0
Este mundo se ha ido hace mucho tiempo.
(El mundo en el que el autor de la página WWW al que señaló, S. Ebrahim Shubbar, vive erróneamente, a pesar de haber escrito en 2002, es aún más antiguo. Las CPU no han comenzado con la CS:IP
combinación FFFF:0000
desde el 8086. El 80286 cambió esto a F000:FFF0
Pero el mundo 80286 en sí mismo es el mundo altamente desactualizado de fines de la década de 1980 que aún circula la sabiduría popular).
Su "chip BIOS" es RAM; y tu CPU no es de 16 bits.
En las PC modernas, el firmware de la máquina se guarda en una RAM no volátil . El chip NVRAM está conectado al bus LPC (o a una interfaz dedicada "firmwware hub"), y el puente LPC / FWH en el "chipset" normalmente desactiva los ciclos de escritura en él. "Parpadear" el firmware implica establecer registros del conjunto de chips que permitan escribir en la NVRAM y luego escribir en la NVRAM. (En Intel ICH10, por ejemplo, el bit de registro del conjunto de chips que permite los ciclos de escritura se denomina BIOSWE
"BIOS Write Enable". Hay algunos detalles adicionales que omitiré aquí, pero eso es lo esencial).
Los procesadores x86 no han comenzado la ejecución en la ubicación 000FFFF0
desde los días del 80286. Las CPU de 32 bits se inician en lo que se conoce coloquialmente como modo irreal . Aunque el valor inicial del CS
registro después del reinicio es F000
, el descriptor de segmento asociado con ese registro inicialmente se mantiene FFFF0000
como su dirección base. Por lo que la dirección física que corresponde inicialmente al CS el 16:16: dirección IP F000:FFF0
es, de hecho, y ha sido desde los días de la 80386, FFFFFFF0
.
Y ahí es donde el firmware de la máquina se asigna principalmente al espacio de direcciones físicas en máquinas x86 de 32 bits y 64 bits. Hay una ventana de 128KiB en el firmware en el área de "memoria convencional", pero la NVRAM que contiene el firmware de la máquina puede tener hasta 16MiB (aunque esto varía según el chipset) en las PC modernas y se asigna principalmente a los 16MiB de espacio de direcciones físicas inmediatamente debajo de la línea 4GiB, es decir, direcciones físicas FF000000
a FFFFFFFF
. (Para usar de nuevo el ICH10 como ejemplo: la cantidad de este espacio de direcciones asignada a la NVRAM se controla mediante un registro del conjunto de chips conocido como FWH_DEC_EN
"Activación de decodificación de concentrador de firmware". El firmware está codificado para reprogramar elFWH_DEC_EN
regístrese de acuerdo con el tamaño del chip NVRAM real que está instalado en la placa base. Pero el 512KiB parte superior de la NVRAM está siempre asignada, a las direcciones físicas FFF80000
a FFFFFFF
, y no puede ser desactivada.) El código inicialmente ejecutado por el procesador inmediatamente después de la vida de reinicio en la parte superior de 64KiB de este rango de direcciones 16MiB.
En cuanto al sombreado de la ROM del BIOS (que es como se llama, por qué barlop
cree que la CPU está siendo sombreada es un misterio): Sí, el acceso a NVRAM en el bus LPC o el concentrador de firmware todavía no es tan rápido como el acceso al sistema principal (volátil) RAM. Pero las razones por las cuales el sombreado es importante disminuyeron enormemente con los advenimientos de los sistemas operativos como OS / 2 y Windows NT, nuevamente a fines de los años ochenta y principios de los noventa. Los sistemas operativos en modo real, como MS-DOS, PC-DOS, DR-DOS, etc., se superpusieron a la funcionalidad de E / S proporcionada por el firmware de la máquina. Entonces, el código del firmware y los datos de solo lectura terminaron siendo accedidos mucho en tiempo de ejecución. Los sistemas operativos en modo protegido como OS / 2 y Windows NT dependen mucho menossobre servicios proporcionados por firmware en tiempo de ejecución. Por lo tanto, el hecho de que el código que se ejecuta desde la NVRAM y los datos de solo lectura en el mismo lleguen al procesador más lentamente que cuando se oculta en la RAM del sistema es un problema menor de lo que solía ser.
Por otra parte, ¿qué firmware de código y datos que hacerlo dependen no necesariamente viven en la parte de la NVRAM asignan a la porción del espacio de direcciones físicas, la citada ventana 128KiB "memoria convencional", que es necesariamente incluso shadowable en el primer lugar. No es necesario que todos los servicios de firmware en modo protegido vivan por debajo de la línea de 1MiB en el espacio de direcciones físicas como lo hacen los servicios de firmware en modo real, y algunos no. (Y, por supuesto, sólo sería posible hacer el mismo truco con el área de espacio de direcciones físicas que lo hacen en directo si hay al menos 4GiB de RAM del sistema.)
Irónicamente, una fuente más precisa de información sobre esto que S. Ebrahim Shubbar escribió en 2002 es el libro de Phil Croucher The BIOS Companion del año anterior en 2001. M. Croucher observa que Unices, Linux, Windows NT y "presumiblemente (95 / 98) "" no se obtiene ningún beneficio del sombreado ". No es necesariamente un beneficio total, pero es relativamente poco con respecto al mundo de las personas que ejecutan MS-DOS, PC-DOS y DR-DOS en modo real en máquinas 80286 de 16 bits en 1989.