Para expandir a resposta aceita…
Quando um PC x86 é iniciado, sua CPU está executando em modo real de 16 bits e executa o código armazenado no BIOS. Depois que o BIOS executa o POST e a configuração inicial, ele lê os primeiros 512 bytes do início do disco de inicialização e transfere a execução para lá - é o código inicial de um gerenciador de inicialização que deve fazer o resto.
Agora considere o que há de resto. No caso mais simples, o gerenciador de partida deve ser capaz de localizar e carregar a imagem do kernel e transferir a execução para lá. Carregador de Linux padrão de fato mais antigo, lilo
, mantinha um mapa contíguo de todos os setores nos quais o kernel estava armazenado. Mas a imagem mudou um pouco desde então: mais sistemas de arquivos entraram em uso, tornou-se habitual manter o kernel em um dispositivo RAID ou em um disco lógico LVM ou em uma pilha de todos eles. Computadores começaram a apresentar mais discos conectáveis, o que significa ordenação arbitrária de sua inicialização e, portanto, problemas com a nomenclatura. Agora, considere que, atualmente, criar um sistema genérico baseado no Linux requer algumas ferramentas user-space disponíveis no início, que são mantidas no chamado "initrd" (disco de RAM inicial) ou "initramfs" ( sistema de arquivos RAM inicial), então, na verdade, o carregador de boot carrega não apenas o kernel do Linux, mas também um initramfs correspondente para ele.
Portanto, a tarefa do carregador de inicialização é:
- Bootstrap em si - esses 512 bytes podem apenas encontrar e carregar algo mais complicado.
- Descubra e inicialize todas as camadas necessárias para acessar o sistema de arquivos de inicialização (o sistema de arquivos que contém o kernel e seus initramfs).
- Carregue tudo e transfira o controle para o kernel.
Agora considere que a maioria das pessoas acham útil poder visualizar e controlar esse processo de alguma forma, portanto, há um requisito para que o gerenciador de inicialização possa apresentar um menu de uma classificação e uma capacidade de ajustar o que será carregado. e como. Uma habilidade para carregar um kernel alternativo também pode ser um bônus (por exemplo, um novo kernel instalado no repositório de atualizações de segurança da Debian nunca remove o kernel existente - ao invés disso, ele é mantido de lado e está disponível para inicialização se uma regressão for encontrada em um novo).
Assim, como pode ser visto, a menos que lidemos com algum tipo de sistema embarcado com requisitos de memória / armazenamento muito apertados e em que ninguém controle como o kernel é carregado, não é razoável colocar essa funcionalidade diretamente no kernel , mais ainda, já que o gerenciador de partida é um software inerentemente dependente da plataforma altamente dependente de hardware. É por isso que o boot loader existe e porque em um sistema genérico a necessidade de usar um é principalmente inevitável.