Quem carrega o BIOS na RAM durante o bootstrap do computador

8

Quando o computador é inicializado, o código no BIOS é executado primeiro. No entanto, como o código no BIOS é carregado na RAM para execução?

Eu me referi a essa questão - A BIOS é lida a partir do chip do BIOS ou copiada para a RAM na inicialização? . No entanto, isso me confundiu mais. Se o BIOS é carregado a partir da ROM e a ROM é um chip separado, qual é o sentido de falar sobre endereços de segmentos na RAM? Além disso, onde está o código da BIOS carregado - está no último 1 MiB de espaço de endereço em modo real ou em algum outro local?

Se alguém pudesse listar as etapas desde a inicialização do computador até a execução da primeira instrução da BIOS, incluindo os endereços de memória usados, seria muito útil

    
por Cygnus 01.01.2014 / 15:53

1 resposta

7

Como eu escrevi na minha resposta a essa pergunta a sabedoria popular recebida sobre o assunto - como infelizmente exemplificado por outras respostas lá (e em outro lugar no SuperUser) - está preso no mundo como era por volta de 1991, apesar da riqueza de referências técnicas disponíveis explicando como é agora o contrário.

Você não teria ficado tão confuso se tivesse lido a minha resposta, porque você não estaria perguntando sobre "BIOS carregado pela ROM" em primeiro lugar.

Seu "chip do BIOS" não é ROM; não há código de máquina entre a inicialização do processador e a primeira instrução no firmware; e o "M" em "RAM" e "ROM" significa "memória".

Como escrevi antes, nos PCs modernos, o firmware da máquina é mantido em RAM não volátil . Não é ROM como costumava ser. Veja a resposta anterior para detalhes do chip NVRAM conectado ao barramento LPC. (Por exemplo: Em uma máquina que está desmontada ao meu lado enquanto digito isso, a NVRAM que mantém o firmware é um Pm49FL004T, um chip de RAM LPC Flash.)

As CPUs de 32 bits não são inicializadas no modo real e não começam com um endereço abaixo da linha de 1 MiB. Isso é décadas de lixo desatualizado dos tempos dos processadores x86 de 16 bits. Eles começam no que é coloquialmente conhecido como modo irreal , e novamente na minha resposta anterior eu dei os detalhes do que realmente tem sido o caso desde o advento do 80386 . Eles carregam sua primeira instrução a partir de um endereço que, na verdade, está localizado na parte superior do espaço de endereço de 32 bits, FFFFFFF0 .

Em minha resposta anterior, informei detalhadamente onde o firmware da máquina é mapeado principalmente para o espaço de endereço físico em máquinas x86 de 32 e 64 bits. Lembre-se: Tanto a RAM quanto a ROM são memória . Endereços físicos são endereços memória , no barramento do sistema. Eles podem endereçar RAM ou ROM. (Eles podem até mesmo abordar outras coisas também, mas isso está apenas complicando essa discussão.) O endereço físico FFFFFFF0 é 16 bytes abaixo do topo da faixa de 512KiB, onde os 512KiB superiores do firmware, em RAM não volátil, é < em> sempre mapeado no barramento do sistema pelo "chipset".

Não há "carregamento" de algum chip ROM mítico que ocorre na inicialização ou reinicialização do processador. O chip que contém o firmware é RAM não volátil . Ele retém seu conteúdo, escrito quando é "flashed", através de ciclos de energia. E a CPU apenas lê as instruções de firmware e os dados dela, através do barramento do sistema e através de um barramento LPC (e possivelmente uma ponte LPC / FWH) conectada ao barramento do sistema através do chipset, usando um endereço físico de memória.

Leitura adicional

por 01.01.2014 / 17:19