Carregador de inicialização

(Redirecionado de Bootloader)

Um carregador de inicialização (também chamado de bootloader, boot loader[1][2] ou bootstrap loader) é um programa de computador que é responsável por inicializar um computador e inicializar um sistema operacional. Se ele também fornece um menu interativo com várias opções de inicialização, então é frequentemente chamado de gerenciador de inicialização.[2]

GNU GRUB, um gerenciador de inicialização de código aberto popular
Gerenciador de inicialização do Windows

Quando um computador é desligado, seu softwar (incluindo sistemas operacionais, códigos de aplicativos e dados) permanece armazenado na memória que não é volátil. Quando o computador é ligado, ele normalmente não tem um sistema operacional ou seu carregador na memória de acesso aleatório (RAM). O computador primeiro executa um programa relativamente pequeno armazenado na ROM de inicialização, que é memória somente de leitura (ROM e, mais tarde, EEPROM, NOR flash) junto com alguns dados necessários, para inicializar dispositivos de hardware como CPU, placa-mãe, memória, armazenamento e outros dispositivos de E/S, para acessar o dispositivo não volátil (geralmente dispositivo de bloco, por exemplo, NAND flash) ou dispositivos dos quais os programas e dados do sistema operacional podem ser carregados na memória de acesso aleatório.

Alguns sistemas de computador mais antigos, ao receber um sinal de inicialização de um operador humano ou de um dispositivo periférico, podem carregar um número muito pequeno de instruções fixas na memória em um local específico, inicializar pelo menos uma CPU e, em seguida, apontar a CPU para as instruções e iniciar sua execução. Essas instruções normalmente iniciam uma operação de entrada de algum dispositivo periférico (que pode ser selecionável por chave pelo operador). Outros sistemas podem enviar comandos de hardware diretamente para dispositivos periféricos ou controladores de E/S que causam uma operação de entrada extremamente simples (como "ler o setor zero do dispositivo do sistema na memória começando no local 1000") a ser realizada, efetivamente carregando um pequeno número de instruções do carregador de inicialização na memória; um sinal de conclusão do dispositivo de E/S pode então ser usado para iniciar a execução das instruções pela CPU.

Computadores menores geralmente usam mecanismos de inicialização menos flexíveis, mas mais automáticos, para garantir que o computador inicie rapidamente e com uma configuração de software predeterminada. Em muitos computadores de mesa, por exemplo, o processo de inicialização começa com a CPU executando o software contido na ROM (por exemplo, o BIOS de um IBM PC ou um compatível com IBM PC) em um endereço predefinido (algumas CPUs, incluindo a série Intel x86, são projetadas para executar este software após a reinicialização, sem ajuda externa). Este software contém funcionalidade rudimentar para procurar dispositivos qualificados para participar da inicialização e carregar um pequeno programa de uma seção especial (mais comumente o setor de inicialização) do dispositivo mais promissor, normalmente começando em um ponto de entrada fixo, como o início do setor.

Carregador de inicialização de primeiro estágio

editar

Exemplos de carregadores de inicialização de primeiro estágio incluem BIOS, UEFI, coreboot, Libreboot e Das U-Boot. Ele inicializa dispositivos de hardware como CPU, placa-mãe, memória, armazenamento e outros dispositivos de E/S.

Carregador de inicialização de segundo estágio

editar

Carregadores de inicialização de segundo estágio, como GNU GRUB, rEFInd, BOOTMGR, Syslinux e NTLDR, não são sistemas operacionais propriamente ditos, mas são capazes de carregar um sistema operacional adequadamente e transferir a execução para ele; o sistema operacional subsequentemente se inicializa e pode carregar drivers de dispositivo extras.

Implementações de segundo estágio podem incluir interfaces de usuário interativas, permitindo a seleção de opções de inicialização e modificação de parâmetros. Eles lidam com o carregamento do núcleo, incluindo o processamento de imagens initrd/initramfs, e podem passar parâmetros de inicialização para o núcleo. Muitos implementam designs modulares que suportam módulos carregáveis ​​para funcionalidade adicional. Essas escolhas podem incluir diferentes sistemas operacionais (para inicialização dupla ou múltipla de diferentes partições ou unidades), diferentes versões do mesmo sistema operacional (no caso de uma nova versão ter problemas inesperados), diferentes opções de carregamento do sistema operacional (por exemplo, inicialização em um modo de resgate ou seguro) e alguns programas autônomos que podem funcionar sem um sistema operacional, como testadores de memória (por exemplo, memtest86+), um shell básico (como no GNU GRUB) ou até mesmo jogos.[3] Alguns carregadores de inicialização também podem carregar outros carregadores de inicialização; por exemplo, o GRUB carrega o BOOTMGR em vez de carregar o Windows diretamente. Normalmente, uma escolha padrão é pré-selecionada com um atraso de tempo durante o qual um usuário pode pressionar uma tecla para alterar a escolha; após esse atraso, a escolha padrão é executada automaticamente para que a inicialização normal possa ocorrer sem interação. Eles também podem lidar com compactação, verificação criptográfica e carregamento sequencial de outros carregadores de inicialização. O processo de inicialização pode ser considerado completo quando o computador estiver pronto para interagir com o usuário ou o sistema operacional for capaz de executar programas de sistema ou programas de aplicativos.

Computadores pessoais compatíveis com IBM

editar

BIOS de legado

editar

Em computadores x86, depois que o BIOS executa o autoteste de inicialização (POST), um carregador de inicialização de primeiro estágio que é um programa compacto de 512 bytes que reside no registro mestre de inicialização (MBR) é executado. Executando em modo real de 16 bits no endereço 0x7C00, ele localiza o carregador de inicialização de segundo estágio. Seu principal desafio está em realizar essas tarefas dentro de restrições de tamanho rígidas enquanto lida com potenciais falhas de hardware. O carregador de inicialização deve navegar pelas estruturas de disco, frequentemente implementando suporte ao sistema de arquivos FAT, e gerenciar a delicada transição do estado de inicialização do BIOS para um ambiente estável para o próximo estágio de inicialização.

Os carregadores de inicialização de MBR de primeiro estágio podem enfrentar restrições peculiares, especialmente em tamanho; por exemplo, no IBM PC anterior e compatíveis, um setor de inicialização normalmente deve funcionar com 510 bytes de código (ou menos) e em apenas 32 KiB[4][5] (posteriormente relaxado para 64 KiB[6]) de memória do sistema e usar apenas instruções suportadas pelos processadores 8088/8086 originais. O primeiro estágio dos carregadores de inicialização de PC (FSBL) localizados em discos fixos e unidades removíveis deve caber nos primeiros 446 bytes do registro mestre de inicialização para deixar espaço para a tabela de partição padrão de 64 bytes com quatro entradas de partição e a assinatura de inicialização de dois bytes, que o BIOS requer para um carregador de inicialização adequado — ou até menos, quando recursos adicionais como mais de quatro entradas de partição (até 16 com 16 bytes cada), uma assinatura de disco (6 bytes), um registro de data e hora do disco (6 bytes), uma partição ativa avançada (18 bytes) ou carregadores de inicialização múltipla especiais também precisam ser suportados em alguns ambientes.

Em registros de inicialização de volumes de disquetes e superdisquetes, até 59 bytes são ocupados para o bloco de parâmetros do BIOS estendido (EBPB) em volumes FAT12 e FAT16 desde o DOS 4.0, enquanto o EBPB do FAT32 introduzido com o DOS 7.1 requer até 87 bytes, deixando apenas 423 bytes para o carregador de inicialização ao assumir um tamanho de setor de 512 bytes. Os setores de inicialização da Microsoft, portanto, tradicionalmente impunham certas restrições ao processo de inicialização. Por exemplo, o arquivo de inicialização tinha que estar localizado em uma posição fixa no diretório raiz do sistema de arquivos e armazenado em setores consecutivos,[7][8] condições atendidas pelo comando SYS e ligeiramente relaxadas em versões posteriores do DOS.[8][nb 1] O carregador de inicialização foi então capaz de carregar os três primeiros setores do arquivo na memória, que por acaso continha outro carregador de inicialização incorporado capaz de carregar o restante do arquivo na memória.[8] Quando a Microsoft adicionou o endereçamento de bloco lógico (LBA) e o suporte a FAT32, eles mudaram para um carregador de inicialização alcançando mais de dois setores físicos, usando 386 instruções por razões de tamanho. Ao mesmo tempo, outros fornecedores conseguiram espremer muito mais funcionalidade em um único setor de inicialização sem relaxar as restrições originais em apenas memória mínima disponível (32 KiB) e suporte ao processador (8088/8086).[nb 2] Por exemplo, os setores de inicialização do DR-DOS são capazes de localizar o arquivo de inicialização nos sistemas de arquivos FAT12, FAT16 e FAT32 e carregá-lo na memória como um todo via CHS ou LBA, mesmo se o arquivo não estiver armazenado em um local fixo e em setores consecutivos.[9][4][10][11][12][nb 3][nb 2]

Em computadores x86, os carregadores de inicialização de segundo estágio, como o registro de inicialização da partição (PBR), operam sem a limitação estrita de 512 bytes de seus equivalentes de primeiro estágio. Eles são executados em um ambiente mais sofisticado, geralmente variando de 8 KB a vários megabytes de tamanho. Esse espaço expandido permite a implementação de recursos complexos, como suporte ao sistema de arquivos, configuração de tempo de execução e interfaces de menu do carregador de inicialização. O carregador de inicialização de segundo estágio não precisa de drivers para sua própria operação, mas pode usar métodos genéricos de acesso ao armazenamento fornecidos pelo firmware do sistema, como o BIOS, embora normalmente com funcionalidade de hardware restrita e desempenho inferior.[13]

Em computadores x86, os carregadores de inicialização de terceiro estágio incluem IO.SYS, NTLDR, BOOTMGR e GRUB.

UEFI (exceto para inicialização em CSM) não depende de setores de inicialização, ele carrega o bootloader de próximo estágio (como BOOTMGR e GRUB2) diretamente da partição de sistema da EFI.

Carregadores de inicialização integrados e de vários estágios

editar

Muitos sistemas embarcados devem inicializar imediatamente. Por exemplo, esperar um minuto para que uma televisão digital ou um dispositivo de navegação GPS inicie é geralmente inaceitável. Portanto, esses dispositivos têm sistemas de software em ROM ou memória flash para que o dispositivo possa começar a funcionar imediatamente; pouco ou nenhum carregamento é necessário, porque o carregamento pode ser pré-computado e armazenado na ROM quando o dispositivo é feito.

Sistemas grandes e complexos podem ter procedimentos de inicialização que prosseguem em várias fases até que finalmente o sistema operacional e outros programas sejam carregados e estejam prontos para execução. Como os sistemas operacionais são projetados como se nunca iniciassem ou parassem, um carregador de inicialização pode carregar o sistema operacional, configurar-se como um mero processo dentro desse sistema e, em seguida, transferir irrevogavelmente o controle para o sistema operacional. O carregador de inicialização então termina normalmente como qualquer outro processo faria.

Mais precisamente, um carregador de inicialização é usado para inicializar um sistema operacional. Os primeiros dispositivos, como TVs e leitores de DVD nos anos 2000, podem não oferecer o sistema operacional e podem não oferecer o carregador de inicialização, mas geralmente oferecem o firmware proprietário.

Inicialização de rede

editar

A maioria dos computadores também é capaz de inicializar por uma rede de computadores. Neste cenário, o sistema operacional é armazenado no disco de um servidor, e certas partes dele são transferidas para o cliente usando um protocolo simples, como o Protocolo de Transferência De Arquivos Trivial (TFTP). Após essas partes terem sido transferidas, o sistema operacional assume o controle do processo de inicialização.

Assim como no carregador de inicialização de segundo estágio, a inicialização de rede começa usando métodos genéricos de acesso à rede fornecidos pela ROM de inicialização da interface de rede, que normalmente contém uma imagem do ambiente de execução de pré-inicialização (PXE). Nenhum driver é necessário, mas a funcionalidade do sistema é limitada até que o núcleo e os drivers do sistema operacional sejam transferidos e iniciados. Como resultado, uma vez que a inicialização baseada em ROM tenha sido concluída, é totalmente possível inicializar a rede em um sistema operacional que não tem a capacidade de usar a interface de rede.

Ver também

editar
  1. O manual do PC DOS 5.0 afirma incorretamente que os arquivos do sistema não precisam mais ser contíguos. No entanto, para que o processo de inicialização funcione, os arquivos do sistema ainda precisam ocupar as duas primeiras entradas de diretório e os três primeiros setores do IBMBIO.COM ainda precisam ser armazenados contíguos. O SYS continua a cuidar desses requisitos.
  2. a b Por exemplo, embora a funcionalidade estendida dos MBRs e setores de inicialização do DR-DOS, em comparação com suas contrapartes MS-DOS/PC DOS, ainda pudesse ser alcançada utilizando técnicas convencionais de otimização de código até a versão 7.05, para a adição de suporte a LBA, FAT32 e LOADER, os setores da versão 7.07 tiveram que recorrer a código automodificável, programação em nível de código de operação, utilização controlada de efeitos colaterais, sobreposição de dados/código em vários níveis e técnicas de dobramento algorítmico para comprimir tudo em um único setor físico, pois era um requisito para compatibilidade com versões anteriores e cruzadas com outros sistemas operacionais em cenários de inicialização múltipla e carregamento sequencial.
  3. Há uma exceção à regra de que os VBRs do DR-DOS carregarão o arquivo IBMBIO.COM inteiro na memória: se o arquivo IBMBIO.COM for maior que 29 KB, tentar carregar o arquivo inteiro na memória resultaria no carregador de inicialização para sobrescrever a pilha e a tabela de parâmetros de disco realocada (DPT/FDPB). Portanto, um VBR do DR-DOS 7.07 carregaria apenas os primeiros 29 KB do arquivo na memória, contando com outro carregador incorporado na primeira parte do IBMBIO.COM para verificar essa condição e carregar o restante do arquivo na memória por si só, se necessário. Isso não causa problemas de compatibilidade, pois o tamanho do IBMBIO.COM nunca excedeu esse limite em versões anteriores sem esse carregador. Combinado com uma estrutura de entrada dupla, isso também permite que o sistema seja carregado por um VBR do PC DOS, que carregaria apenas os três primeiros setores do arquivo na memória.

Referências

editar
  1. «GNU GRUB - GNU Project - Free Software Foundation (FSF)». www.gnu.org (em inglês). Consultado em 27 de setembro de 2021 
  2. a b «systemd-boot». www.freedesktop.org (em inglês). Consultado em 27 de setembro de 2021 
  3. «Tint» (em inglês). coreboot. Consultado em 20 de novembro de 2010 
  4. a b Paul, Matthias R. (2 de outubro de 1997) [29-09-1997]. «Caldera OpenDOS 7.01/7.02 Update Alpha 3 IBMBIO.COM - README.TXT and BOOT.TXT - A short description of how OpenDOS is booted». Consultado em 29 de março de 2009. Arquivado do original em 4 de outubro de 2003  [1]
  5. Sakamoto, Masahiko (13 de maio de 2010). «Why BIOS loads MBR into 7C00h in x86?». glamenv-septzen.net (em inglês). Consultado em 22 de agosto de 2012 
  6. Compaq computer corporation; Phoenix technologies ltd; Intel corporation (11 de janeiro de 1996). «BIOS boot specification 1.01» (PDF) (em inglês). Consultado em 21 de dezembro de 2017 
  7. Zbikowski, Mark; Allen, Paul; Ballmer, Steve; Borman, Reuben; Borman, Rob; Butler, John; Carroll, Chuck; Chamberlain, Mark; Chell, David; Colee, Mike; Courtney, Mike; Dryfoos, Mike; Duncan, Rachel; Eckhardt, Kurt; Evans, Eric; Farmer, Rick; Gates, Bill; Geary, Michael; Griffin, Bob; Hogarth, Doug; Johnson, James W.; Kermaani, Kaamel; King, Adrian; Koch, Reed; Landowski, James; Larson, Chris; Lennon, Thomas; Lipkie, Dan; McDonald, Marc; McKinney, Bruce; Martin, Pascal; Mathers, Estelle; Matthews, Bob; Melin, David; Mergentime, Charles; Nevin, Randy; Newell, Dan; Newell, Tani; Norris, David; O'Leary, Mike; O'Rear, Bob; Olsson, Mike; Osterman, Larry; Ostling, Ridge; Pai, Sunil; Paterson, Tim; Perez, Gary; Peters, Chris; Petzold, Charles; Pollock, John; Reynolds, Aaron; Rubin, Darryl; Ryan, Ralph; Schulmeisters, Karl; Shah, Rajen; Shaw, Barry; Short, Anthony; Slivka, Ben; Smirl, Jon; Stillmaker, Betty; Stoddard, John; Tillman, Dennis; Whitten, Greg; Yount, Natalie; Zeck, Steve (1988). «Technical advisors». The MS-DOS Encyclopedia: versions 1.0 through 3.2. Por Duncan, Ray; Bostwick, Steve; Burgoyne, Keith; Byers, Robert A.; Hogan, Thom; Kyle, Jim; Letwin, Gordon; Petzold, Charles; Rabinowitz, Chip; Tomlin, Jim; Wilton, Richard; Wolverton, Van; Wong, William; Woodcock, JoAnne Completely reworked ed. Redmond, Washington, USA: Microsoft Press (em inglês). ISBN 1-55615-049-0. LCCN 87-21452. OCLC 16581341  (xix+1570 pages; 26 cm) (NB. Esta edição foi publicada em 1988 após uma extensa reformulação da primeira edição retirada de 1986 por uma equipe diferente de autores. [2])
  8. a b c Chappell, Geoff (janeiro de 1994). «Chapter 2: The system footprint». In: Schulman, Andrew; Pedersen, Amorette. DOS Internals. Col: The Andrew Schulman programming series (em inglês) 1st printing, 1st ed. [S.l.]: Addison-Wesley. ISBN 978-0-201-60835-9  (xxvi+738+iv pages, 3.5"-floppy [3][4]) Errata: [5][6][7]
  9. {{Cite magazine|title=DR DOS 5.0 - The better operating system?|author-first=Winn L.|author-last=Rosch|magazine=PC Magazine|date=12-02-1991|volume=10|number=3|pages=241–246, 257, 264, 266|url=https://books.google.com/books?id=YxFTezF9-sMC&pg=PT250%7Caccess-date=26-07-2019%7Curl-status=live%7Carchive-url=https://archive.today/20190725223320/https://books.google.nl/books?id=YxFTezF9-sMC&pg=PT250&lpg=PT250&redir_esc=y%23v=onepage&q&f=false%7Carchive-date=2019-07-25%7Cquote=[…] O SYS foi melhorado no DR DOS 5.0 para que você não precise se preocupar em deixar o primeiro cluster livre em um disco que você deseja tornar inicializável. Os arquivos de sistema do DR DOS podem ser localizados em qualquer lugar do disco, então qualquer disco com espaço livre suficiente pode ser configurado para inicializar seu sistema. […] }] (NB. A fonte atribui isso ao utilitário SYS, enquanto na verdade esse é um recurso do carregador de inicialização avançado no setor de inicialização. O SYS apenas planta esse setor no disco.
  10. Paul, Matthias R. (17 de janeiro de 2001). «FAT32 in DR-DOS». opendos@delorie (em inglês). Consultado em 6 de outubro de 2017. Cópia arquivada em 6 de outubro de 2017. O setor de inicialização do DR-DOS […] procura o arquivo IBMBIO.COM (DRBIOS.SYS) e então carrega o arquivo *inteiro* na memória antes de passar o controle para ele. […] 
  11. Paul, Matthias R. (20 de fevereiro de 2002). «Can't copy». opendos@delorie (em inglês). Consultado em 9 de outubro de 2017. Cópia arquivada em 6 de outubro de 2017. […] O setor de inicialização do DR-DOS carrega todo o arquivo IBMBIO.COM na memória antes de executá-lo. Ele não se importa nem um pouco com o arquivo IBMDOS.COM, que é carregado pelo IBMBIO.COM. […] O setor de inicialização do DR-DOS […] encontrará os […] arquivos do núcleo, desde que estejam armazenados logicamente no diretório raiz. Sua localização física no disco, e se estão fragmentados ou não, não importa para o setor de inicialização do DR-DOS. Portanto, você pode simplesmente copiar os arquivos do núcleo para o disco (mesmo com um simples COPY), e assim que o setor de inicialização for um setor do DR-DOS, ele os encontrará e os carregará. Claro, é difícil colocar tudo isso em apenas 512 bytes, o tamanho de um único setor, mas esta é uma grande melhoria de conveniência se você tiver que configurar um sistema DR-DOS, e também é a chave para o utilitário DR-DOS multi-OS LOADER funcionar. Os arquivos do núcleo do MS-DOS devem residir em locais específicos, mas os arquivos do DR-DOS podem estar em qualquer lugar, então você não precisa trocá-los fisicamente toda vez que inicializar o outro SO. Além disso, ele permite atualizar um sistema DR-DOS simplesmente copiando os arquivos do núcleo sobre os antigos, sem necessidade de SYS, sem procedimentos de configuração difíceis como os exigidos para MS-DOS/PC DOS. Você pode até ter vários arquivos do núcleo do DR-DOS sob diferentes nomes de arquivo armazenados na mesma unidade, e o LOADER alternará entre eles de acordo com os nomes de arquivo listados no arquivo BOOT.LST. […] 
  12. Paul, Matthias R. (14 de agosto de 2017) [07-08-2017]. «The continuing saga of Windows 3.1 in enhanced mode on OmniBook 300». MoHPC - the museum of HP calculators (em inglês). Consultado em 6 de outubro de 2017. Cópia arquivada em 6 de outubro de 2017. […] o FDISK do DR-DOS não apenas particiona um disco, mas também pode formatar os volumes recém-criados e inicializar seus setores de inicialização de uma só vez, então não há risco de acidentalmente bagunçar o volume errado e não há necessidade de FORMAT /S ou SYS. Depois, você pode simplesmente copiar os arquivos DR-DOS restantes, incluindo os arquivos de sistema. É importante saber que, em contraste com o MS-DOS/PC DOS, o DR-DOS tem setores de inicialização "inteligentes" que realmente "montarão" o sistema de arquivos para procurar e carregar os arquivos de sistema no diretório raiz em vez de esperar que eles sejam colocados em um determinado local. Fisicamente, os arquivos de sistema podem estar localizados em qualquer lugar e também podem ser fragmentados. […] 
  13. «Chapter 6 - Troubleshooting startup and disk problems». Windows NT server resource kit (em inglês). [S.l.]: Microsoft. Cópia arquivada em 15 de maio de 2007