Sítio do Piropo

B. Piropo

< Coluna em Fórum PCs >
Volte
27/02/2012

< UEFI: As limitações do BIOS >


Como vimos na < http://blogs.forumpcs.com.br/bpiropo/2012/02/21/uefi-por-que-a-demora-para-inicializar/ > 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.

Figura 1: um CI ROM BIOS

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 < http://www.uefi.org/about/ > 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 temo “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.

As razões da obsolescência

Os sistemas baseados em BIOS, dos quais tanto reclamamos hoje, certamente estão sendo injustiçados. Afinal, é verdade que têm seus inconvenientes, mas não devemos esquecer que quando a técnica foi desenvolvida era o que havia de melhor. Na verdade, era tão boa e de tal forma eficiente que, no mundo da informática, onde a obsolescência ocorre normalmente em cerca de três anos, vem atravessando décadas prestando seus serviços e, evidentemente com algumas modificações, ainda hoje é a responsável pelo gerenciamento da inicialização de todos os computadores com processadores que adotam a arquitetura Intel. E funciona.

Porém, como estes velhos atores em final de carreira, se pretende manter sua dignidade, já está na hora de sair de cena. Vejamos o porquê desta afirmação.

Figura 2: o Intel 8088

A partida baseada em BIOS foi desenvolvida para dar suporte à inicialização de um computador que usava um processador 8088 da Intel (sim, adivinhou, foi o bom e velho IBM PC, aquele que deu origem à chamada “linha PC” nos idos de agosto de 1981). E, tendo sido criada sob medida para este processador, desfruta de todas as suas vantagens e padece de todas as suas limitações. Como o processador foi lançado no final dos anos setenta do século passado, atualmente está totalmente obsoleto. O que significa que suas vantagens se foram, mas as limitações permaneceram e até hoje afetam os sistemas baseados em BIOS. A maior delas: tendo sido desenvolvidas para um dos primeiros processadores da linha Intel, estas rotinas somente podem funcionar em máquinas que usem processadores que adotam (ou emulam durante a partida) uma arquitetura interna compatível com a daquele velho processador, a chamada “arquitetura Intel x86”. Mas esta não é a única. Há outras igualmente relevantes.

Por exemplo: o i8088 somente era capaz de “enxergar” um espaço de endereçamento de 1 MB (isto mesmo, nenhum IBM PC podia receber mais de 1 MB de memória RAM, mas para ser franco, naquela época não fazia muita diferença pois a máquina vinha de fábrica com 256 KB de RAM e com possibilidade de ampliá-la apenas até 512 KB...). O que obriga, até hoje, a todo micro que usa BIOS, manter o processador no chamado “modo real” ao ser ligado, o que o faz emular um 8088, para que a máquina se comporte como se tivesse apenas 1 MB de memória RAM, espaço no qual carregará as rotinas do procedimento de inicialização.

Outra séria limitação do BIOS, irrelevante na época em que foi criado mas que está prestes a se tornar um problema crítico, é a forma pela qual gerencia memória secundária (unidades externas de armazenamento, como discos rígidos). Para manejar estas unidades, o BIOS consulta o primeiro setor do disco de inicialização, conhecido como MBR (acrônimo de Master Boot Record, ou registro mestre de inicialização) para ser informado sobre a capacidade do disco e, caso ele tenha sido subdividido em partições que se comportam como unidades independentes, sobre o tamanho e localização destas partições. Pois bem: o BIOS só considera válidos os MBR de discos cuja capacidade total seja igual ou inferior a 2,2 TB (241 bytes). E não aceita que sejam subdivididos em mais de quatro partições.

Tudo isto, naturalmente, sem mencionar o problema do tempo de inicialização, abordado na coluna anterior que, embora até venha diminuindo, parece ser cada vez maior quando comparado ao de outros dispositivos que não adotam a partida baseada em BIOS.

Portanto algo tem que ser feito para mudar isto. Está na hora de substituir o BIOS por algo mais rápido, versátil e eficiente.

Na verdade esta preocupação não é nova.

O Itanium e seu EFI

Houve diversas iniciativas de dar cabo do BIOS ao longo destas três décadas. A primeira ocorreu ainda nos anos oitenta do século passado, mais precisamente em 1988 quando a IBM lançou seu malsucedido PS/2, uma linha de micros baseada em uma nova arquitetura de 32 bits, a MCA (de “Micro Channel Architecture”), patenteada com o objetivo estratégico de liquidar com a concorrência dos clones do PC, que exigia um novo sistema operacional e novas controladoras de dispositivos (o barramento MCA era diferente do ISA e os novos “slots” não aceitavam as velhas placas).

O PS/2 foi, talvez, o melhor exemplo de tiro que saiu pela culatra: em vez de liquidar com os clones, liquidou com a supremacia da IBM na linha PC – mas isto é outra história, que talvez um dia venhamos a abordar. Pois uma de suas novidades – e que logo caiu em esquecimento – era um procedimento de inicialização denominado ABIOS (de “Advanced” BIOS), tão malfadado que hoje ninguém mais lembra dele (faça uma pesquisa no Google e verá que, ao menos nas primeiras páginas, não surgirá qualquer referência a ele; mas, para não pensarem que estou inventando, você as encontrará no < http://en.wikipedia.org/wiki/IBM_Personal_System/2 > verbete da Wikipedia referente ao PS/2).

As demais tentativas visaram o desenvolvimento de procedimentos de partida de máquinas com processadores que não aderiam à arquitetura ix86, como a incluída no padrão ARC (Advanced RISC Computing) para a falecida plataforma Alpha em 1990 (alguém lembra dela? Badaladíssima nas grandes feiras de computadores do início dos anos noventa do século passado, chegou a ser considerada a plataforma do futuro...) Também o SPARC, da Sun e o defunto Power PC, fruto de uma estranha aliança entre Intel, IBM e Motorola (um negócio destes não poderia dar certo...) tiveram seus próprios procedimentos de inicialização que não usavam o BIOS. Não há mais sinal de qualquer deles.

A primeira iniciativa de eliminar o BIOS que efetivamente frutificou ocorreu na segunda metade dos anos noventa do século passado. E não foi opcional, foi obrigatória: a Intel iniciava então o desenvolvimento do Itanium, seu primeiro processador a abandonar a arquitetura x86 e adotar aquela que passou a ser conhecida como IA-64 (hoje, Intel Itanium Architecture, provavelmente para evitar confusão com a ix-64) e precisava de um procedimento de inicialização eficaz.

A arquitetura interna do Itanium é revolucionariamente diferente da adotada nas linhas x86/x64. Usa paralelismo no nível das instruções (ou seja, não é superescalar) e foi concebida para sistemas computacionais de alto desempenho e servidores. Seria portanto inaceitável obrigar um microprocessador de tal poder de processamento a adotar o “modo real” para emular um velho x86 durante a partida. O que descartava liminarmente uma inicialização baseada em BIOS. A Intel, então, desenvolveu – inicialmente, especialmente para o Itanium – um padrão denominado originalmente “Intel Boot Initiative” e, mais tarde, rebatizado para “Extendend Firmware Interface” (interface com o “firmware” ampliada), ou EFI.

A especificação EFI, lançada em 2000, foi adotada no Itanium. O processador não foi propriamente um sucesso (dada a expectativa que cercou seu lançamento, foi considerado excessivamente lento) mas a EFI, patenteada pela Intel, não pode ser considerada um fracasso. Tanto que, em 2003, a especificação chegou à versão 1.1 e foi licenciado pela Intel para alguns fabricantes de computadores.

Mas em 2005 a Intel, embora mantendo os direitos de propriedade sobre o padrão EFI e podendo licenciá-lo, decidiu interromper sua evolução proprietária e cedeu os direitos de futuros desenvolvimentos para um consórcio formado por representantes de diversas empresas, tanto fabricantes de hardware como AMD, Apple, Dell, HP, IBM, Lenovo e a própria Intel, como desenvolvedores de sistemas como a Phoenix e a Microsoft.

Este consórcio mudou o nome da especificação para UEFI (de Unified EFI, ou EFI unificada) e adotou a denominação de < http://www.uefi.org/home/ > Unified EFI Forum.

Segundo sua própria definição, trata-se de “uma organização industrial colaborativa sem fins lucrativos formada para promover e gerenciar o padrão UEFI”.

Um padrão que tem por objetivo substituir o BIOS e sobre o qual entraremos em detalhes na próxima coluna.

Até lá.

B. Piropo