Carregador de inicialização

(Redirecionado de Bootloader)

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]

GNU GRUB, um gerenciador de inicialização de código aberto popular.

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

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

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

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.

Ver também

  • Comparação de carregadores de inicialização [en]

Notas

Notas

Referências

Ligações externas