Esse é outro caso em que a sabedoria popular recebida sobre o assunto, como infelizmente exemplificada pela psusi
resposta e, de fato, parte da pergunta, está presa no mundo como era por volta de 1991, apesar da riqueza de referências técnicas disponíveis que explicam como está agora. de outra forma.
No mundo do final da década de 1980, o firmware da máquina - uma das duas coisas chamadas "BIOS" no mundo do PC compatível com IBM - estava de fato em um chip ROM no barramento ISA; e as CPUs realmente começaram a executar o código no endereço físico 000FFFF0
, um local na "memória convencional" acessada através do ponteiro em modo real. F000:FFF0
Este mundo se foi há muito tempo.
(O mundo que o autor da página da WWW que você apontou, S. Ebrahim Shubbar, vive erroneamente, apesar de escrever em 2002, é ainda mais antigo. As CPUs não começaram com a CS:IP
combinação FFFF:0000
desde o 8086. O 80286 mudou isso para F000:FFF0
(Mas o próprio mundo 80286 é o mundo altamente desatualizado do final dos anos 80, que a sabedoria popular ainda circula).
O seu "chip BIOS" é RAM; e sua CPU não é de 16 bits.
Nos PCs modernos, o firmware da máquina é mantido em RAM não volátil . O chip NVRAM está conectado ao barramento LPC (ou a uma interface dedicada "firmwware hub"), e a ponte LPC / FWH no "chipset" normalmente desativa os ciclos de gravação nele. "Piscando" o firmware envolve a configuração de registradores de chipset que permitem gravações na NVRAM e, em seguida, gravadas na NVRAM. (No Intel ICH10, por exemplo, o bit de registro do chipset que permite ciclos de gravação é chamado de BIOSWE
"BIOS Write Enable". Existem alguns detalhes adicionais que vou pular por aqui, mas esse é o essencial.)
Os processadores x86 não começam a execução no local 000FFFF0
desde os dias do 80286. As CPUs de 32 bits são iniciadas no que é conhecido coloquialmente como modo irreal . Embora o valor inicial do CS
registro após a redefinição seja F000
, o descritor de segmento associado a esse registro inicialmente é mantido FFFF0000
como seu endereço base. Portanto, o endereço físico que corresponde inicialmente ao endereço IP do CS: 16:16 F000:FFF0
é de fato e existe desde os dias do 80386 FFFFFFF0
,.
E é aí que o firmware da máquina é mapeado principalmente para o espaço de endereço físico em máquinas x86 de 32 bits e 64 bits. Há uma janela de 128KiB para o firmware na área de "memória convencional", mas a NVRAM que mantém o firmware da máquina pode ter até 16MiB (embora isso varia de acordo com o chipset) nos PCs modernos e é mapeada principalmente para os 16MiB do espaço de endereço físico imediatamente abaixo da linha 4GiB - ou seja, endereços físicos FF000000
para FFFFFFFF
. (Para usar o ICH10 como exemplo novamente: quanto desse espaço de endereço é mapeado para a NVRAM é controlado por um registro de chipset conhecido como FWH_DEC_EN
"Firmware Hub Decode Enable", o registro. O firmware é codificado para reprogramar oFWH_DEC_EN
registre de acordo com o tamanho do chip NVRAM atual instalado na placa principal. Mas o topo 512KiB da NVRAM é sempre mapeada, para endereços físicos FFF80000
para FFFFFFF
, e não pode ser desativado.) O código executada inicialmente pelo processador imediatamente após vidas de reset na parte superior 64KiB deste intervalo de endereços 16MiB.
Quanto ao sombreamento do BIOS ROM (como é chamado - por barlop
que acha que a CPU está sendo sombreada é um mistério): Sim, o acesso à NVRAM no barramento LPC ou o hub do firmware ainda não é tão rápido quanto o acesso ao sistema principal RAM (volátil). Mas os motivos pelos quais a sombra é importante diminuíram muito com os avanços de sistemas operacionais como OS / 2 e Windows NT - novamente no final da década de 1980 e no início da década de 90. Sistemas operacionais de modo real, como MS-DOS, PC-DOS, DR-DOS e outros, foram colocados em camadas sobre a funcionalidade de E / S fornecida pelo firmware da máquina. Portanto, o código do firmware e os dados somente leitura acabaram sendo acessados muito em tempo de execução. Sistemas operacionais de modo protegido , como OS / 2 e Windows NT, dependem muito menosnos serviços fornecidos por firmware em tempo de execução. Portanto, o fato de o código executado fora da NVRAM e os dados somente leitura chegarem ao processador mais lentamente do que quando sombreados na RAM do sistema é um problema menor do que costumava ser.
Além disso, o firmware de código e dados que fazem depender não necessariamente ao vivo na parte de NVRAM mapeado para a parte do espaço de endereço físico, o já mencionado 128KiB janela "memória convencional", que é necessariamente mesmo shadowable em primeiro lugar. Os serviços de firmware no modo protegido nem todos precisam viver abaixo da linha de 1MiB no espaço de endereço físico, como os serviços de firmware no modo real, e alguns não. (E, claro, isso só seria possível fazer o mesmo truque com a área de espaço de endereço físico que eles fazem ao vivo em se há pelo menos 4GiB de RAM do sistema.)
Ironicamente, uma fonte mais precisa de informações sobre isso do que S. Ebrahim Shubbar escrevendo em 2002 é o livro de Phil Croucher The BIOS Companion de um ano antes em 2001. M. Croucher observa que Unices, Linux, Windows NT e "presumivelmente" (95 / 98) "" não se beneficiam da sombra ". Não é necessariamente nenhum benefício, mas é relativamente pouco em relação ao mundo das pessoas que executam o MS-DOS, PC-DOS e DR-DOS em modo real em máquinas 80286 de 16 bits em 1989.