Qual é a necessidade da BIOS ROM estar presente no espaço de endereço no PC?

3

Quando um PC x86 inicializa, ele inicia a execução de um programa chamado BIOS, que é armazenado em memória não volátil na placa-mãe. O trabalho do BIOS é preparar o hardware e, em seguida, transferir o controle para o sistema operacional. fonte Apêndice B. De uma sessão de laboratório aqui no seção O espaço físico do endereço do PC após o mapeamento é mostrado.
+ ------------------ + < - 0x00100000 (1MB)
| BIOS ROM |
+ ------------------ + < - 0x000F0000 (960 KB)

Por que o BIOS precisa usá-lo, senão qual é o seu uso? Como isso está relacionado ao programa da BIOS? que é armazenado em memória não volátil na placa-mãe como mencionei no começo? Embora no recurso de laboratório seja mencionado que o design é para o qemu (emulador x86), mas Osdev [ link também diz o mesmo sobre o layout da memória. Eu estou um pouco confuso.

    
por noPE 08.01.2013 / 20:31

2 respostas

3

O DOS e outros sistemas operacionais em tempo real utilizavam intensamente os serviços de BIOS. Como o modo real dos processadores x86 está vinculado ao espaço de endereçamento 2 ^ 20 = 1Mb, os fornecedores de sistemas i8086 decidiram que o BIOS deve ser mapeado para a parte mais alta do espaço de endereçamento (assim como os kernels mais recentes mapeando sua memória virtual em o fim do intervalo): de 0xA0000 e superior.

O modo protegido tornou essa memória reservada uma lacuna no espaço de endereço: os programas em modo protegido não podem chamar funções da BIOS sem hacks significativos, inutilizando-os em modo protegido e longo (no qual todos os sistemas operacionais modernos são executados), mas transferindo software de RM para PM não foi rápido, então os engenheiros da Intel deixaram uma janela de escape, modo v8086, que permitia rodar programas em modo real em uma sandbox dentro do ambiente de modo protegido (por exemplo, o OS / 2 usava intensamente o modo v8086 e emulação do DOS no sistema Windows também depende desse recurso), ainda exigindo serviços de BIOS para compatibilidade.

Esta memória ainda é usada no 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é mesmo para APIs como VBE 3 , mas sim, o mapeamento de BIOS em 0xA0000 é principalmente a questão de compatibilidade com versões anteriores . Há esforços para substituí-lo: um repensar moderno do BIOS, a UEFI agora está ganhando cada vez mais popularidade.

Conclusão: o mapeamento de BIOS em 0xA0000 é principalmente a questão de compatibilidade com versões anteriores e há esforços para substituí-lo por ambientes de inicialização mais modernos, como UEFI.

    
por 08.01.2013 / 20:59
3

AFAIK, isso tem razões principalmente históricas. O programa é armazenado no chip, mas para executá-lo, o código é carregado na RAM (BIOS shadow), onde a CPU pode buscar diretamente as instruções. Isso é especialmente necessário para imagens de BIOS compactadas em chips menos caros com capacidade mínima.

Desativar a opção 'BIOS shadow' pode desacelerar o processo de inicialização ou raramente causar problemas piores. Além disso, sistemas operacionais como o MS-DOS também usavam as rotinas do BIOS para o IO, que era uma espécie de HAL. Isso seria terrivelmente lento e inseguro para ser usado nos sistemas operacionais multithreaded de hoje, portanto, depois de entregar o controle ao sistema operacional, essa parte da RAM permanece inativa.

Outros sistemas ainda tinham seu kernel nesse chip, por exemplo Commodore Amiga Kickstart, que estava alternativamente disponível como disquete.

    
por 08.01.2013 / 20:59