Drivers de sistemas operacionais versus drivers do BIOS

2

Já passei por algumas classes básicas de sistemas operacionais, séries de vídeos etc. e tenho essa pergunta sobre os drivers do sistema operacional versus os drivers do BIOS. Como um sistema operacional básico conhece o endereço de memória de cada peça de hardware? Como funciona um sistema operacional em qualquer computador? Existe um layout de memória de dispositivo padrão que todos conhecem? Ou o SO redirecionaria seu IVT para apontar para drivers de dispositivo BIOS? Por favor me aponte para algum material de leitura para este tópico.

    
por Gilles 25.09.2017 / 15:29

3 respostas

2

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".

    
por 26.09.2017 / 00:46
0

A maioria dos sistemas operacionais é composta de vários componentes, como gerenciador de memória, saída de entrada, gerenciador do sistema de arquivos, etc. Anos atrás, com sistemas operacionais monolíticos, tudo era construído em conjunto. A maioria dos sistemas operacionais modernos tem alguma maneira de alterar dinamicamente os vários componentes dentro e fora. Alguns sistemas operacionais, micro-kernels, têm apenas uma funcionalidade básica de gerenciamento para o sistema operacional, com a maioria dos componentes adicionais, como o sistema de arquivos, sendo adicionados em partes.

Os sistemas operacionais modernos também são construídos em uma série de camadas um pouco parecidas com o modelo OSI para pilhas de rede (consulte link ) a fim de fornecer o máximo de independência do hardware real em que eles estão sendo executados.

Portanto, o sistema operacional é basicamente uma máquina abstrata na qual estão plugados módulos específicos de hardware e de concreto. Existem especificações de interface, que tendem a ser um pouco de uma descrição de máquina abstrata, que descrevem o controle, os dados e os serviços que os módulos específicos de hardware devem fornecer ao sistema operacional.

Assim, um instalador para uma pilha de driver de dispositivo específica sabe sobre suas necessidades específicas de hardware e interfaces para um dispositivo, mas o sistema operacional não conhece essas necessidades concretas de hardware específicas. O sistema operacional delega todas as coisas específicas do dispositivo para a pilha de drivers de dispositivos.

Eu uso a palavra "pilha" porque a funcionalidade que realiza a comunicação real do dispositivo é normalmente composta de uma série de camadas. Você pode ver isso com o Gerenciador de dispositivos do Windows com a maioria dos dispositivos que mostram um conjunto de arquivos de driver que estão sendo usados para um dispositivo específico.

Portanto,existemvárioscomponentesdesoftwarequepodem,naverdade,virdediferentesfornecedores.

Portanto,seosistemaoperacionalquisersaberdetalhessobreohardware,elesolicitaráaodriverdedispositivoessesdetalhes.

Umsistemaoperacionalfuncionadeimediatoemdiversasplataformasdehardwareporqueosfornecedoresdohardwareespecíficoquecompõeaplataformafornecemapilhadedriversqueosistemaoperacionalprecisaparatrabalharnohardwareespecíficoeconcreto.

Diferentessistemasoperacionaisterãodiferentesespecificaçõesdeinterfaceparaosdriversdedispositivoqueosistemaoperacionalfoiprojetadoparausar.Portanto,paraLinux,vocêdeveterdriverscompatíveiscomosistemaoperacionalLinuxqueforneçamainterfacedodriverdoLinux.ParaoWindows,vocêprecisaterdriversdeinterfacedoWindows.

Comoháumapilhadedrivers,podeserquealgunsdoscomponentesdesoftwarenapilhasejamosmesmosentresistemasoperacionaisdiferentes,desdequeomesmohardwareestejasendousado.Aspartesdacamadaqueconversamdiretamentecomodispositivodehardwarepodemserasmesmas,masosníveissuperioresdapilha,osquedeveminteragircomosistemaoperacionalreal,serãodiferentes,jáquediferentessistemasoperacionaistêmdiferentesinterfacesdedriverdedispositivo.

Hátoneladasdelivrosdisponíveissobresistemasoperacionaisehátoneladasdeprojetosdecódigoabertoparaváriossistemasoperacionais.

Dêumaolhadanestadiscussão link

Há vários livros on-line gratuitos, como o link

E dê uma olhada nesta página do github sobre sistemas operacionais de código aberto link

    
por 25.09.2017 / 23:42
0

Em um PC moderno, cada peça de hardware relata algumas informações básicas sobre ela quando solicitada. Por exemplo, muitos periféricos estão conectados ao barramento PCI . Quando o SO quer saber quais periféricos estão conectados ao barramento PCI, ele envia uma instrução no barramento pedindo a cada periférico para enviar uma descrição. Isso é chamado de enumerando (os dispositivos ligados) no barramento. Esta descrição usa um código numérico para identificar cada modelo de dispositivo chamado de PCI ID . Quando o sistema operacional vê que um dispositivo com uma determinada identificação de PCI está presente, ele tenta carregar um driver para essa identificação de PCI; se o sistema operacional não tiver um driver, ele poderá tentar fazer o download de um ou informar ao usuário que um dispositivo desconhecido está presente.

Por exemplo, no Linux, você pode executar o comando lspci para listar dispositivos PCI. Tem várias opções para exibir diferentes tipos de informação, brincar um pouco se você está curioso. Eu descrevo o mecanismo que o Linux usa para carregar um driver para um dispositivo PCI em esta resposta . Isso é apenas um exemplo; outros sistemas operacionais de PC têm um mecanismo para fazer a mesma coisa, mas esse mecanismo pode ser completamente diferente.

Como o SO sabe que existe um barramento PCI e como acessar o barramento? Eu acho que é hard-coded se você construí-lo para uma arquitetura de PC. Note que “arquitetura de PC” é mais específica do que “CPU x86” - você pode colocar um conjunto diferente de barramentos em torno de um processador x86, mas não seria chamado de um PC (moderno).

Diferentes arquiteturas de máquina podem ou não ter maneiras de enumerar drivers presentes. Por exemplo, PC até meados dos anos 90 não possuía esses métodos. Antes do barramento PCI, havia o barramento ISA . Em um barramento ISA, se você quiser saber se um dispositivo está presente em um determinado endereço, envie um comando para ele. Se você receber uma resposta que você entende, bom. Se o comando travar o computador, ou causar um efeito indesejado, porque há um periférico completamente diferente, difícil. Em um PC de 1908, o sistema operacional perguntou ao BIOS sobre os dispositivos que estavam configurados (mas o BIOS não listava todos os dispositivos, apenas os tipos de dispositivos que o BIOS conhecia) e o usuário que instalou um cartão de extensão necessário para fornecer detalhes de configuração no BIOS ou na configuração do sistema operacional. O BIOS incluía alguns drivers básicos para o teclado e a tela, e sistemas operacionais como o DOS chamavam esses drivers; outros sistemas operacionais (ou aplicativos) podem acessar o hardware diretamente (especialmente para exibição, já que os drivers do BIOS eram lentos e limitados).

Ainda hoje, a maioria dos sistemas embarcados não tem como enumerar os periféricos internos. Muitos dispositivos (especialmente aqueles baseados em ARM, mas não apenas aqueles) descrevem seus periféricos em uma estrutura de dados chamada árvore de dispositivos . Esta estrutura de dados é armazenada em ROM ou memória flash e o gerenciador de inicialização (o equivalente do BIOS) comunica o dados para o sistema operacional. Dessa forma, o sistema operacional não precisa ser construído para um conjunto específico de dispositivos. Ele lê essas informações quando é iniciado.

    
por 26.09.2017 / 00:17