
Quando um PC x86 inicializa, ele começa a executar um programa chamado BIOS, que é armazenado na memória não volátil da placa-mãe. A função do BIOS é preparar o hardware e depois transferir o controle para o sistema operacional.fonteApêndice B. De uma sessão de laboratórioaquina seçãoO espaço de endereço físico do PCO seguinte mapeamento é mostrado.
+------------------+ <- 0x00100000 (1 MB)
| ROM do BIOS |
+------------------+ <- 0x000F0000 (960 KB)
Por que o BIOS precisa usá-lo, senão qual é a sua utilidade? Como isso está relacionado ao programa BIOS que está armazenado na memória não volátil da placa-mãe como mencionei no início? Embora no recurso de laboratório seja mencionado que o design é para qemu (emulador x86), mas osdev [http://wiki.osdev.org/Memory_Map_%28x86%29#ROM_Area]também diz o mesmo sobre o layout da memória. Estou um pouco confuso.
Responder1
DOS e outrosmodo realos sistemas operacionais usavam muito os serviços do BIOS. Como o modo real dos processadores x86 está vinculado ao espaço de endereço 2 ^ 20 = 1 Mb, os fornecedores de sistemas i8086 decidiram que o BIOS deve ser mapeado para o limite superior do espaço de endereço (assim como hoje em dia os kernels da metade superior estão mapeando sua memória virtual em o final do intervalo): de 0xA0000 e superior.
O modo protegido tornou essa memória reservada uma lacuna no espaço de endereço: os programas no modo protegido não podem chamar funções do BIOS sem hacks significativos, tornando-o inutilizável no modo protegido e longo (no qual todo sistema operacional moderno é executado), mas transferindo software do RM para PM não era rápido, então os engenheiros da Intel deixaram uma saída de emergência, o modo v8086, que permitia executar programas antigos em modo real em uma sandbox dentro de um ambiente de modo protegido (por exemplo, o OS/2 usava intensamente o modo v8086 e a emulação DOS no sistema Windows também depende desse recurso), ainda exigindo serviços de BIOS para compatibilidade.
Esta memória ainda é usada em modo protegido para algumas tarefas, como terminal VGA/saída gráfica (a memória do terminal está localizada em 0xB8000, as fontes do console também podem ser ajustadas lá, o framebuffer gráfico VGA está em 0xA8000, iirc). Às vezes, essa memória é usada até para APIs comoVBE3, mas sim, o mapeamento do BIOS em 0xA0000 é principalmente uma questão de compatibilidade com versões anteriores. Existem esforços para substituí-lo: um repensar moderno do BIOS, o UEFI está agora ganhando popularidade cada vez mais.
Conclusão:O mapeamento do BIOS em 0xA0000 é principalmente uma questão de compatibilidade com versões anteriorese há esforços para substituí-lo por ambientes de inicialização mais modernos, como UEFI.
Responder2
AFAIK, isso tem principalmente razões históricas. O programa é armazenado no chip, mas para executá-lo o código é carregado na RAM (sombra do BIOS), onde a CPU pode buscar as instruções diretamente. Isso é especialmente necessário para imagens de BIOS compactadas em chips mais baratos e com capacidade mínima.
Desativar a opção ‘Sombra do BIOS’ pode retardar o processo de inicialização ou raramente causar problemas piores. Além disso, sistemas operacionais como o MS DOS também usavam rotinas de BIOS para IO, que era uma espécie de HAL. Isso seria terrivelmente lento e inseguro para uso nos sistemas operacionais multithread de hoje; portanto, depois de entregar o controle ao sistema operacional, esse pedaço de RAM permanece inativo.
Outros sistemas ainda tinham seu kernel nesse chip, por exemplo, o Commodore Amiga Kickstart, que estava alternativamente disponível como Floppy.