How does a basic OS know the memory address of each piece of hardware? How does an OS work out-of-the box on any computer.
A CPU conhece apenas o primeiro endereço a ser executado. O BIOS / Firmware deve "responder" a esse endereço para que a CPU seja inicializada.
E para memória e E / S (espero que você saiba que há dois espaços em x86: Memória e E / S, certo?), havia muitos padrões.
Primeira era dos PCs
Havia uma área semi-oficial na memória chamada BIOS DATA AREA. Ele tinha algumas informações sobre o número de portas COM e LPT, controladores de unidade de disquete, seus endereços básicos de E / S e assim por diante. O sistema operacional também usava chamadas do BIOS ( documentado interrupções) para acessar o hardware. Fornecedor da placa-mãe codificado que endereça para a BIOS. Alguns dispositivos documentaram oficialmente endereços de E / S.
As placas de extensão como o ISA não tinham nenhuma ferramenta a ser detectada, exceto as BIOS da placa de extensão: a BIOS do sistema varreva a memória para obter padrões especiais para localizar a BIOS da placa de extensão e executá-la. O BIOS do cartão pode se instalar como um verificador de interrupção para "sombrear" as funções do BIOS para habilitar a inicialização da rede, etc.
Em muitos casos, era responsabilidade do usuário configurar o cartão com jumpers e fornecer informações ao software (como BLASTER
env variável para parâmetros de som blaster etc).
Era PnP
O PnP é um pacote de especificações sobre a detecção de hardware. Havia o ISA PNP, a porta PORT PNP, o LPT PNP etc. As especificações descrevem que software deve fazer para verificar qual dispositivo está conectado e como o dispositivo deve agir. Alguns ônibus, como o PCI, têm capacidade PNP embutida. O software pode enumerar todos os cartões no PCI e perguntar-lhes sobre os recursos de que precisam, o fornecedor e a classe (para encontrar o driver), etc. e cofigure-os. Enumeração também é possível para USB.
"Software", neste caso, pode ser o PNPBIOS ou o sistema operacional PNP. Então, o BIOS usou essas especificações para encontrar o dispositivo de inicialização e PCI Host bridge ("raiz" do barramento PCI) e armazenou essas informações em tabelas especiais na memória (de acordo com a especificação PNPBIOS) e o sistema operacional as leu e usou recursos PCI e USB para enumerar e habilitar dispositivos (os protocolos PCI e USB estão documentados).
Era ACPI
As tabelas ACPI são preenchidas pelo fornecedor da placa-mãe e armazenadas no firmware (o firmware moderno não é BIOS, mas pode emulá-lo).
Uma tabela especial chamada DSDT descreve qualquer dispositivo do sistema, incluindo botões especiais do laptop, bateria do laptop, ventiladores, complexo raiz PCI-Express e assim por diante.
Os dispositivos são descritos em linguagem chamada AML e o SO deve ter seu intérprete. O DSDT pode descrever memória, IO e "métodos" (também escritos em AML) para fazer coisas como "alterar o brilho".
ACPI é uma enorme especificação. OS usa DSDT para preencher sua "árvore de dispositivos" interna e, uma vez que obtém acesso a "complexo raiz PCI-Express" ou root USB, usa protocolos PCI-Express e USB para fazer mais enumerações e configurações: faixa A e B, e OS configura para usar "B".