Nesta altura dos acontecimentos já sabemos < http://blogs.forumpcs.com.br/bpiropo/2012/02/21/uefi-por-que-a-demora-para-inicializar/ > como transcorre o (lento) procedimento de partida e carga do sistema operacional em um computador que usa a arquitetura Intel tradicional e < http://blogs.forumpcs.com.br/bpiropo/2012/02/27/uefi-as-limitacoes-do-bios/ > porque a inicialização dos computadores com sistemas baseados em BIOS é tão demorada. Sabemos também que o processador Itanium, que usa uma arquitetura própria (“Intel Itanium Architecture”), abandonou o velho sistema baseado em BIOS e adotou uma especificação própria para o procedimento de partida, a EFI (“Extendend Firmware Interface” ou interface com o “firmware” ampliada), desenvolvida especificamente para ele pela Intel. E sabemos ainda que a Intel, embora mantendo seus direitos de propriedade sobre a especificação EFI, abriu mão dos direitos de quaisquer desenvolvimentos futuros, cedendo-os para um consórcio de empresas (do qual a própria Intel faz parte) que adotou a denominação de < http://www.uefi.org/home/ > Unified EFI Forum e cujo objetivo é promover e gerenciar o padrão UEFI, uma especificação para o procedimento de partida, inicialização e carga do sistema operacional não baseado em BIOS para computadores da linha PC. Uma instituição atuante que, entre outras atividades, acaba de realizar a < http://www.uefi.org/events > UEFI Winter Plugfest em pleno vale do silício (veja chamada na Figura 1).
Figura 1: UEFI Plugfest
Resta ver o que é o UEFI e como ela funciona.
Mas, antes, uma observação que tem mais a ver com as questões ligadas ao idioma que aos aspectos técnicos da coisa: como pronunciar “UEFI”.
Originalmente, em inglês, idioma em que foi estabelecido o acrônimo, “UEFI” se pronuncia “iu – ef – ái”, com tônica no “ái” final. E quem assim o desejar, naturalmente, pode pronunciá-lo desta forma – talvez correndo o risco de parecer um tanto pernóstico, mas nada além disto. A pronúncia está corretíssima.
Porém, no que me diz respeito, nada vejo de errado em aportuguesar a pronúncia para “u – éfi”, com tônica no “é” central. Não é a pronúncia correta em inglês, é verdade. Mas cá no patropi falamos português e esta seria a pronúncia correta neste idioma – e a que eu adoto.
Então, o assunto fica a seu critério.
Sugiro o seguinte: diga “BIOS” em voz alta. Se pronunciou “bái –os”, com tônica no “á”, como os nossos bravos irmãos do norte, adote para UEFI a pronúncia “iu – ef – ái”, como eles o fazem em seu idioma natal. Mas se você pronuncia “bí – os”, com tônica no “í”, como a maioria dos brasileiros, então use “u – éfi” mesmo que a gente entende.
Agora vamos adiante: afinal, o que é UEFI?
O que é UEFI
Segundo o < http://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface > verbete correspondente da Wikipedia (edição em inglês, tradução minha), UEFI é “uma especificação que define o software que atua como interface entre o sistema operacional e o “firmware” da plataforma”. Ou, simplificando: é uma especificação que define uma “camada” de software, ou seja, de rotinas de programação, que efetua a comunicação entre as rotinas do sistema operacional e aquelas que fazem parte do próprio hardware da máquina para acesso a este hardware e que estão gravadas em um CI de memória não volátil integrado ao próprio hardware (na placa-mãe, para ser específico). Ou, mais simplificadamente ainda: é um substituto para o BIOS, o sistema básico de entrada e saída.
Figura 2: logotipo do UEFI Forum
Ainda segundo a Wikipedia, a UEFI (sim, no feminino, afinal é uma interface unificada, pois não?) pode substituir os sistemas baseados em BIOS com vantagens, especialmente no que toca à segurança, já que permite que sejam adotadas proteções contra o ataque de programas mal intencionados (“malwares”), além de facilitar o acesso remoto ao computador para efetuar serviços de diagnósticos e, eventualmente, reparos, mesmo antes da carga do sistema operacional.
Já o próprio UEFI Fórum < http://www.uefi.org/about/ > define UEFI como “uma especificação que detalhará a interface que auxiliará um sistema operacional, como o Windows ou Linux, a controlar indiretamente o sistema para o ambiente pré-inicialização (ou seja, o sistema que atua no intervalo de tempo que vai do momento em que a máquina é ligada até a carga do sistema operacional). A UEFI fornece uma interface “limpa” entre o sistema operacional e o “firmware” da máquina durante o período de inicialização e fornecerá suporte a um mecanismo independente da arquitetura para inicializar placas controladoras de dispositivos”.
Sim, admito, a definição do UEFI Fórum é um tanto confusa, mas é a que eles fornecem. Então vamos ver se a coisa fica mais clara examinando a diferença, também conforme o mesmo Fórum, entre UEFI e BIOS. Segundo a página de respostas a perguntas frequentes do UEFI Fórum, o BIOS serviu como interface original entre SO e “firmware” nos computadores PC-XT e PC-AT, tendo sido atualizada ao longo dos anos na medida em que o mercado dos clones de PC se expandiu, mas jamais foi modernizada para atender as exigências do mercado. Já a UEFI define uma interface semelhante entre SO e “firmware”, constituída por “serviços de inicialização” (“boot services”) e “serviços em tempo de execução” (“runtime services”) mais genérica, não desenvolvida para uma arquitetura específica de processador.
Ainda segundo a seção de respostas a perguntas frequentes do UEFI Fórum, diferentemente do BIOS, a UEFI será uma especificação extremamente flexível. Ela tanto poderá ser implementada independentemente como poderá funcionar complementando os serviços do BIOS e até mesmo recorrendo a alguns serviços deste BIOS (como por exemplo o autoteste de partida, ou POST) em paralelo com seus próprios serviços.
Ainda parece complicado, pois não?
Será há alguém que explique isto de uma forma mais simples?
Desmistificando o UEFI
Sim, há quem explique de forma mais singela, já que na verdade a coisa é mais simples do que parece. Mas eu não poderia deixar de fornecer as definições e conceitos do UEFI Fórum. Afinal, eles são os “donos da bola” e, no que concerne à UEFI, ditam as regras.
Porém Sebastian Anthony, em seu artigo publicado na Extreme Tech, < http://www.extremetech.com/computing/96985-demystifying-uefi-the-long-overdue-bios-replacement > “Demystifying UEFI, the long-overdue BIOS replacement”, fornece uma descrição notavelmente concisa e precisa do que vem a ser a UEFI . A maioria dos conceitos que vocês lerão no restante deste tópico constam deste artigo.
Segundo Anthony, a UEFI é uma recriação completa do ambiente de inicialização de um computador. E a recriação foi tão completa que o resultado não apresenta qualquer semelhança com o BIOS que ela se destina a substituir.
Figura 3: EFI - Diagrama esquemático
Ao contrário do BIOS, que é uma monolítica peça de “firmware”, a UEFI é uma interface programável que se acomoda logo acima do hardware e “firmware” da máquina (e, de fato, se assim for desejado, pode assentar-se acima do próprio BIOS; veja esquema, obtido no artigo de Sebastian Anthony acima citado, na Figura 3). Porém, diferentemente do BIOS, cujas rotinas obrigatoriamente estão indissoluvelmente incorporadas a um dos circuitos de memória não volátil que fazem parte da placa-mãe, as da UEFI serão armazenadas em um diretório “/EFI/” localizado em um meio de armazenamento não volátil qualquer, que pode ser um CI da placa-mãe como o BIOS, mas também pode ser um disco rígido ou mesmo um dispositivo compartilhado em rede.
O resultado disto é que a UEFI funciona na prática como um pseudo sistema operacional. Na verdade, funcionalmente, se parece bastante com um sistema operacional simples, destes usados em certas máquinas portáteis e que permitem acesso à Internet e algumas funcionalidades limitadas e que podem ser carregados antes da carga do SO “principal” (muito usado em máquinas do tipo “netbook” para permitir acesso rápido a comunicações sem a necessidade de aguardar a carga do SO).
Quando um computador se inicializa usando a UEFI, um número arbitrário de ações são deflagradas, a última das quais consiste na carga do sistema operacional. Mas, antes disto, em virtude de facilidades previstas na especificação da UEFI e usando os “serviços de inicialização” e “serviços de tempo de execução” por ela definidos, podem ser estabelecidos protocolos de comunicação entre serviços, carregados gerenciadores de dispositivos e até mesmo lançada uma “UEFI shell”, ou uma interface entre a UEFI e o usuário, permitindo que este interaja com os serviços que estão sendo executados mesmo antes da carga do SO. Um destes serviços pode ser o “bootloader”, a rotina que, enfim, carrega o sistema operacional. Mas a UEFI é dotada de tal flexibilidade que, se for o caso, o usuário pode ter acesso a ela e a seus serviços mesmo antes da execução do “bootloader”, ou seja, sem que o sistema operacional esteja carregado, usando apenas as funcionalidades oferecidas pelos próprios serviços da UEFI.
É importante notar que a UEFI é totalmente baseada em software – razão pela qual ganhou a qualificação de “unificada”.
Como veremos adiante, já há variantes da UEFI em plena atividade. Elas têm sido usadas por praticamente todas as combinações de processadores de 32 e 64 bits com arquitetura ARM, Intel e AMD. Em cada caso, basta que as rotinas de carga do sistema sejam compiladas independentemente para cada SO. Atualmente, praticamente todo sistema operacional (o que inclui Windows, Linux e OS X) já oferece suporte para inicialização por UEFI e certamente suas versões futuras (como o Windows 8, em fase de desenvolvimento pela MS) serão baseadas em UEFI. Do Windows 8, por exemplo, sabe-se que ele apelará para as funcionalidades da UEFI para implementar uma forma de detectar tentativas de infecção por programas mal intencionados, como os “rootkits” usando a funcionalidade da UEFI conhecida como “secure boot” (“inicialização segura”). Mas hoje poucos são os SO que efetivamente tiram proveito da UEFI.
O que não impede que na próxima coluna vejamos exemplos de sistemas que usam inicialização baseadas em UEFI em vez de BIOS.
Até lá.