BIOS - BIOS

Um par de chips AMD BIOS para um computador Dell 310 da década de 1980

Em computação , BIOS ( / b ɒ s , - s / , POR -oss, -⁠ohss ; uma sigla para Basic Input / Output sistema e também conhecido como o BIOS do sistema , ROM BIOS , BIOS ROM ou PC BIOS ) é o firmware usado para executar a inicialização do hardware durante o processo de inicialização ( inicialização ao ligar) e para fornecer serviços de tempo de execução para sistemas operacionais e programas. O firmware do BIOS vem pré-instalado na placa de sistema de um computador pessoal e é o primeiro software a ser executado quando ligado. O nome se origina do Basic Input / Output System usado no sistema operacional CP / M em 1975. O BIOS originalmente proprietário do IBM PC foi submetido a engenharia reversa por algumas empresas (como a Phoenix Technologies ) procurando criar sistemas compatíveis. A interface desse sistema original serve como um padrão de fato .

O BIOS em PCs modernos inicializa e testa os componentes de hardware do sistema ( autoteste de inicialização ) e carrega um carregador de boot de um dispositivo de armazenamento em massa que inicializa um sistema operacional. Na era do DOS , o BIOS fornecia chamadas de interrupção do BIOS para teclado, monitor, armazenamento e outros dispositivos de entrada / saída (E / S) que padronizavam uma interface para programas aplicativos e o sistema operacional. Os sistemas operacionais mais recentes não usam as chamadas de interrupção do BIOS após a inicialização.

A maioria das implementações do BIOS são projetadas especificamente para funcionar com um determinado modelo de computador ou placa - mãe , fazendo interface com vários dispositivos, especialmente o chipset do sistema . Originalmente, o firmware do BIOS era armazenado em um chip ROM na placa-mãe do PC. Em sistemas de computador modernos, o conteúdo do BIOS é armazenado na memória flash para que possa ser reescrito sem remover o chip da placa-mãe. Isso permite atualizações fáceis do usuário final para o firmware do BIOS para que novos recursos possam ser adicionados ou bugs possam ser corrigidos, mas também cria a possibilidade de o computador ser infectado com rootkits do BIOS . Além disso, uma atualização do BIOS que falhe pode bloquear a placa-mãe.

O Unified Extensible Firmware Interface (UEFI) é um sucessor do BIOS do PC legado, com o objetivo de resolver suas limitações técnicas.

História

/* C P / M   B A S I C   I / O    S Y S T E M    (B I O S)
                    COPYRIGHT (C) GARY A. KILDALL
                             JUNE, 1975 */
[…]
/*  B A S I C   D I S K    O P E R A T I N G   S Y S T E M  (B D O S)
                    COPYRIGHT (C) GARY A. KILDALL
                            JUNE, 1975 */
-  Um trecho do cabeçalho do arquivo BDOS.PLM no código-fonte PL / M do CP / M 1.1 ou 1.2 para Lawrence Livermore Laboratories (LLL)

O termo BIOS (Basic Input / Output System) foi criado por Gary Kildall e apareceu pela primeira vez no sistema operacional CP / M em 1975, descrevendo a parte específica da máquina do CP / M carregada durante o tempo de boot que faz interface diretamente com o hardware . (Uma máquina CP / M geralmente possui apenas um carregador de inicialização simples em sua ROM.)

As versões do MS-DOS , PC DOS ou DR-DOS contêm um arquivo denominado " IO.SYS ", " IBMBIO.COM ", "IBMBIO.SYS" ou "DRBIOS.SYS"; esse arquivo é conhecido como "DOS BIOS" (também conhecido como "DOS I / O System") e contém a parte específica do hardware de nível inferior do sistema operacional. Juntamente com o "BIOS do sistema" específico do hardware, mas independente do sistema operacional, que reside na ROM , ele representa o análogo ao " BIOS CP / M ".

O BIOS originalmente proprietário do IBM PC foi submetido a engenharia reversa por algumas empresas (como a Phoenix Technologies ) que buscavam criar sistemas compatíveis.

Com a introdução das máquinas PS / 2, a IBM dividiu o BIOS do sistema em partes de modo real e modo protegido. A parte de modo real foi concebida para fornecer compatibilidade com sistemas operacionais existentes, como DOS e, portanto, foi chamada de "CBIOS" (para "BIOS de compatibilidade"), enquanto o "ABIOS" (para "BIOS avançada") fornecia novas interfaces especificamente adequado para sistemas operacionais multitarefa, como OS / 2 .

Interface de usuário

O BIOS do IBM PC e XT original não tinha interface de usuário interativa. Códigos ou mensagens de erro foram exibidos na tela, ou uma série de sons codificados foram gerados para sinalizar erros quando o autoteste de inicialização (POST) não prosseguiu até o ponto de inicializar com sucesso um adaptador de vídeo. As opções no IBM PC e XT foram definidas por interruptores e jumpers na placa principal e em placas de expansão . A partir de meados da década de 1990, tornou-se comum que a ROM do BIOS incluísse um "utilitário de configuração do BIOS" (BCU) ou "utilitário de configuração do BIOS", acessado na inicialização do sistema por uma seqüência de teclas específica. Este programa permitia ao usuário definir as opções de configuração do sistema, do tipo anteriormente definido por chaves DIP , por meio de um sistema de menu interativo controlado pelo teclado. Nesse ínterim, PCs compatíveis com IBM‍ - incluindo o IBM AT ‍ - colocaram as definições de configuração em RAM com bateria e usaram um programa de configuração inicializável em disquete, não na ROM, para definir as opções de configuração contidas nesta memória. O disquete foi fornecido com o computador e, se fosse perdido, as configurações do sistema não poderiam ser alteradas. O mesmo se aplica em geral a computadores com barramento EISA , para os quais o programa de configuração foi denominado EISA Configuration Utility (ECU).

Um computador moderno compatível com Wintel fornece uma rotina de configuração essencialmente inalterada na natureza dos utilitários de configuração do BIOS residentes na ROM do final da década de 1990; o usuário pode configurar as opções de hardware usando o teclado e a tela de vídeo. A máquina Wintel moderna pode armazenar as definições de configuração do BIOS na ROM flash, talvez na mesma ROM flash que contém a própria BIOS.

Operação

Inicialização do sistema

Os primeiros processadores Intel começaram no endereço físico 000FFFF0h. Os sistemas com processadores posteriores fornecem lógica para iniciar a execução do BIOS a partir da ROM do sistema.

Se o sistema acabou de ser ligado ou o botão de reinicialização foi pressionado ("inicialização a frio"), o autoteste de inicialização completo (POST) é executado. Se Ctrl + Alt + Delete foi pressionado ("inicialização a quente"), um valor de sinalizador especial armazenado na memória BIOS não volátil (" CMOS ") testado pelo BIOS permite ignorar o POST demorado e a detecção de memória.

Os dispositivos identifica POST, testes e inicializa sistema, tais como a CPU , chipset , memória RAM , placa mãe , placa de vídeo , teclado , rato , unidade de disco rígido , unidade de disco óptico e outro hardware , incluindo periféricos integrados .

Os primeiros PCs IBM tinham uma rotina no POST que baixava um programa para a RAM por meio da porta do teclado e o executava. Esse recurso foi projetado para fins de teste ou diagnóstico de fábrica.

Processo de inicialização

Processo de inicialização

Depois que a varredura da ROM opcional for concluída e todos os módulos ROM detectados com somas de verificação válidas forem chamados, ou imediatamente após o POST em uma versão do BIOS que não faz a varredura por ROMs opcionais, o BIOS chama INT 19h para iniciar o processamento de inicialização. Após a inicialização, os programas carregados também podem chamar o INT 19h para reinicializar o sistema, mas devem ser cuidadosos para desativar as interrupções e outros processos de hardware assíncronos que podem interferir no processo de reinicialização do BIOS, ou então o sistema pode travar ou travar durante a reinicialização .

Quando o INT 19h é chamado, o BIOS tenta localizar o software do carregador de boot em um "dispositivo de boot", como um disco rígido , disquete , CD ou DVD . Ele carrega e executa o primeiro software de inicialização que encontra, dando a ele o controle do PC.

O BIOS usa os dispositivos de inicialização definidos na memória BIOS não volátil ( CMOS ) ou, nos primeiros PCs, chaves DIP . O BIOS verifica cada dispositivo para ver se ele é inicializável, tentando carregar o primeiro setor ( setor de inicialização ). Se o setor não puder ser lido, o BIOS prossegue para o próximo dispositivo. Se o setor for lido com sucesso, alguns BIOS também verificarão a assinatura do setor de inicialização 0x55 0xAA nos últimos dois bytes do setor (que tem 512 bytes de comprimento), antes de aceitar um setor de inicialização e considerar o dispositivo inicializável.

Quando um dispositivo inicializável é encontrado, o BIOS transfere o controle para o setor carregado. O BIOS não interpreta o conteúdo do setor de inicialização a não ser para possivelmente verificar a assinatura do setor de inicialização nos últimos dois bytes. A interpretação das estruturas de dados, como tabelas de partição e blocos de parâmetros do BIOS, é feita pelo programa de inicialização no próprio setor de inicialização ou por outros programas carregados durante o processo de inicialização.

Um dispositivo sem disco, como um adaptador de rede, tenta inicializar por um procedimento definido por sua ROM opcional ou equivalente integrada na ROM BIOS da placa-mãe. Como tal, as ROMs opcionais também podem influenciar ou suplantar o processo de inicialização definido pela ROM do BIOS da placa-mãe.

Com o padrão de inicialização de mídia ótica El Torito , a unidade ótica na verdade emula um disquete de alta densidade de 3,5 "para o BIOS para fins de inicialização. Ler o" primeiro setor "de um CD-ROM ou DVD-ROM não é uma operação simplesmente definida como em um disquete ou disco rígido. Além disso, a complexidade do meio torna difícil escrever um programa de inicialização útil em um setor. O disquete virtual inicializável pode conter software que fornece acesso ao meio óptico em seu formato.

Prioridade de boot

O usuário pode selecionar a prioridade de inicialização implementada pelo BIOS. Por exemplo, a maioria dos computadores tem um disco rígido inicializável, mas às vezes há uma unidade de mídia removível que tem prioridade de inicialização mais alta, então o usuário pode fazer com que um disco removível seja inicializado.

Na maioria das BIOS modernas, a ordem de prioridade de inicialização pode ser configurada pelo usuário. Em BIOS mais antigas, opções limitadas de prioridade de inicialização são selecionáveis; nos primeiros BIOSes, um esquema de prioridade fixa foi implementado, com unidades de disquete primeiro, discos fixos (ou seja, discos rígidos) em segundo, e normalmente nenhum outro dispositivo de inicialização suportado, sujeito à modificação dessas regras por ROMs opcionais instalados. A BIOS em um PC antigo também normalmente só inicializava a partir da primeira unidade de disquete ou disco rígido, mesmo se houvesse duas unidades instaladas.

Falha de inicialização

No IBM PC e no XT originais , se nenhum disco inicializável fosse encontrado, o ROM BASIC era iniciado chamando INT 18h. Como poucos programas usavam BASIC em ROM, os fabricantes de PCs clonados o deixaram de fora; então, um computador que falhou ao inicializar a partir de um disco exibiria "No ROM BASIC" e pararia (em resposta ao INT 18h).

Os computadores posteriores exibiriam uma mensagem como "Nenhum disco inicializável encontrado"; alguns solicitariam que um disco fosse inserido e uma tecla pressionada para tentar novamente o processo de inicialização. Um BIOS moderno pode não exibir nada ou pode entrar automaticamente no utilitário de configuração do BIOS quando o processo de inicialização falha.

Ambiente de inicialização

O ambiente para o programa de boot é muito simples: a CPU está em modo real e os registros de uso geral e de segmento são indefinidos, exceto SS, SP, CS e DL. CS: IP sempre aponta para o endereço físico 0x07C00. Quais valores CS e IP realmente têm não está bem definido. Alguns BIOS usam um CS: IP, 0x0000:0x7C00enquanto outros podem usar 0x07C0:0x0000. Como os programas de inicialização são sempre carregados neste endereço fixo, não há necessidade de um programa de inicialização ser realocável. DL pode conter o número da unidade, conforme usado com INT 13h , do dispositivo de inicialização. SS: SP aponta para uma pilha válida que é presumivelmente grande o suficiente para suportar interrupções de hardware, mas caso contrário, SS e SP são indefinidos. (Uma pilha já deve estar configurada para que as interrupções sejam atendidas, e as interrupções devem ser habilitadas para a interrupção do tique do cronômetro do sistema, que o BIOS sempre usa pelo menos para manter a contagem do tempo do dia e que ele inicializa durante o POST, para estar ativo e para o teclado funcionar. O teclado funciona mesmo se o serviço de teclado do BIOS não for chamado; os pressionamentos de tecla são recebidos e colocados no buffer de digitação antecipada de 15 caracteres mantido pelo BIOS.) O programa de inicialização deve ser definido criar sua própria pilha, porque o tamanho da pilha configurada pelo BIOS é desconhecido e sua localização também é variável; embora o programa de inicialização possa investigar a pilha padrão examinando SS: SP, é mais fácil e mais curto configurar incondicionalmente uma nova pilha.

No momento da inicialização, todos os serviços do BIOS estão disponíveis e o endereço de memória abaixo 0x00400contém a tabela de vetor de interrupção . O BIOS POST inicializou os temporizadores do sistema, controlador (es) de interrupção, controlador (es) DMA e outro hardware de placa-mãe / chipset conforme necessário para colocar todos os serviços do BIOS no status pronto. A atualização da DRAM para todo o sistema DRAM na memória convencional e memória estendida, mas não necessariamente memória expandida, foi configurada e está em execução. Os vetores de interrupção correspondentes às interrupções do BIOS foram configurados para apontar para os pontos de entrada apropriados no BIOS, vetores de interrupção de hardware para dispositivos inicializados pelo BIOS foram configurados para apontar para os ISRs fornecidos pelo BIOS e algumas outras interrupções, incluindo alguns que o BIOS gera para os programas travarem, foram configurados para um ISR fictício padrão que retorna imediatamente. O BIOS mantém um bloco reservado de RAM do sistema em endereços 0x00400–0x004FFcom vários parâmetros inicializados durante o POST. Toda a memória no endereço e acima 0x00500pode ser usada pelo programa de inicialização; ele pode até se sobrescrever.

Extensões (opção ROMs)

Placas periféricas, como adaptadores de barramento de host de unidade de disco rígido e placas de vídeo, têm seu próprio firmware, e a ROM opcional de extensão do BIOS pode fazer parte do firmware da placa de expansão, que fornece funcionalidade adicional ao BIOS. O código em ROMs opcionais é executado antes que o BIOS inicialize o sistema operacional a partir do armazenamento em massa . Normalmente, essas ROMs testam e inicializam o hardware, adicionam novos serviços BIOS ou substituem os serviços BIOS existentes por seus próprios serviços. Por exemplo, um controlador SCSI geralmente possui uma ROM de extensão do BIOS que adiciona suporte para discos rígidos conectados por meio desse controlador. Uma extensão ROM pode, em princípio, conter o sistema operacional ou pode implementar um processo de inicialização totalmente diferente, como inicialização pela rede . A operação de um sistema de computador compatível com IBM pode ser completamente alterada removendo ou inserindo uma placa adaptadora (ou um chip ROM) que contenha uma ROM de extensão do BIOS.

O BIOS da placa-mãe normalmente contém código para acessar os componentes de hardware necessários para a inicialização do monitor integrado e do armazenamento integrado. Além disso, as placas adaptadoras de plug-in, como SCSI , RAID , placas de interface de rede e placas de vídeo geralmente incluem seu próprio BIOS (por exemplo, BIOS de vídeo ), complementando ou substituindo o código BIOS do sistema para um determinado componente. Mesmo os dispositivos embutidos na placa-mãe podem se comportar dessa maneira; suas ROMs opcionais podem fazer parte do BIOS da placa-mãe.

Uma placa adicional requer uma ROM opcional se a placa não for suportada pelo BIOS da placa-mãe e a placa precisar ser inicializada ou tornada acessível através dos serviços da BIOS antes que o sistema operacional possa ser carregado (geralmente isso significa que é necessário no processo de inicialização ) Mesmo quando não é necessária, uma ROM opcional pode permitir que uma placa adaptadora seja usada sem carregar o software do driver de um dispositivo de armazenamento após o início da inicialização - com uma ROM opcional, não leva tempo para carregar o driver, o driver não ocupa espaço na RAM nem no disco rígido, e o software do driver na ROM sempre fica com o dispositivo para que os dois não possam ser separados acidentalmente. Além disso, se a ROM estiver na placa, tanto o hardware periférico quanto o software do driver fornecido pela ROM são instalados juntos sem nenhum esforço extra para instalar o software. Uma vantagem adicional da ROM em alguns sistemas de PC anteriores (notavelmente incluindo o IBM PCjr) era que a ROM era mais rápida do que a RAM do sistema principal. (Em sistemas modernos, o caso é o inverso disso, e o código ROM do BIOS geralmente é copiado ("sombreado") na RAM para que seja executado mais rápido.)

Existem muitos métodos e utilitários para examinar o conteúdo de vários BIOS da placa-mãe e ROMs de expansão, como o Microsoft DEBUG ou o Unix dd .

Procedimento de inicialização

Se uma ROM de expansão deseja alterar a maneira como o sistema inicializa (como a partir de um dispositivo de rede ou um adaptador SCSI) de forma cooperativa, ela pode usar a API BIOS Boot Specification (BBS) para registrar sua capacidade de fazer isso. Uma vez que os ROMs de expansão tenham sido registrados usando as APIs BBS, o usuário pode selecionar entre as opções de inicialização disponíveis na interface de usuário do BIOS. É por isso que a maioria das implementações de BIOS de PC compatíveis com BBS não permitem que o usuário entre na interface de usuário do BIOS até que os ROMs de expansão tenham concluído a execução e o registro com a API BBS.

Além disso, se uma ROM de expansão deseja alterar a maneira como o sistema inicializa unilateralmente, ela pode simplesmente interceptar INT 19h ou outras interrupções normalmente chamadas a partir da interrupção 19h, como INT 13h, o serviço de disco do BIOS, para interceptar o processo de inicialização do BIOS. Em seguida, ele pode substituir o processo de inicialização do BIOS por um próprio, ou pode simplesmente modificar a sequência de inicialização inserindo suas próprias ações de inicialização nele, evitando que o BIOS detecte certos dispositivos como inicializáveis, ou ambos. Antes de a especificação de inicialização do BIOS ser promulgada, essa era a única maneira de ROMs de expansão implementarem o recurso de inicialização para dispositivos não suportados para inicialização pelo BIOS nativo da placa-mãe.

Inicialização

Depois que o BIOS da placa-mãe conclui seu POST, a maioria das versões do BIOS procura módulos de ROM opcionais, também chamados de ROMs de extensão do BIOS, e os executa. O BIOS da placa-mãe procura ROMs de extensão em uma parte da " área de memória superior " (a parte do espaço de endereço em modo real x86 no endereço 0xA0000 e acima) e executa cada ROM encontrada, em ordem. Para descobrir ROMs de opção ISA mapeados na memória , uma implementação de BIOS varre o espaço de endereço em modo real de 0x0C0000até 0x0F0000KB (2.048 bytes) limites, procurando uma assinatura de ROM de dois bytes : 0x55 seguido por 0xAA. Em uma expansão ROM válida, esta assinatura é seguida por um único byte indicando o número de blocos de 512 bytes que a expansão ROM ocupa na memória real, e o próximo byte é o ponto de entrada da ROM opcional (também conhecido como seu "deslocamento de entrada") . Uma soma de verificação do número especificado de blocos de 512 bytes é calculada e, se a ROM tiver uma soma de verificação válida, o BIOS transfere o controle para o endereço de entrada, que em uma ROM de extensão de BIOS normal deve ser o início da rotina de inicialização da extensão.

Nesse ponto, o código de extensão ROM assume o controle, normalmente testando e inicializando o hardware que ele controla e registrando vetores de interrupção para uso por aplicativos pós-inicialização. Ele pode usar os serviços do BIOS (incluindo aqueles fornecidos por ROMs opcionais inicializados anteriormente) para fornecer uma interface de configuração do usuário, para exibir informações de diagnóstico ou para fazer qualquer outra coisa que seja necessária. É possível que uma ROM opcional não retorne ao BIOS, impedindo a seqüência de inicialização do BIOS por completo.

Normalmente, uma ROM opcional deve retornar ao BIOS após a conclusão do processo de inicialização. Assim que (e se) uma ROM de opção retornar, o BIOS continuará procurando por mais ROMs de opção, chamando cada uma à medida que for encontrada, até que toda a área de ROM de opção no espaço de memória tenha sido varrida.

Colocação física

Chips do BIOS em um Dell 310 que foram atualizados com a substituição dos chips

Os ROMs opcionais normalmente residem em placas adaptadoras. No entanto, o PC original, e talvez também o PC XT, tem um soquete ROM sobressalente na placa-mãe (a "placa do sistema" nos termos da IBM) no qual uma ROM opcional pode ser inserida, e as quatro ROMs que contêm o interpretador BASIC podem também podem ser removidos e substituídos por ROMs personalizados que podem ser ROMs opcionais. O IBM PCjr é único entre os PCs por ter dois slots de cartucho ROM na frente. Os cartuchos nesses slots mapeiam para a mesma região da área de memória superior usada para ROMs opcionais e os cartuchos podem conter módulos ROM opcionais que o BIOS reconheceria. Os cartuchos também podem conter outros tipos de módulos ROM, como programas BASIC, que são tratados de forma diferente. Um cartucho PCjr pode conter vários módulos ROM de diferentes tipos, possivelmente armazenados juntos em um chip ROM.

Serviços de sistema operacional

O BIOS ROM é personalizado para o hardware do fabricante específico, permitindo que serviços de baixo nível (como ler um pressionamento de tecla ou gravar um setor de dados em um disquete) sejam fornecidos de forma padronizada aos programas, incluindo sistemas operacionais. Por exemplo, um IBM PC pode ter um adaptador monocromático ou colorido (usando diferentes endereços de memória de vídeo e hardware), mas uma única chamada de sistema BIOS padrão pode ser invocada para exibir um caractere em uma posição especificada na tela em modo de texto ou modo gráfico .

O BIOS fornece uma pequena biblioteca de funções básicas de entrada / saída para operar periféricos (como teclado, texto rudimentar e funções de exibição de gráficos e assim por diante). Ao usar o MS-DOS, os serviços do BIOS podem ser acessados ​​por um programa aplicativo (ou pelo MS-DOS) executando uma instrução de interrupção INT 13h para acessar as funções do disco ou executando uma das várias outras chamadas de interrupção do BIOS documentadas para acessar o vídeo display , teclado , cassete e outras funções do dispositivo.

Os sistemas operacionais e software executivo projetados para substituir essa funcionalidade básica de firmware fornecem interfaces de software de substituição para o software aplicativo. Os aplicativos também podem fornecer esses serviços a si próprios. Isso começou ainda na década de 1980 no MS-DOS , quando os programadores observaram que o uso dos serviços de vídeo do BIOS para exibição de gráficos era muito lento. Para aumentar a velocidade de saída da tela, muitos programas contornaram o BIOS e programaram o hardware de exibição de vídeo diretamente. Outros programadores gráficos, particularmente, mas não exclusivamente na demoscene , observaram que havia recursos técnicos dos adaptadores de vídeo do PC que não eram suportados pelo BIOS da IBM e não podiam ser aproveitados sem contorná-los. Como o BIOS compatível com AT era executado no modo real Intel , os sistemas operacionais executados no modo protegido em processadores 286 e posteriores exigiam drivers de dispositivo de hardware compatíveis com a operação em modo protegido para substituir os serviços do BIOS.

Em PCs modernos com sistemas operacionais modernos (como Windows e Linux ), as chamadas de interrupção do BIOS são usadas apenas durante a inicialização e o carregamento inicial dos sistemas operacionais. Antes que a primeira tela gráfica do sistema operacional seja exibida, a entrada e a saída são normalmente gerenciadas pelo BIOS. Um menu de inicialização, como o menu textual do Windows, que permite aos usuários escolher um sistema operacional para inicializar, inicializar no modo de segurança ou usar a última configuração válida conhecida, é exibido por meio do BIOS e recebe entrada do teclado por meio do BIOS.

Muitos PCs modernos ainda podem inicializar e executar sistemas operacionais legados, como MS-DOS ou DR-DOS, que dependem muito do BIOS para seu console e E / S de disco, desde que o sistema tenha um BIOS ou um firmware UEFI compatível com CSM.

Atualizações do microcódigo do processador

Os processadores Intel têm microcódigo reprogramável desde a microarquitetura P6 . Os processadores AMD têm microcódigo reprogramável desde a microarquitetura K7 . O BIOS contém patches para o microcódigo do processador que corrigem erros no microcódigo do processador inicial; O microcódigo é carregado na SRAM do processador para que a reprogramação não seja persistente, portanto, o carregamento das atualizações do microcódigo é realizado toda vez que o sistema é ligado. Sem o microcódigo reprogramável, uma troca de processador cara seria necessária; por exemplo, o bug do Pentium FDIV tornou-se um fiasco caro para a Intel, pois exigia um recall do produto porque o microcódigo com defeito do processador Pentium original não podia ser reprogramado. Os sistemas operacionais também podem atualizar o microcódigo do processador principal .

Identificação

Alguns BIOS contêm uma tabela de descrição de licenciamento de software (SLIC), uma assinatura digital colocada dentro do BIOS pelo fabricante original do equipamento (OEM), por exemplo, Dell . O SLIC é inserido na tabela de dados ACPI e não contém nenhum código ativo.

Os fabricantes de computador que distribuem versões OEM do Microsoft Windows e software aplicativo da Microsoft podem usar o SLIC para autenticar o licenciamento para o disco de instalação do Windows OEM e o disco de recuperação do sistema que contém o software do Windows. Os sistemas com SLIC podem ser pré-ativados com uma chave de produto OEM e verificam um certificado OEM formatado em XML com o SLIC no BIOS como meio de autoativação (consulte Pré-instalação bloqueada do sistema , SLP). Se um usuário executar uma nova instalação do Windows, ele precisará ter a posse da chave OEM (SLP ou COA) e do certificado digital de seu SLIC para ignorar a ativação. Isso pode ser alcançado se o usuário executar uma restauração usando uma imagem pré-personalizada fornecida pelo OEM. Os usuários avançados podem copiar os arquivos de certificado necessários da imagem OEM, decodificar a chave do produto SLP e, em seguida, executar a ativação SLP manualmente. Os crackers para distribuições não originais do Windows geralmente editam o SLIC ou emulam-no para ignorar a ativação do Windows.

Overclocking

Algumas implementações de BIOS permitem overclocking , uma ação na qual a CPU é ajustada para uma taxa de clock maior do que a classificação do fabricante para capacidade garantida. Overclocking pode, no entanto, comprometer seriamente a confiabilidade do sistema em computadores insuficientemente resfriados e geralmente encurtar a vida útil dos componentes. O overclocking, quando executado incorretamente, também pode causar o superaquecimento dos componentes tão rapidamente que eles se destroem mecanicamente.

Uso moderno

Alguns sistemas operacionais mais antigos , por exemplo o MS-DOS , contam com o BIOS para realizar a maioria das tarefas de entrada / saída dentro do PC.

Chamar serviços BIOS de modo real diretamente é ineficiente para sistemas operacionais de modo protegido (e modo longo ). As chamadas de interrupção do BIOS não são usadas por sistemas operacionais multitarefa modernos após o carregamento inicial.

Na década de 1990, o BIOS forneceu algumas interfaces de modo protegido para Microsoft Windows e sistemas operacionais semelhantes ao Unix, como Advanced Power Management (APM), Plug and Play BIOS , Desktop Management Interface (DMI), PCI BIOS, VESA BIOS Extensions (VBE) e Especificação de multiprocessador (MPS). A partir dos anos 2000, a maioria dos BIOS fornece interfaces ACPI , SMBIOS , VBE e e820 para sistemas operacionais modernos.

Após o carregamento dos sistemas operacionais , o código do modo de gerenciamento do sistema ainda está em execução no SMRAM. Desde 2010, a tecnologia BIOS está em um processo de transição em direção à UEFI .

Configuração

Utilitário de configuração

Historicamente, o BIOS no IBM PC e no XT não tinha interface de usuário embutida. As versões do BIOS em PCs anteriores (classe XT) não eram configuráveis ​​por software; em vez disso, os usuários definem as opções por meio de interruptores DIP na placa-mãe. Computadores posteriores, incluindo todos os compatíveis com IBM com CPUs 80286, tinham uma memória BIOS não volátil com bateria (chip CMOS RAM) que mantinha as configurações do BIOS. Essas configurações, como tipo de adaptador de vídeo, tamanho da memória e parâmetros do disco rígido, só podem ser definidas executando um programa de configuração de um disco, não integrado à ROM. Um "disquete de referência" especial foi inserido em um IBM AT para definir configurações como o tamanho da memória.

As primeiras versões do BIOS não tinham senhas ou opções de seleção de dispositivo de inicialização. O BIOS foi codificado para inicializar a partir da primeira unidade de disquete ou, se isso falhou, do primeiro disco rígido. O controle de acesso nas primeiras máquinas da classe AT era por meio de uma chave física (que não era difícil de ser derrotada se a caixa do computador pudesse ser aberta). Qualquer pessoa que pudesse ligar o computador poderia inicializá-lo.

Posteriormente, os computadores da classe 386 começaram a integrar o utilitário de configuração do BIOS na própria ROM, junto com o código do BIOS; esses computadores geralmente inicializam no utilitário de configuração do BIOS se uma determinada tecla ou combinação de teclas for pressionada, caso contrário, o POST do BIOS e o processo de inicialização serão executados.

Utilitário de configuração de BIOS de prêmio em um PC padrão

Um utilitário de configuração de BIOS moderno possui uma interface de usuário de texto (TUI) ou interface gráfica de usuário (GUI) acessada pressionando uma determinada tecla no teclado quando o PC é iniciado. Normalmente, a chave é anunciada por um curto período de tempo durante a inicialização antecipada, por exemplo "Pressione DEL para entrar na configuração". A chave real depende do hardware específico. Os recursos presentes no utilitário de configuração do BIOS normalmente incluem:

  • Configurando, habilitando e desabilitando os componentes de hardware
  • Configurando a hora do sistema
  • Configurando a ordem de inicialização
  • Definir várias senhas, como uma senha para proteger o acesso à interface do usuário do BIOS e impedir que usuários mal-intencionados inicializem o sistema a partir de dispositivos de armazenamento portáteis não autorizados ou uma senha para inicializar o sistema

Monitoramento de hardware

Uma tela de configuração de BIOS moderna geralmente apresenta um PC Health Status ou uma guia Hardware Monitoring , que faz interface direta com um chip do Hardware Monitor da placa-mãe. Isso permite monitorar a temperatura da CPU e do gabinete , a tensão fornecida pela fonte de alimentação , bem como monitorar e controlar a velocidade das ventoinhas conectadas à placa-mãe.

Depois que o sistema é inicializado, o monitoramento de hardware e o controle do ventilador do computador normalmente são feitos diretamente pelo próprio chip do Monitor de Hardware, que pode ser um chip separado, conectado através de I²C ou SMBus , ou vir como parte de uma solução Super I / O , com interface por meio de baixa contagem de pinos (LPC). Alguns sistemas operacionais, como NetBSD com envsys e OpenBSD com sysctl hw.sensors , apresentam interface integrada com monitores de hardware.

No entanto, em algumas circunstâncias, o BIOS também fornece as informações básicas sobre o monitoramento de hardware por meio da ACPI ; nesse caso, o sistema operacional pode estar usando a ACPI para realizar o monitoramento de hardware.

Reprogramando

Kit de substituição do BIOS para um Dell 310 do final dos anos 1980. Estão incluídos dois chips, um suporte de plástico para os chips e um extrator de chips.

Nos PCs modernos, a BIOS é armazenada em memória EEPROM ou memória flash NOR regravável , permitindo que o conteúdo seja substituído e modificado. Essa reescrita do conteúdo é algumas vezes chamada de flashing . Isso pode ser feito por um programa especial, geralmente fornecido pelo fabricante do sistema, ou no POST , com uma imagem do BIOS em um disco rígido ou unidade flash USB. Um arquivo que contém esse tipo de conteúdo às vezes é denominado "uma imagem BIOS". Um BIOS pode ser atualizado para atualizar para uma versão mais recente para corrigir bugs ou fornecer desempenho aprimorado ou para oferecer suporte a hardware mais recente.

Hardware

American Megatrends BIOS 686. Este chip BIOS está alojado em um pacote PLCC em um soquete.

O IBM PC BIOS original (e o cassete BASIC) foi armazenado em chips de memória somente leitura (ROM) programados por máscara em soquetes na placa-mãe. ROMs podem ser substituídos, mas não alterados, pelos usuários. Para permitir atualizações, muitos computadores compatíveis usaram dispositivos de memória BIOS reprogramáveis, como EPROM , EEPROM e dispositivos de memória flash posteriores (geralmente flash NOR ). De acordo com Robert Braver, o presidente da fabricante de BIOS Micro Firmware, os chips Flash BIOS se tornaram comuns por volta de 1995 porque os chips PROM apagáveis ​​eletricamente (EEPROM) são mais baratos e fáceis de programar do que os chips PROM apagáveis ultravioleta padrão ( EPROM ). Os chips flash são programados (e reprogramados) no circuito, enquanto os chips EPROM precisam ser removidos da placa-mãe para reprogramação. As versões do BIOS são atualizadas para aproveitar as vantagens das novas versões de hardware e corrigir bugs em revisões anteriores dos BIOS.

Começando com o IBM AT, os PCs suportavam um relógio de hardware configurável por meio do BIOS. Tinha um bit de século que permitia mudar manualmente o século quando aconteceu o ano 2000. A maioria das revisões do BIOS criadas em 1995 e quase todas as revisões do BIOS em 1997 suportavam o ano 2000 , configurando o bit de século automaticamente quando o relógio passava da meia-noite de 31 de dezembro de 1999.

Os primeiros chips flash foram conectados ao barramento ISA . A partir de 1998, o flash do BIOS mudou para o barramento LPC , uma substituição funcional do ISA, seguindo uma nova implementação padrão conhecida como "firmware hub" (FWH). Em 2006, a memória flash BIOS mudou para o barramento SPI .

O tamanho do BIOS e a capacidade da ROM, EEPROM ou outra mídia na qual ele pode ser armazenado aumentaram com o tempo, à medida que novos recursos foram adicionados ao código; Agora existem versões do BIOS com tamanhos de até 32 megabytes. Em contraste, o IBM PC BIOS original estava contido em uma máscara de ROM de 8 KB. Algumas placas-mãe modernas estão incluindo CIs de memória flash NAND ainda maiores a bordo, que são capazes de armazenar sistemas operacionais compactos inteiros, como algumas distribuições Linux . Por exemplo, alguns notebooks ASUS incluem o Splashtop OS embutido em seus ICs de memória flash NAND. No entanto, a ideia de incluir um sistema operacional junto com o BIOS na ROM de um PC não é nova; na década de 1980, a Microsoft ofereceu uma opção de ROM para MS-DOS e ela foi incluída nas ROMs de alguns clones de PC, como o Tandy 1000 HX .

Outro tipo de chip de firmware foi encontrado no IBM PC AT e nos primeiros compatíveis. No AT, a interface do teclado era controlada por um microcontrolador com memória programável própria. No IBM AT, esse era um dispositivo com soquete de 40 pinos, enquanto alguns fabricantes usavam uma versão EPROM desse chip que lembrava uma EPROM. Este controlador também foi atribuído à função de porta A20 para gerenciar a memória acima do intervalo de um megabyte; ocasionalmente, uma atualização deste "BIOS do teclado" era necessária para tirar proveito do software que poderia usar memória superior.

O BIOS pode conter componentes como o código de referência de memória (MRC), que é responsável pela inicialização da memória (por exemplo, SPD e inicialização de temporizações de memória ).

O BIOS moderno inclui firmware Intel Management Engine ou AMD Platform Security Processor .

Fornecedores e produtos

Comparação de diferentes implementações de BIOS
Empresa AwardBIOS AMIBIOS Insyde SeaBIOS
Licença Proprietário Proprietário Proprietário LGPL v3
Mantido / desenvolvido Rescindido Rescindido Rescindido sim
Chamadas PCI BIOS de 32 bits sim sim sim sim
AHCI sim sim sim sim
APM sim sim Sim (1,2) Sim (1,2)
BBS sim sim sim sim
Menu de inicialização sim sim sim sim
Compressão Sim ( LHA ) Sim (LHA) Sim (RLE) Sim (LZMA)
CMOS sim sim sim sim
EDD sim sim sim sim
ESCD sim sim ? Não
Flash de ROM ? sim ? Não
Língua conjunto conjunto conjunto C
LBA Sim (48) Sim (48) sim Sim (48)
Especificação de MultiProcessador sim sim sim sim
Opção ROM sim sim sim sim
Senha sim sim sim Não
PMM ? sim ? sim
Tela de configuração sim sim sim Não
SMBIOS sim sim sim sim
Tela de abertura Sim (EPA) Sim ( PCX ) sim Sim (BMP, JPG)
TPM Desconhecido Desconhecido Desconhecido Algum
Inicialização USB sim sim sim sim
Hub USB ? ? ? sim
Teclado USB sim sim sim sim
Mouse USB sim sim sim sim

A IBM publicou todas as listagens do BIOS para seu PC original, PC XT, PC AT e outros modelos de PC contemporâneos, em um apêndice do Manual de Referência Técnica do IBM PC para cada tipo de máquina. O efeito da publicação das listagens do BIOS é que qualquer pessoa pode ver exatamente o que um BIOS definitivo faz e como o faz.

Em maio de 1984, a Phoenix Software Associates lançou seu primeiro ROM-BIOS, que permitiu aos OEMs construir clones totalmente compatíveis sem ter que fazer a engenharia reversa do BIOS do IBM PC, como a Compaq havia feito para o portátil , ajudando a alimentar o crescimento do PC segmentos de mercado compatíveis e vendas de versões não-IBM do DOS. E o primeiro BIOS American Megatrends (AMI) foi lançado em 1986.

Novos padrões inseridos no BIOS geralmente não possuem documentação pública completa ou listagens de BIOS. Como resultado, não é tão fácil aprender os detalhes íntimos sobre as muitas adições não IBM ao BIOS quanto sobre os principais serviços do BIOS.

A maioria dos fornecedores de placas-mãe de PC licenciados um "núcleo" e kit de ferramentas de BIOS de um terceiro comercial, conhecido como "fornecedor independente de BIOS" ou IBV. O fabricante da placa-mãe personalizou este BIOS para se adequar ao seu próprio hardware. Por esse motivo, os BIOS atualizados são normalmente obtidos diretamente do fabricante da placa-mãe. Os principais fornecedores anteriores de BIOS incluíam American Megatrends (AMI), Insyde Software , Phoenix Technologies , Byosoft, Award Software e Microid Research. A Microid Research and Award Software foi adquirida pela Phoenix Technologies em 1998; Mais tarde, a Phoenix eliminou gradualmente a marca Award. A General Software , que também foi adquirida pela Phoenix em 2007, vendeu BIOS para sistemas embarcados baseados em processadores Intel.

A comunidade de código aberto aumentou seus esforços para desenvolver uma substituição para BIOS proprietárias e suas futuras encarnações por uma contraparte de código aberto por meio dos projetos libreboot , coreboot e OpenBIOS / Open Firmware . A AMD forneceu especificações de produto para alguns chipsets e o Google está patrocinando o projeto. O fabricante de placas- mãe Tyan oferece coreboot próximo ao BIOS padrão com sua linha de placas-mãe Opteron .

Segurança

Um BIOS de megatendências americanas mostrando um " Erro de carregamento de uCode da CPU da Intel " após uma tentativa fracassada de carregar patches de microcódigo na CPU
Um chip BIOS separado

Os chips de memória EEPROM e Flash são vantajosos porque podem ser facilmente atualizados pelo usuário; é comum que os fabricantes de hardware emitam atualizações de BIOS para atualizar seus produtos, melhorar a compatibilidade e remover bugs . No entanto, essa vantagem apresentava o risco de que uma atualização do BIOS executada incorretamente ou interrompida pudesse tornar o computador ou dispositivo inutilizável. Para evitar essas situações, BIOS mais recentes usam um "bloco de inicialização"; uma parte do BIOS que é executada primeiro e deve ser atualizada separadamente. Este código verifica se o restante do BIOS está intacto (usando checksums hash ou outros métodos) antes de transferir o controle para ele. Se o bloco de inicialização detectar qualquer corrupção no BIOS principal, ele normalmente avisará o usuário que um processo de recuperação deve ser iniciado inicializando a partir de uma mídia removível (disquete, CD ou unidade flash USB) para que o usuário possa tentar atualizar o BIOS novamente. Algumas placas-mãe têm um BIOS de backup (às vezes chamado de placas DualBIOS) para se recuperar de corrupções do BIOS.

Existem pelo menos cinco vírus de ataque de BIOS conhecidos, dois dos quais eram para fins de demonstração. O primeiro encontrado na natureza foi o Mebromi , voltado para usuários chineses.

O primeiro vírus da BIOS foi a meningite da BIOS, que, em vez de apagar os chips da BIOS, os infectou. A meningite BIOS é relativamente inofensiva, em comparação com um vírus como o CIH .

O segundo vírus do BIOS foi o CIH , também conhecido como "Vírus Chernobyl", que era capaz de apagar o conteúdo do BIOS da ROM flash em chipsets compatíveis. O CIH apareceu em meados de 1998 e tornou-se ativo em abril de 1999. Freqüentemente, os computadores infectados não podiam mais inicializar e as pessoas tinham que remover o flash ROM IC da placa-mãe e reprogramá-lo. O CIH tinha como alvo o então difundido chipset da placa-mãe Intel i430TX e aproveitou o fato de que os sistemas operacionais Windows 9x , também difundidos na época, permitiam acesso direto ao hardware para todos os programas.

Os sistemas modernos não são vulneráveis ​​ao CIH por causa de uma variedade de chipsets usados ​​que são incompatíveis com o chipset Intel i430TX e também com outros tipos de flash ROM IC. Há também proteção extra contra reescritas acidentais do BIOS na forma de blocos de inicialização que são protegidos contra sobregravação acidental ou sistemas equipados com BIOS dual e quádrupla que podem, em caso de falha, usar um BIOS de backup. Além disso, todos os sistemas operacionais modernos, como FreeBSD , Linux , macOS , sistema operacional Windows baseado em Windows NT, como Windows 2000 , Windows XP e mais recentes, não permitem que programas em modo de usuário tenham acesso direto ao hardware.

Como resultado, a partir de 2008, o CIH tornou-se essencialmente inofensivo, na pior das hipóteses causando incômodo ao infectar arquivos executáveis ​​e ativar software antivírus. Outros vírus de BIOS permanecem possíveis, no entanto; como a maioria dos usuários domésticos do Windows sem o UAC do Windows Vista / 7 executam todos os aplicativos com privilégios administrativos, um vírus moderno como o CIH poderia, em princípio, obter acesso ao hardware sem primeiro usar um exploit. O sistema operacional OpenBSD impede que todos os usuários tenham esse acesso e o patch grsecurity para o kernel do Linux também impede esse acesso direto ao hardware por padrão, com a diferença de que um invasor requer um exploit de nível de kernel muito mais difícil ou reinicialização da máquina.

O segundo vírus BIOS foi uma técnica apresentada por John Heasman, principal consultor de segurança do software de segurança de última geração do Reino Unido. Em 2006, na Black Hat Security Conference, ele mostrou como elevar privilégios e ler a memória física, usando procedimentos maliciosos que substituíram as funções ACPI normais armazenadas na memória flash.

O terceiro vírus do BIOS foi uma técnica chamada "Infecção persistente do BIOS". Ele apareceu em 2009 na CanSecWest Security Conference em Vancouver e na SyScan Security Conference em Cingapura. Os pesquisadores Anibal Sacco e Alfredo Ortega, da Core Security Technologies, demonstraram como inserir código malicioso nas rotinas de descompressão da BIOS, permitindo o controle quase total do PC na inicialização, antes mesmo que o sistema operacional seja inicializado. A prova de conceito não explora uma falha na implementação do BIOS, mas envolve apenas os procedimentos normais de atualização do BIOS. Assim, requer acesso físico à máquina, ou para o usuário ser root. Apesar desses requisitos, Ortega destacou as profundas implicações de sua descoberta e de Sacco: "Podemos corrigir um driver para eliminar um rootkit totalmente funcional . Temos até um pequeno código que pode remover ou desativar antivírus."

Mebromi é um trojan que tem como alvo computadores com AwardBIOS , Microsoft Windows e software antivírus de duas empresas chinesas: Rising Antivirus e Jiangmin KV Antivirus. A Mebromi instala um rootkit que infecta o registro mestre de inicialização .

Em uma entrevista de dezembro de 2013 para o 60 Minutes , Deborah Plunkett, Diretora de Garantia de Informações da Agência de Segurança Nacional dos EUA afirmou que a NSA havia descoberto e impedido um possível ataque ao BIOS por um estado-nação estrangeiro, visando o sistema financeiro dos EUA. O programa citou fontes anônimas alegando tratar-se de um complô chinês. No entanto, artigos de acompanhamento no The Guardian , The Atlantic , Wired e The Register refutaram as afirmações da NSA.

As plataformas Intel mais novas têm a tecnologia Intel Boot Guard (IBG) habilitada, essa tecnologia verifica a assinatura digital do BIOS na inicialização e a chave pública IBG é fundida no PCH da placa-mãe . Os usuários finais não podem desativar esta função.

Alternativas e sucessores

O legado do BIOS do PC foi substituído pelo mais complexo Unified Extensible Firmware Interface (UEFI) em muitas máquinas novas. UEFI é uma especificação que substitui a interface de tempo de execução do BIOS legado. Originalmente escrito para a arquitetura Intel Itanium , UEFI agora está disponível para plataformas de arquitetura x86 , x86-64 e ARM ; o desenvolvimento de especificações é conduzido pelo Unified EFI Forum , um grupo de interesse especial da indústria . A inicialização EFI tem suporte apenas nas versões do Microsoft Windows com suporte a GPT , o kernel Linux 2.6.1 e posterior e macOS em Macs baseados em Intel . A partir de 2014, o novo hardware de PC vem predominantemente com firmware UEFI. A arquitetura da proteção do rootkit também pode impedir que o sistema execute as próprias alterações de software do usuário, o que torna a UEFI controversa como uma substituição do BIOS legado na comunidade de hardware aberto . Além disso, o Windows 11 requer UEFI para inicializar.

Outras alternativas para a funcionalidade do "Legacy BIOS" no mundo x86 incluem coreboot e libreboot .

Alguns servidores e estações de trabalho usam um Open Firmware independente de plataforma (IEEE-1275) baseado na linguagem de programação Forth ; ele está incluído com os computadores SPARC da Sun , a linha RS / 6000 da IBM e outros sistemas PowerPC , como as placas-mãe CHRP , junto com o OLPC XO-1 baseado em x86 .

A partir de pelo menos 2015, a Apple removeu o suporte do BIOS legado dos computadores MacBook Pro . Como tal, o utilitário BIOS não suporta mais a opção de legado e imprime "Modo de legado não suportado neste sistema". Em 2017, a Intel anunciou que removeria o suporte do BIOS legado até 2020. Desde 2019, os novos PCs OEM da plataforma Intel não suportam mais a opção legado.

Veja também

Notas

Referências

Leitura adicional

links externos