Saltar para o conteúdo

Carregador de inicialização

Origem: Wikipédia, a enciclopédia livre.
GNU GRUB, um gerenciador de inicialização de código aberto popular.

Um carregador de inicialização[a] é um programa de computador responsável por inicializar um computador. Se ele também fornece um menu interativo com múltiplas opções de inicialização, então é frequentemente chamado de gerenciador de inicialização[b].[2]

Quando um computador está desligado, seu software‍ (incluindo sistemas operacionais, código de aplicativo e dados‍) permanece armazenado em memória não volátil. Quando o computador está ligado, ele normalmente não tem um sistema operacional ou seu carregador na memória de acesso aleatório (M.A.A.)[c]. O computador primeiro executa um programa relativamente pequeno armazenado na memória somente de leitura (M.S.L.)[d] (e depois na memória somente de leitura programável apagável eletricamente (M.S.L.P.A.E.)[e], NOR flash) junto com alguns dados necessários, para inicializar a memória de acesso aleatório (M.A.A.)[c] (especialmente em sistemas x86), para acessar o dispositivo que não é volátil (geralmente dispositivo de bloco como flash NAND, por exemplo) ou dispositivos a partir dos quais os programas e dados do sistema operacional podem ser carregados na memória de acesso aleatório (M.A.A.)[c].

Alguns sistemas de computador anteriores, 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 unidade de processamento central (U.P.C.)[f] e, em seguida, apontar a unidade de processamento central (U.P.C.)[f] para as instruções e iniciar suas execuções. Essas instruções normalmente iniciam uma operação de entrada a partir de algum dispositivo periférico (que pode ser selecionado por chave pelo operador). Outros sistemas podem enviar comandos de hardware diretamente para dispositivos periféricos ou controladores de entrada/saída (E/S)[g] que fazem com que uma operação de entrada extremamente simples (como "ler o setor zero do dispositivo do sistema na memória começando no local 1000") seja executada, carregando efetivamente um pequeno número de instruções do carregador de inicialização na memória; um sinal de conclusão do dispositivo de entrada/saída (E/S)[g] pode então ser usado para iniciar a execução das instruções pela unidade de processamento central (U.P.C.)[f].

Computadores menores geralmente usam mecanismos de carregador de inicialização menos flexíveis, mas mais automáticos, para garantir que o computador seja iniciado rapidamente e com uma configuração de software predeterminada. Em muitos computadores de mesa, por exemplo, o processo de inicialização[h] começa com a unidade de processamento central (U.P.C.)[f] executando o software contido na memória somente de leitura (M.S.L.)[d] (o Sistema básico de entrada/saída (S.B.E.S.)[i] de um Computador pessoal da Corporação de Máquinas para negócios internacionais (IBM PC)[j] ou compatível, por exemplo) em um endereço predefinido (algumas unidades de processamento central (U.P.C.)[f], 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 funcionalidades rudimentares 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 iniciando em um ponto de entrada [en] fixo, como o início do setor.

Carregador de inicialização de primeiro estágio

[editar | editar código-fonte]

Os carregadores de inicialização podem enfrentar restrições peculiares, especialmente em tamanho; por exemplo, no Computador pessoal da Corporação de Máquinas para negócios internacionais (IBM PC)[j] anterior e compatíveis, um setor de inicialização normalmente deve funcionar com 510 bytes de código (ou menos) e em apenas 32 kibibytes (KiB)[3][4] (mais tarde relaxado para 64 kibibytes (KiB)[5]) de memória do sistema e usar apenas instruções suportadas pelo processadores 8088/8086 originais. O primeiro estágio dos carregadores de inicialização do Computador pessoal (C.P.) (C.I.P.S., carregador de inicialização de primeiro estágio)[k] localizados em discos fixos e unidades removíveis [en] deve caber nos primeiros 446 bytes do registro de inicialização mestre (R.I.M.)[l]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 [en] de dois bytes, que o Sistema básico de entrada/saída (S.B.E.S.)[i] requer para um carregador de inicialização adequado — ou ainda menos, quando recursos adicionais como mais de quatro entradas de partição (até 16 com 16 bytes cada), uma assinatura de disco [en] (6 bytes) , um registro de data e hora de disco [en] (6 bytes), uma partição ativa avançada [en] (18 bytes) ou carregadores de inicialização múltipla especiais também devem ser suportados em alguns ambientes. Em registros de inicialização de volume de disquetes e super disquetes [en], até 59 bytes são ocupados para o Bloco de parâmetro do Sistema básico de entrada/saída (S.B.E.S.) estendido (B.P.S.E.)[m] nos volumes FAT12 e FAT16 desde o DOS 4.0, enquanto o Bloco de parâmetro do Sistema básico de entrada/saída (S.B.E.S.) estendido (B.P.S.E.)[m] da FAT32 [en] 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 no 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 como setores consecutivos,[6][7] condições tomadas pelo comando SYS [en] e ligeiramente relaxadas em versões posteriores do DOS.[7][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 embutido capaz de carregar o restante do arquivo na memória.[7] Quando a Microsoft adicionou suporte a Endereçamento de bloco lógico (E.B.L.)[n] e FAT32, eles até mudaram para um carregador de inicialização atingindo mais de dois setores físicos e usando 386 instruções por motivos de tamanho. Ao mesmo tempo, outros fornecedores conseguiram espremer muito mais funcionalidades em um único setor de inicialização sem relaxar as restrições originais em apenas memória mínima disponível (32 kibibytes (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 no sistema de arquivos FAT12, FAT16 e FAT32 e o carregar na memória como um todo via cilindro-cabeça-setor (C.C.S.)[o] ou endereçamento de bloco lógico (E.B.L.)[n], mesmo que o arquivo não esteja armazenado em um local fixo e em setores consecutivos.[8][3][9][10][11][nb 3][nb 2]

O Sistema básico de entrada/saída (S.B.E.S.)[i] e a Interface de firmware extensível unificada (I.F.E.U.)[p] não só podem carregar um ou mais sistema(s) operacional(is) a partir de um dispositivo que não é volátil, mas também podem inicializar o hardware do sistema para um ou mais sistema(s) operacional(is).

Exemplos de carregadores de inicialização de primeiro estágio incluem o Sistema básico de entrada/saída (S.B.E.S.)[i], a Interface de firmware extensível unificada (I.F.E.U.)[p], coreboot, Libreboot, e Das U-Boot [en].

Carregador de inicialização de segundo estágio

[editar | editar código-fonte]

Os carregadores de inicialização de segundo estágio, como o GNU GRUB, o rEFInd [en], o BOOTMGR, Syslinux [en], NTLDR ou iBoot, não são sistemas operacionais, mas são capazes de carregar um sistema operacional adequadamente e transferir a execução para ele; o sistema operacional se inicializa posteriormente e pode carregar drivers de dispositivos extras. 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 Sistema básico de entrada/saída (S.B.E.S.)[i] ou o Firmware aberto embora normalmente com funcionalidade restrita de hardware e desempenho inferior.[12]

Muitos carregadores de inicialização podem ser configurados para dar ao usuário várias opções de inicialização. Essas opções podem incluir diferentes sistemas operacionais (para inicialização dupla ou múltipla a partir de diferentes partições ou unidades), diferentes versões do mesmo sistema operacional (no caso de uma nova versão apresentar problemas inesperados), diferentes opções de carregamento do sistema operacional (inicializar em um modo de segurança ou rescuperação, por exemplo) e alguns programas autônomos que podem funcionar sem um sistema operacional, como testadores de memória (o memtest86+, por exemplo), um shell básico (como no GNU GRUB) ou até mesmo jogos.[13] Alguns carregadores de inicialização também podem carregar outros carregadores de inicialização (o GRUB carrega o BOOTMGR em vez de carregar o Windows diretamente, por exemplo). Normalmente, uma escolha padrão é pré-selecionada com um intervalo de tempo durante o qual o usuário pode pressionar uma tecla para alterar a escolha; após esse atraso, a opção padrão é executada automaticamente para que a inicialização normal possa ocorrer sem interação.

Muitos sistemas embarcados devem inicializar imediatamente. Por exemplo, esperar um minuto para que uma televisão digital ou um dispositivo de navegação compatível com o Sistema de posicionamento global (S.P.G.)[q] seja iniciado geralmente é inaceitável. Portanto, tais dispositivos possuem sistemas de software em memória somente de leitura (M.S.L.)[d] ou memória flash para que o dispositivo possa começar a funcionar imediatamente. Pouco ou nenhum carregamento é necessário, pois o carregamento pode ser pré-computado e armazenado na memória somente de leitura (M.S.L.)[d] 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 estejam carregados e 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, se configurar como um mero processo dentro desse sistema e então transferir irrevogavelmente o controle para o sistema operacional. O carregador de inicialização termina normalmente como qualquer outro processo faria.

Inicialização através da rede

[editar | editar código-fonte]

A maioria dos computadores também é capaz de inicializar através de uma rede de computadores. Nesse cenário, o sistema operacional é armazenado no disco de um servidor e algumas partes dele são transferidas para o cliente usando um protocolo simples, como o Protocolo de transferência de arquivo trivial (P.T.A.T )[r]. Após a transferência dessas partes, 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 através da rede começa usando métodos genéricos de acesso à rede fornecidos pela memória somente de leitura (M.S.L.)[d] de inicialização da interface de rede, que normalmente contém uma imagem do ambiente de execução de pré-inicialização (A.X.P.)[s]. Nenhum driver é necessário, mas a funcionalidade do sistema é limitada até que o núcleo[t] e os drivers do sistema operacional sejam transferidos e iniciados. Como resultado, uma vez concluída a inicialização baseada em memória somente de leitura (M.S.L.)[d], é totalmente possível inicializar através da rede em um sistema operacional que não tem a capacidade de usar a interface de rede.

  • Comparação de carregadores de inicialização [en]
  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 do diretório e os três primeiros setores do IBMBIO.COM ainda precisam ser armazenados de forma contígua. O SYS continua cuidando desses requisitos.
  2. a b Como exemplo, enquanto a funcionalidade estendida dos registros de inicialização mestres (MBRs) e setores de inicialização do DR-DOS em comparação com suas contrapartes do MS-DOS/PC DOS ainda pode ser alcançada utilizando técnicas convencionais de otimização de código até 7.05, a adição do suporte ao endereçamento de bloco lógico (LBA), à tabela de alocação de arquivos (FAT32) e ao LOADER os setores do 7.07 tiveram que recorrer a código automodificável, programação em nível de código de operação (opcode), utilização controlada de efeitos colaterais, sobreposição de dados/código em vários níveis e técnicas de dobra algorítmica para espremer tudo em um único setor físico, pois era um requisito para retrocompatibilidade e compatibilidade cruzada com outros sistemas operacionais em cenários de inicialização múltipla e carregamento em cadeia.
  3. Há uma exceção à regra de que os registros de inicialização de volume (VBRs) do DR-DOS carregarão todo o arquivo IBMBIO.COM na memória: Se o arquivo IBMBIO.COM for maior que 29 kilobytes (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 (DPT/FDPB) realocada. Portanto, um registro de inicialização de volume (VBR) DR-DOS 7.07 carregaria apenas os primeiros 29 kilobytes (KB) do arquivo na memória, contando com outro carregador embutido 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 ultrapassou 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 registro de inicialização de volume (VBR) PC DOS, que carregaria apenas os três primeiros setores do arquivo na memória.
  1. do inglês bootloader, também escrito como boot loader,[1][2] e bootstrap loader
  2. do inglês boot manager
  3. a b c do inglês RAMrandom access memory
  4. a b c d e f do inglês R.O.M.read-only memory
  5. do inhlês E.E.P.R.O.M.electrically erasable programmable read-only memory
  6. a b c d e do inglês C.P.U.central processing unit
  7. a b do inglês I/Oinput/output
  8. do inglês bootstrapping
  9. a b c d e do inglês B.I.O.S.basic input/output system
  10. a b do inglês International Business Machines Personal Computer
  11. do inglês F.S.B.L.first-stage boot loader
  12. do inglês M.B.R.master boot record
  13. a b do inglês E.B.P.B.extended BIOS parameter block
  14. a b do inglês L.B.A.logical block addressing
  15. do inglês C.H.S.cylinder-head-sector
  16. a b do inglês U.E.F.I.unified extensible firmware interface
  17. do inglês G.P.S.global positioning system
  18. do inglês T.F.T.P.trivial file transfer protocol
  19. do inglês P.X.E.preboot execution environment
  20. do inglês kernel
  1. «GNU GRUB - GNU project - Free software foundation (F.S.F.)» [GNU GRUB - Projeto GNU - Fundação do software livre (F.S.F.)]. 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. a b Paul, Matthias R. (2 de outubro de 1997) [29 de setembro de 1997]. «OpenDOS Caldera 7.01/7.02 atualização Alpha 3 IBMBIO.COM - README.TXT e BOOT.TXT – Uma breve descrição de como o OpenDOS é inicializado» (em inglês). Consultado em 29 de março de 2009. Arquivado do original em 4 de outubro de 2003  [1]
  4. Sakamoto, Masahiko (13 de maio de 2010). «Why BIOS loads MBR into 7C00h in x86?» [Por que o BIOS carrega o MBR em 7C00h em x86?]. glamenv-septzen.net (em inglês). Consultado em 22 de agosto de 2012 
  5. Corporação de computadores Compaq; Tecnologias Phoenix ltda.; Corporação Intel (11 de janeiro de 1996). «B.I.O.S. boot specification 1.01» [Especificação de inicialização do S.B.E.S. 1.01] (PDF) (em inglês). Consultado em 21 de dezembro de 2017 
  6. 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 – Assessores técnicos». The MS-DOS encyclopedia: versions 1.0 through 3.2 [A enciclopédia do MS-DOS: versões 1.0 a 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 Completamente reformulada ed. Redmond, Washington, Estados Unidos da América: Microsoft Press [en] (em inglês). ISBN 1-55615-049-0. LCCN 87-21452. OCLC 16581341  (xix+1570 páginas; 26 cm) (Nota. Esta edição foi publicada em 1988 após uma extensa reformulação da primeira edição de 1986 por uma equipe diferente de autores. [2])
  7. a b c Chappell, Geoff (janeiro de 1994). «Chapter 2: The system footprint – Capítulo 2: A pegada do sistema». In: Schulman, Andrew; Pedersen, Amorette. DOS internals [Internas do DOS]. Col: The Andrew Schulman programming series –A série de programação de Andrew Schulman (em inglês) 1ª impressão, 1ª ed. [S.l.]: Addison-Wesley. ISBN 978-0-201-60835-9  (xxvi+738+iv páginas, disquete de 3,5" [3][4]) Errata: [5][6][7]
  8. Rosch, Winn L. (12 de fevereiro de 1991). «DR DOS 5.0 - The better operating system?» [DR DOS 5.0 - O melhor sistema operacional?]. PC Magazine. 10 (3). pp. 241–246, 257, 264, 266. Consultado em 26 de julho de 2019. Cópia arquivada em 25 de julho de 2019. […] O SYS foi aprimorado no DR DOS 5.0 para que você não precise se preocupar em deixar o primeiro cluster livre em um disco que deseja tornar inicializável. Os arquivos de sistema DR DOS podem estar localizados em qualquer lugar no disco, portanto, qualquer disco com espaço livre suficiente pode ser configurado para inicializar seu sistema. […]  (Nota. 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 este setor no disco.)
  9. Paul, Matthias R. (17 de janeiro de 2001). «FAT32 in DR-DOS» [FAT32 no 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 *todo* na memória antes de passar o controle para ele. […] 
  10. Paul, Matthias R. (20 de fevereiro de 2002). «Can't copy» [Não consigo copiar]. 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 carrega todo o arquivo IBMBIO.COM na memória antes de o executar. Ele não se importa com o arquivo IBMDOS.COM, que é carregado pelo IBMBIO.COM. […] O setor de inicialização do DR-DOS […] encontrará os […] arquivos do núcleo (kernel) desde que estejam armazenados logicamente no diretório raiz. Sua localização física no disco, e se eles estão fragmentados ou não, não é interesse do setor de inicialização do DR-DOS. Portanto, você pode simplesmente copiar os arquivos do núcleo (kernel) para o disco (mesmo com um simples COPY), e assim que o setor de inicialização for um setor 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 de inicialização múltipla LOADER do DR-DOS funcionar. Os arquivos do núcleo (kernel) do MS-DOS devem residir em locais específicos, mas os arquivos do DR-DOS podem estar em qualquer lugar, portanto, você não precisa os trocar fisicamente toda vez que inicializar o outro sistema operacional. Além disso, permite atualizar um sistema DR-DOS simplesmente copiando os arquivos do núcleo (kernel) sobre os antigos, sem necessidade do 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 (kernel) 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.[…] 
  11. Paul, Matthias R. (14 de agosto de 2017) [2017-08-07]. «The continuing saga of Windows 3.1 in enhanced mode on OmniBook 300» [A saga contínua do Windows 3.1 em modo avançado no OmniBook 300]. MoHPC - o museu das valculadoras HP (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 do FORMAT /S ou SYS. Depois, você pode simplesmente copiar os arquivos restantes do DR-DOS, incluindo os arquivos do sistema. É importante saber que, ao contrário do MS-DOS/PC DOS, o DR-DOS tem setores de inicialização "inteligentes" que realmente "montam" o sistema de arquivos para procurar e carregar os arquivos do sistema no diretório raiz em vez de esperar que eles sejam colocados em um determinado local. Fisicamente, os arquivos do sistema podem estar localizados em qualquer lugar e também podem ser fragmentados. […] 
  12. «Chapter 6 - Troubleshooting startup and disk problems – Capítulo 6 - Solucionando problemas de inicialização e de disco». Windows NT server resource kit [Kit de recursos do servidor Windows NT] (em inglês). [S.l.]: Microsoft. Arquivado do original em 15 de maio de 2007 
  13. «Tint» (em inglês). coreboot. Consultado em 20 de novembro de 2010 

Ligações externas

[editar | editar código-fonte]