UEFI: As limitações do BIOS

Como vimos na coluna anterior, BIOS é o acrônimo de “Basic Input / Output System”, ou sistema básico de entrada e saída, originalmente um pequeno conjunto de rotinas de programação desenvolvidas para complementar as rotinas de acesso aos dispositivos de entrada e saída do sistema operacional.
Explicando melhor: o sistema operacional inclui algumas rotinas destinadas a trocar dados com os dispositivos de entrada e saída do computador. Como estas rotinas fazem parte do próprio SO, elas são genéricas, ou seja, desenvolvidas para se entenderem com todos os dispositivos de entrada e saída de todas as máquinas em que o SO for instalado. Mas cada máquina, ou seja, cada placa-mãe, tem suas peculiaridades e seus meios particulares de intercambiar dados entre UCP e dispositivos de E/S. Então as rotinas genéricas do Sistema Operacional devem ser complementadas por certos trechos de código específicos da máquina, que respeitam suas peculiaridades. Ora, sendo específicos de cada máquina (ou de cada placa-mãe), estes trechos devem estar gravados em circuitos de memória que façam parte da própria placa e fornecidos com ela como sua parte integrante.
[singlepic id=3341 w=320 h=240 float=]
Originalmente isto era feito gravando as rotinas em circuitos integrados (CIs) de memória permanente apenas de leitura (ou ROM, de “Read Only Memory“) encaixados em soquetes da placa-mãe. Eram os CIs então conhecidos como “ROM-BIOS” (denominação que perdurou por décadas e ainda hoje há quem a use; veja, no canto inferior direito da Figura 1, um CI do tipo ROM contendo um BIOS desenvolvido pela AMD para o IBM PC; acima dele, o soquete para o coprocessador matemático 8087 e a esquerda o conjunto dos “dip switches“, oito pequenos interruptores usados para configurar manualmente a placa). Atualmente, para este fim, são usadas memórias não voláteis, semipermanentes, do tipo “flash“, que podem ser atualizadas por um programa específico sem necessidade de remoção do CI.
Ora, já que era necessário incluir na placa-mãe um CI de memória com as rotinas do BIOS, por que não aproveitá-lo para nele gravar também as tabelas de interrupções e as rotinas de programação usadas para efetuar o teste do hardware e a carga do sistema operacional, cujas etapas foram descritas na coluna anterior?
Pois assim foi feito. O CI de memória incorporado à placa-mãe passou, então, a conter muito mais que o BIOS. Além deste sistema básico de entrada e saída, continha mais um monte de coisas, inclusive as rotinas responsáveis pela carga do sistema operacional, o carregador de inicialização (“bootloader“).
O resultado disto é que, como sua finalidade original era abrigar as rotinas do sistema básico de entrada e saída, este CI continuou a ser chamado de “BIOS”. E como nele também estão armazenadas as rotinas que gerenciam o procedimento de inicialização da máquina, este conjunto de procedimentos acabou absorvendo o nome do CI que o contém. E, a partir de então, o termo “BIOS” perdeu a função do acrônimo que lhe deu origem e passou a ser usado genericamente para designar o procedimento de inicialização dos computadores.
É por isto que é tão comum encontrar menções a “métodos de inicialização baseados em BIOS” ou, na seção de respostas a perguntas frequentes de um sítio respeitabilíssimo como o do Fórum oficial do UEFI, uma definição como esta: “The BIOS (basic input/output system) is the program originally conceived to get a PC started after power-on.” [o BIOS (sistema básico de entrada/saída) é o programa originalmente concebido para fazer um PC dar a partida após ser ligado]. Estritamente, não é: a designação de “programa que faz um PC dar a partida após ser ligado” cai melhor quando se refere ao carregador de inicialização (“bootloader“) que ao BIOS. Mas ela é assim usada de forma tão genérica que, doravante, quando mencionarmos o termo “BIOS” ou “sistemas baseados em BIOS” estaremos nos referindo de fato ao procedimento de inicialização, não ao sistema básico de entrada e saída, como de direito.
Então vamos adiante.
