Entendendo o boot do Windows, Linux e OS X

Excelente texto de autoria de André Machado e publicado em 28 de setembro de 2011 às 13h26 no site: Hardware.com.br (http://www.hardware.com.br/artigos/entendendo-boot-windows-linux-osx/) que transcrevo para este blog, para fins didáticos, reservando todos os direitos autorais àquele acima mencionado.

“Introdução

O boot é o processo de inicialização que carrega o sistema operacional para a memória de um computador quando este é ligado. Para alguns, ele dura apenas alguns segundos; para outros, vários minutos; para alguns, ele se resume a uma bela tela com animações; para outros, a um amontoado de texto que corre pela tela em uma velocidade difícil de acompanhar. Seja como for o processo de boot de seu computador – ou do computador de seu cliente – é importante para o técnico em informática entender (ou pelo menos ter um leve conhecimento) do que acontece por detrás daquela bela tela de apresentação. Conhecer os estágios e processos que ocorrem durante o boot pode ser de extrema importância na hora de resolver problemas que impedem a correta inicialização do equipamento, evitando medidas extremas e muitas vezes desnecessárias, como a formatação do HD. Assim, neste texto, vamos explicar brevemente os estágios do boot de vários sistemas operacionais. Esperamos que as informações aqui contidas sejam úteis e que sirvam para ampliar a bagagem intelectual do leitor.

 

Ligando o computador

Quando acionamos o botão “Power”, a fonte de alimentação fornece energia elétrica para a placa mãe. Neste momento, o BIOS, acrônimo para Basic Input/Output System realiza o famoso teste POST, no qual verifica se todos os periféricos, discos e componentes pendurados no computador estão funcionando corretamente.

Caso haja algum erro nesse estágio, a imagem não irá para o monitor e a placa mãe emitirá uma sequência de bips. Caberá ao técnico, então, interpretar a mensagem transmitida e diagnosticar e corrigir o problema. As principais causas de erro nesse estágio que levam à execução dos bips são problemas nos pentes de memória ou na placa de vídeo, podendo ter outras variadas causas.

Caso o erro não seja tão grave a ponto de impedir o início do computador, a BIOS emitirá uma mensagem de texto na tela, como a famosa “Teclado não encontrado, pressione F1 para continuar” (o que na verdade significa que o usuário deverá primeiro conectar o teclado e, só então, pressionar F1).

Assim que o teste POST for concluído com sucesso, a BIOS lê o primeiro setor do disco rígido definido como primário em seu programa de setup. Caso encontre um setor de boot válido, ela irá carregar seu código para o segmento de memória 7C00h e gentilmente ceder o controle completo do hardware para o sistema operacional. Se nenhum sistema válido for encontrado, a BIOS continuará procurando-o nos outros dispositivos da lista definida no setup e, se falhar em todos eles, emitirá uma mensagem de erro solicitando para que o usuário insira um disco com um sistema válido.

Em CDs e DVDs, o setor de boot fica em uma faixa especial no início do disco. É por esse motivo que as distribuições de Linux e os outros sistemas operacionais são distribuídos na forma de imagens ISO, pois este formato cria uma cópia bit a bit do disco, preservando o setor. Muitos usuários inadvertidos, porém, extraem o conteúdo da imagem com um utilitário de compressão de arquivos e gravam seu conteúdo na mídia como um disco de dados comum perdendo, dessa forma, a informação do setor de boot.

Uma vez que a BIOS tenha encontrado um sistema operacional, o que acontece agora depende do sistema instalado.

MS-DOS

O velho MS-DOS precisa apenas dos arquivos IO.SYS, MSDOS.SYS e COMMAND.COM para iniciar. O AUTOEXEC.BAT e o CONFIG.SYS são opcionais.

O primeiro arquivo a ser carregado é o IO.SYS que, como o próprio nome sugere, é o responsável pelas operações de entrada e de saída. O próximo arquivo é o MSDOS.SYS, que é o núcleo do sistema DOS, sendo responsável pelo gerenciamento da memória e do processador. Uma vez carregado, o MSDOS.SYS lê o arquivo CONFIG.SYS em busca de um interpretador de comandos e, caso o encontre, carrega-o na memória. Se o arquivo CONFIG.SYS não existir ou se o nome do interpretador não for especificado, o MSDOS.SYS carregará o COMMAND.COM e o tomará como interpretador padrão. Caso o COMMAND.COM encontre um arquivo AUTOEXEC.BAT na raiz da unidade C:, ele executará os comandos nele contidos antes de exibir o prompt ao usuário.

Windows 9x

O boot do Windows 95/98 é muito similar ao do DOS, mas com algumas diferenças significativas. A começar pelo fato de que o arquivo IO.SYS é uma mistura do IO.SYS. do MSDOS.SYS, do CONFIG.SYS e do AUTOEXEC.BAT originais. O IO.SYS dessas versões contém todas as instruções necessárias para que o sistema interaja com o hardware, carrega alguns comandos padrão do CONFIG.SYS e do AUTOEXEC.BAT e controla muito do resto da sequência de boot.

Apesar de o IO.SYS já possuir os seus próprios arquivos de configuração embutidos, após carrega-los na memória, ele lê o MSDOS.SYS que, ao contrário das versões anteriores, agora é um arquivo de texto editável que controla muitas opções de inicialização do Windows.

Depois de ler o MSDOS.SYS, IO.SYS lê o Registro do sistema, que está armazenado em dois arquivos na pasta do Windows, chamados USER.DAT e SYSTEM.DAT. Após sua leitura, são criadas cópias de backup desses arquivos que são utilizadas na hipótese de o Registro não puder ser carregado normalmente em uma próxima inicialização.

O próximo passo é carregar os arquivos COMMAND.COM, CONFIG.SYS e AUTOEXEC.BAT. Os dois últimos arquivos não são necessários para o boot do sistema, mas se estiverem presentes, o CONFIG.SYS pode ser utilizado para carregar drivers para o MS-DOS. Por fim, após carregar o AUTOEXEC.BAT, o sistema carrega a interface gráfica através do WIN.COM.

Windows NT/2000/XP/2003

Após o teste POST, um driver de carregamento do sistema operacional chamado NTLDR instrui o processador para converter-se do modo real para o modo protegido. Drivers de sistema apropriados, embutidos no próprio NTLDR, são iniciados e identificam os sistemas de arquivo presentes no disco.

O carregador de boot dá ao usuário a oportunidade de escolher o sistema desejado, caso haja mais de um presente. O sistema procura pelo NTLDR no diretório raiz ao ler o arquivo boot.ini e ao invocar o arquivo NTDETECT.COM.

O arquivo BOOT.INI é um arquivo de texto plano oculto e somente leitura localizado na raiz da unidade na qual o Windows está instalado. Ele é dividido nas seções [boot loader] e [operating systems]. Na primeira seção. São definidos quanto tempo o menu com opções de boot deverá ser exibido na tela e qual o sistema operacional padrão a ser carregado caso o usuário não faça nenhuma escolha nesse período. A segunda seção é utilizada para listar e para especificar os sistemas instalados na máquina.

Embora seja possível editar manualmente o BOOT.INI, a maneira correta de se alterar o arquivo é através das opções do Painel de Controle.

Nesse ponto, o NTDETECT.COM recolhe informações sobre o sistema e dispositivos a ele conectados. Tais informações são posteriormente incluídas na chave HKLM\HARDWARE do Registro.

Após o recolhimento de informações são carregados o kernel do sistema, através do programa NTOSKRNL.EXE e a camada de abstração de hardware pelo HAL.DLL. Essa parte é realmente muito rápida e corresponde à famosa barrinha de texto na parte inferior da tela antes da tela de inicialização do Windows. A chave do Registro HKLM\SYSTEM é carregada e o NTLDR carrega os drivers de dispositivo com um valor de 0x0.

Agora, quando a tela de boot do Windows aparece, a chave HKLM\HARDWARE é finalmente criada com as informações recolhidas do estágio anterior. Um conjunto clone de referências do sistema é criado e permanece inalterado dentro da subchave HKLM\SYSTEM\Select. O kernel inicia os dispositivos após ler o conteúdo de HKLM\SYSTEM\CurrentControlSet.

É aqui que pode ocorrer a maioria dos erros de inicialização do Windows. Há quatro níveis de valores de controle de erro. Com um valor de erro 0x0, o boot continua normalmente; um erro 0x1 faz com que o boot continue, mas exiba mensagens de erro na tela; caso o erro seja 0x3. O processo de boot é interrompido e o sistema reinicia automaticamente usando a última configuração válida; mas se o erro for 0x4 o processo será interrompido e será feita uma tentativa de reiniciar como 0x3. A famosa mensagem que pergunta ao usuário qual configuração usar antes de iniciar o Windows apenas é exibida se o control set LastKnowGood estiver defeituoso.

Após os dispositivos serem carregados, o Gerenciador de Sessão smss.exe carrega os subsistemas e serviços que estão definidos para serem iniciados imediatamente. Por fim, o subsistema Win32 inicia o WinLogon.exe e a Autoridade de Segurança Local lsass.exe. O controlador de serviço lê a chave HKLM\SYSTEM\Set\Services para todas as entradas de serviços a serem iniciados, bem como as chaves DependOnGroup e DependOnService. O processo de boot do Windows NT só é considerado completo quando um usuário faz login no sistema.

Windows Vista/Server 2008/7

O processo de inicialização do Windows Vista e superiores difere do XP/2003 na forma que o sistema é localizado e inicializado. A inicialização começa com a BIOS carregando a MBR no disco inicializável. A MBR carrega o Partition Boot Record (PBR) na partição ativa. Até agora, o Windows permanece relativamente inalterado.

O Windows Vista é diferente do XP começando pelo fato de que o código da PBR escrito pelo Windows Vista não procura mais pelo NTLDR. O novo carregador de boot do Vista é o Bootmgr. Esse componente carrega o Boot Configuration Database (BCD), que por sua vez carrega um aplicativo de carregamento do sistema operacional (Winload.exe, no caso do Windows Vista). Finalmente, o OS loader é responsável por inicializar o kernel. As informações anteriormente presentes no BOOT.INI agora estão armazenadas no BCD e podem ser alteradas através do utilitário de linha de comando BCDEdit.

Windows 8

O Windows 8 trará uma grande mudança no tangente ao processo de inicialização ao abandonar a tecnologia BIOS, surgida nos anos 80, a favor do UEFI, desenvolvida por um consórcio de empresas de tecnologia que incluem, além da Microsoft, nomes como AMD, Intel, Lenovo, AMI e Phoenix. Dentre as vantagens alegadas, podemos citar uma experiência de boot mais agradável, segura e rápida. Como a tecnologia ainda está em desenvolvimento, ainda não dispomos de informações detalhadas e precisas sobre seu processo de boot, mas certamente traremos mais informações em um futuro artigo.

Linux

Debalde as personalizações feitas pelas inúmeras distribuições de Linux existentes no mercado, em termos gerais o boot do sistema livre se dá em quatro estágios distintos.

No primeiro estágio, a BIOS carrega o gerenciador de boot presente na MBR, em geral o GRUB ou o LILO. No segundo estágio, geralmente é apresentada uma tela a qual permite que o usuário selecione o sistema operacional desejado. Após a escolha, o kernel selecionado é carregado na memória e assume o controle da máquina. Nesse instante, algumas informações sobre o disco e a partição na qual está o kernel, como seu sistema de arquivos, são exibidas na tela.

No momento em que o Kernel assume o controle da máquina, ele exibe algumas informações obtidas da BIOS e do hardware. Essa fase geralmente é muito rápida e não pode ser acompanhada pelo usuário.

A seguir, o kernel Linux inicia o hardware fundamental do sistema, como portas, teclado e mouse. Outros itens, como discos rígidos e placas de rede, são minimamente configurados.

Depois que o hardware inicial for identificado e a partição que contém o sistema for montada, o kernel carregará o processo init, que será responsável por iniciar todos os outros daemons e configurações avançadas. Neste ponto, as demais partições do /etc/fstab serão montadas. Por fim, o resto dos daemons será carregado e o usuário terá acesso ao prompt de login ou ao ambiente gráfico.

Mac OS X

O boot do OS X é um dos mais complexos que vimos até então. Ao contrário dos PCs atuais, o Mac OS X não utiliza a BIOS para se iniciar, mas, sim, a EFI. Ao ligar o seu Mac, o código do OpenFirmware é executado, informações sobre o hardware são coletadas e o hardware é inicializado. Após isso, o sistema operacional é selecionado para o boot, podendo também surgir uma tela para que o usuário escolha a ação que deseja tomar.

Uma vez que o OS X tenha sido selecionado, o controle do computador passa para o arquivo /System/Library/CoreServices/BootX, que é o bootloader que carregará o kernel XNU.

BootX tenta, então, carregar uma lista em cache de drivers de dispositivos e, após, a rotina init do kernel é executada. Neste ponto, o dispositivo raiz que está iniciando é executado e o OpenFirmware torna-se inacessível.

Após, várias estruturas de dados Mach/BSD são iniciadas pelo kernel, seguido pelo kit de entrada e saída e o serviço /sbin/mach_init, que mapeia os nomes de serviço e as portas Mach que fornecem acesso a eles.

A partir desse momento, o processo de inicialização ocorre em nível de usuário: mach_init carrega o tradicional /sbin/init do BSD, que determina o runlevel e executa o /etc/rc.boot, que configura a máquina suficientemente para rodar um único usuário e entende qual é o tipo de boot que ele deve realizar (pela rede, pelo CD…). Se rc.boot sair com sucesso, ele inicia o script de boot multiusuário /etc/rc, que monta os sistemas de arquivo locais, assegura-se de que o diretório /private/var/tmp existe e executa o arquivo /etc/rc.installer_cleanup, deixado por algum instalador antes do reboot, se existir. Esse arquivo é de fundamental importância e controla praticamente todo o restante do processo de boot do OS X.

Conclusão

É importante para o técnico saber o que acontece na máquina durante sua inicialização pois, assim, ele poderá diagnosticar e reparar, de forma mais eficiente, os problemas que aparecerem.”

Texto de : http://www.hardware.com.br/artigos/entendendo-boot-windows-linux-osx/

2011 10 05

Anúncios