thumb|GNU GRUB, um gerenciador de inicialização livre popular thumb|right|Gerenciador de inicialização do Windows Um carregador de inicialização (também chamado de bootloader, boot loader 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.

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 um 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/sistema básico de entrada e saída 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 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 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. 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.

Exemplos Computadores pessoais compatíveis com IBM BIOS de legado Em computadores x86, depois que o BIOS executa o autoteste de inicialização (POST), ele executa o carregador de inicialização de primeiro estágio, que é um programa compacto de 512 bytes que reside no registro mestre de inicialização (MBR). 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 (posteriormente relaxado para 64 KiB) 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, condições atendidas pelo comando SYS e ligeiramente relaxadas em versões posteriores do DOS. 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. 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). 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.

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.

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

UEFI A UEFI (exceto para inicialização em CSM) não depende de setores de inicialização; ela carrega o carregador de inicialização do próximo estágio (como o BOOTMGR e o GRUB2) diretamente a partir da partição de sistema da EFI.

IBM System/360 e seus sucessores No IBM System/360 e seus sucessores, o controle de operador LOAD inicia um processo chamado Carga de Programa Inicial (IPL),Para z/Architecture os detalhes são ligeiramente diferentes devido aos endereços de 64 bits. que faz uma reinicialização do sistema envia um comando de canal de Leitura da Carga de Programa Inicial (IPL) (0216) para o dispositivo selecionado, para ler 24 bytes nos locais 0-23 e faz com que o canal comece a buscar Palavras de Controle do Canal (CCWs) no local 8; o efeito é como se o canal tivesse buscado uma Palavra de Controle do Canal (CCW) a partir do local 0 com um comprimento de 24, um endereço de 0 e os sinalizadores contendo Encadeamento de Comando + Supressão de Indicação de Comprimento; Após a conclusão da operação, o sistema armazena o endereço de E/S na meia palavra no local 2 e carrega a Palavra de Estado do Programa (PSW) a partir do local 0.