A inicialização é difícil
Inicializando ... bem ... é realmente a parte mais difícil. Toda vez que um computador é inicializado, ele se encontra basicamente de novo. Ele se familiariza com suas várias partes e, para cada uma delas, ganha capacidade. Mas ele tem que se sustentar com suas próprias instruções, por assim dizer, da estaca zero toda vez.
Ao projetar um processo de inicialização, o truque é elevar a máquina em etapas. O boot deve ser rápido e confiável, e deve ser as duas coisas em um ambiente completamente desconhecido de cada vez . Eu nem vou me aventurar em uma conversa no modo Real / Protegido (o que não significa que eu pudesse) , mas há muita coisa acontecendo na inicialização. À medida que o computador assimila seus vários componentes cada vez que o faz em etapas graduadas. Provavelmente o mais crucial deles é a mudança da execução do código on-board para a execução do código no disco ou, em outras palavras, o executor do kernel. É quando o firmware (ostensivamente) se rende ao sistema operacional.
Muitos anos atrás, esse não era o caso. Antes, o BIOS era realmente o Basic In / Out - programas regulares faziam chamadas para o firmware para coisas como desenhar a tela e acessar o disco. Isso se chamava interrupções - os antigos podem se lembrar melhor das emoções de alegria que costumavam encontrar ao atribuir IRQs para sua nova matriz de pontos ou USR.
INT13H
É a série de funções 13H de interrupção ( ou INT
na linguagem do assembly ) que o BIOS oferece como serviços para acesso ao disco. Eles ainda hoje são usados nos sistemas BIOS no processo de inicialização para fazer o salto do firmware para o disco.
Um sistema BIOS verifica os primeiros bytes de cada disco encontrado e procura um padrão que reconheça como um registro mestre de inicialização ( ouMBR
) . Esse é um padrão de fato de décadas e inclui um pouco de binário executável bruto, que é gravado na cabeça do disco. O MBR marca um disco do BIOS como inicializável. Ele irá parar de verificar quando encontrar um, e praticamente um é tudo o que você obtém sem truques inteligentes. Quando encontra um, mapeia-o para a memória e executa-o (no modo Real, mas ainda não vou para lá) .
O MBR executado quase definitivamente não é o kernel do sistema - 512 bytes (mais ou menos) seriam bastante inúteis nesse departamento. Provavelmente, este é um gerenciador de inicialização - um programa projetado especificamente para superar uma das muitas limitações de endereçamento da BIOS - especificamente que ele não entende nenhum tipo de sistema de arquivos.
Quando o bootloader lê no kernel real e executa -lo na memória (como todos nós orar ele será cada vez) , ele provavelmente irá fazê-lo, pedindo o BIOS através de uma INT13H
chamada de interrupção. E se não - muitos gerenciadores de inicialização mais sofisticados montam sistemas de arquivos no sentido convencional e executam o código de outra maneira -, é muito pouco provável que o gerenciador de inicialização seja tão sofisticado sem um INT13H
ou dois. Freqüentemente, os gerenciadores de inicialização precisam carregar-se em cadeia - ou em vários estágios - porque os 512 bytes alocados pela primeira vez não atendem nem mesmo às suas necessidades.
FRANGO E OVO
Tudo isso é uma maneira indireta de discutir o disco, eu sei, mas a essa altura deve ficar bem claro que o problema principal - pode-se chamá-lo de tipo de ovo e galinha - é acessar o disco que contém as instruções do programa sobre como acessar discos . A chave para esse problema é o firmware - e continua sendo de maneiras muito diferentes, mesmo nos sistemas EFI - e, mais fraco ou não, o firmware é o link mais importante na cadeia de inicialização.
Veja bem, quando o kernel é executado, e todas as suas inúmeras rotinas para acessar e controlar o hardware são iniciadas, todos esses problemas desaparecem (ou pelo menos mudam um pouco) , porque os sistemas operacionais modernos assumem o controle total de um sistema, mas até que os limites do sistema se estendam apenas até o limite permitido pelo firmware. Isso está dizendo muito - o BIOS não mudou muito desde o 8086. A INT13H
chamada é original do 8086. Sim, houve (inúmeras) extensões e hacks, é claro, mas inovações ...?
MELHOR E MELHOR
A maioria das alterações no BIOS foram meras ataduras, na melhor das hipóteses. Costumava ser um disco rígido, precisava ser mapeado fisicamente - vários aspectos específicos de sua geometria eram referidos quando os dados eram armazenados ou recuperados. Eventualmente, o disco rígido convencional cresceu para um tamanho que proibia isso. Mesmo apenas o mapa abstrato era muita informação para um BIOS suportar. Como ele pode operar apenas no Modo Real, o BIOS é limitado a 1 MB por registro de memória. Encha o mapa de cilindros com tamanho maior que isso ou faça com que qualquer uma de suas propriedades seja maior do que pode ser tratada em tantos bits, e o BIOS está literalmente perdido - fora dos limites.
Essa barreira foi encontrada e quebrada muitas vezes. Cada vez que o mapa é abstraído e codificado de uma maneira mais nova, inteligente e menos precisa. E, atualmente, é literalmente impossível para um BIOS mapear com precisão uma unidade. O endereçamento de bloco lógico é o padrão de fato agora, embora algumas traduções de Cilindro / Cabeça / Setor (ou CHS) ainda sejam necessárias. O que o firmware da placa principal perdeu em precisão / responsabilidade, essas extensões abstraíram e adicionaram às responsabilidades do firmware do disco para preencher as lacunas.
É este jogo de gato e rato que é mencionado na sua pergunta. Quando o BIOS não consegue entender um disco além de um certo ponto devido ao seu tamanho, todos os dados que você deseja recuperar para você na inicialização - como um carregador de inicialização ou kernel - provavelmente não devem estar localizados além desse ponto. Isto é de onde /boot
veio.
TALVEZ REALMENTE MELHOR
Hoje em dia, essas coisas são, felizmente, tornadas irrelevantes pelo desaparecimento da BIOS. Nos próximos 30 anos, ele foi amplamente substituído nos últimos anos pelo padrão UEFI (ou EFI 2.0) . O UEFI fornece uma montagem a partir do primeiro minuto, inicializa no Modo Protegido, incorpora seu próprio carregador de inicialização, fornece armazenamento variável de memória flash persistente à reinicialização, é especificado para lidar com alguns zetabytes ou qualquer outro por disco ... outro. Está longe de ser perfeito, mas é uma grande melhoria em relação ao seu antecessor.
Mesmo os argumentos para gerenciadores de inicialização especializados que envolvem criptografia de disco ou sistemas de arquivos em camadas ficam vazios quando você considera que tudo isso deve ser tratado pelo kernel do sistema operacional de qualquer maneira e, se você fornecer uma montagem na inicialização, sempre terá uma visão clara. chance de executá-lo (especialmente considerando que o kernel do Linux, em sua configuração padrão, é um executável por EFI por si só) .
Portanto, uma /boot
partição separada provavelmente não deve lhe interessar demais e, se você estiver em um sistema EFI, provavelmente já terá um analógico na partição do sistema EFI, pois esse é um requisito para inicializar o modo EFI.