UEFI: Por que a demora para inicializar?

O BIOS e sua função
BIOS é o acrônimo de “Basic Input and Output System”, ou sistema básico de entrada e saída. Trata-se de um conjunto de rotinas de programação usado pelo sistema operacional para acessar os dispositivos de entrada e saída da máquina. Como cada placa-mãe tem suas peculiaridades, estas rotinas, embora incorporadas ao sistema operacional, precisam respeitar tais peculiaridades e podem ser diferentes de máquina para máquina. Por isto, desde os primeiros computadores pessoais, elas vêm gravadas em um circuito integrado (CI) de memória não volátil que faz parte da própria placa-mãe. Originalmente era um CI do tipo ROM, ou seja, de memória permanente, impossível de ser alterada. Depois passou a ser de memória semipermanente, tipo EPROM ou similar, que podia ser alterado mas exigia para isto equipamentos especiais. Finalmente, nas máquinas modernas, este CI é de memória tipo “flash“, cujo conteúdo pode ser alterado e, portanto, permite atualização das rotinas sem necessidade de ser removido da máquina.
Ora, se a placa-mãe tem que conter um “chip” de memória para as rotinas do BIOS, por que não aproveitá-lo para armazenar também outras rotinas?

E assim foi feito. Quando você liga seu computador e (geralmente) tecla “Del” para entrar no chamado “setup” (conjunto de ajustes do funcionamento da máquina), passa a executar um programa incorporado ao mesmo “chip” de memória que contém o BIOS que permite alterar estes ajustes. Quando a máquina, depois de ligada, faz piscar os leds do teclado, disco rígido e alguns outros dispositivos, está executando uma rotina de testes (chamada POST, acrônimo de “Power On Self Test” ou auto teste de partida), também residente neste CI. E, evidentemente, também neste mesmo CI está gravada a rotina que lê o código do Sistema Operacional (geralmente do disco rígido, mas atualmente este código pode estar em um disco ótico, na rede ou até em um disco de memória tipo “pen-drive“) e o carrega na memória RAM. Este código chama-se “bootloader” ou “carregador da inicialização”.
O mistério, então, está desfeito: quem carrega o sistema operacional é uma rotina de programação especialmente desenvolvida para tal, denominada “bootloader” e gravada no mesmo CI de memória não volátil que contém as rotinas do BIOS e demais rotinas executadas durante a inicialização. CI que, apesar de conter mais que as rotinas do sistema básico de entrada e saída, continua sendo conhecido simplesmente como “o BIOS”.
Mas por que o procedimento demora tanto?
Porque a inicialização de um computador não consiste apenas na carga do sistema operacional na memória RAM.
As etapas da inicialização
Vamos descrevê-la da forma mais sucinta possível para que possamos entender as razões da demora.
Assim que a máquina é ligada, o processador (que obedece a arquitetura Intel, como praticamente todos os usados nos nossos micros) “aponta” seu ponteiro de instruções para endereço mais alto da memória. O CI que contém este endereço, como você já deve ter adivinhado, é justamente o mesmo que contém o BIOS. Neste endereço há uma instrução, em linguagem de máquina, naturalmente, que desvia o fluxo do programa para uma rotina de testes denominada POST, o nosso já citado auto teste de partida, durante o qual todo o hardware é testado (lhe parece perda de tempo testar todo o hardware cada vez que a máquina é ligada? Talvez porque você não tenha se dado conta do fato de que, enquanto ela estava desligada, o usuário pode ter acrescentado ou removido um dispositivo como por exemplo um disco rígido…) Durante o teste, algumas mensagens aparecem na tela dando conta de seu progresso, dos dispositivos encontrados e seu estado (veja figura).

Terminado o teste de hardware e tudo estando nos conformes (se não estiver, a rotina é interrompida e aparece uma mensagem de erro na tela), a máquina passa a transcrever na memória RAM um conjunto de tabelas que contêm endereços das chamadas “rotinas de interrupção” para que o sistema saiba onde encontra-las quando precisar delas. Tudo isto é feito sem qualquer concurso do sistema operacional, que ainda não foi carregado.
Testado o hardware, carregadas na memória as tabelas de interrupção e executadas mais algumas tarefas preparatórias que não vale a pena mencionar, então ? e somente então ? o controle é passado para o “bootloader“, a rotina que, afinal, carregará o sistema operacional.
O primeiro passo desta rotina é consultar os ajustes do “setup” (que estão armazenados no mesmo CI) para verificar de onde o usuário deseja que o SO seja carregado desta vez (em geral é do disco rígido, mas isto pode ser alterado, como sabemos). Isto feito, a rotina de carga vai até o dispositivo de armazenamento escolhido pelo usuário, procura os arquivos que contêm as rotinas que, juntas, constituem o sistema operacional, as carrega na memória e passa o controle para elas.
Somente então o sistema operacional se assenhora da máquina, efetua as derradeiras preparações (como carga dos “serviços” e programas residentes que permanecem em segundo plano) e, afinal, se põe à disposição para a labuta.
É por isto que demora tanto.
Mas, considerando o comentário de Pete Dice citado lá no início da coluna, algo tem que ser feito para reduzir este tempo ? e reduzir drasticamente ? para que os computadores não sejam “encaminhados diretamente a um museu ainda em sua embalagem original”.
É aí que entra o padrão UEFI.
Que começaremos a destrinchar na próxima coluna.
Até lá.
B. Piropo
