< Afinal, o Bootstrap >
Há mais de um mês eu dizia que na semana seguinte destrincharíamos o bootstrap. Antes, porém, era preciso discutir alguns pontos importantes para o entendimento do assunto. Passamos semanas conversando fiado e nada. Pois bem: afinal, chegou a hora do bootstrap. E para os de memória curta, convém lembrar que bootstrap é o procedimento que resulta na carga do sistema, ou seja, na transferência dos arquivos que compõem o sistema operacional do disco para a memória.
O bootstrap começa disparando uma rotina mui apropriadamente chamada de rotina de inicialização do bootstrap. Ela faz parte do ROM-BIOS, assume o controle logo após o POST e sua primeira ação é começar a "arrumação da casa" para entregá-la nos conformes ao sistema operacional. E para isto cria, no trecho inicial da memória, um grupo de tabelas chamadas "tabelas dos vetores de interrupção". Não cabe nestas modestas linhas destrinchar um negócio assim tão complicado mas, para informação dos mais curiosos, estas tabelas nada mais são que uma sucessão de bytes em endereços predeterminados que, por sua vez, contêm endereços de rotinas empregadas para acessar alguns dos dispositivos que o POST detectou antes de passar o controle para o bootstrap. Estas rotinas serão usadas mais tarde pelo sistema operacional.
Em seguida a rotina de inicialização do bootstrap inicia alguns processos de ajuste e configuração de hardware (por exemplo, o "refresh" da memória RAM, sem o que ela inevitavelmente "esqueceria" os dados armazenados). Depois, executa uma cuidadosa busca em todos os endereços de memória que podem conter extensões do BIOS. Ela "sabe" que encontrou uma extensão do BIOS em um dado endereço se detecta uma certa sucessão de bytes, a "assinatura" da extensão do BIOS. E como toda a extensão do BIOS tem uma pequena rotina de inicialização que deve ser executada durante o bootstrap e que serve justamente para integrá-la ao sistema operacional, quando o bootstrap encontra uma destas extensões passa o controle para sua rotina de inicialização e espera que seja executada antes de retomá-lo.
Reparem que até aqui nada disto tem a ver com o sistema operacional. Ou melhor: de uma certa forma, tem a ver sim, já que tudo é feito para ser usado por ele. Mas independe de qual seja o sistema operacional. Em outras palavras: o que a rotina de inicialização do bootstrap faz nada mais é que preparar a máquina para ser ocupada pelo sistema operacional. Seja que sistema for. É claro que, em princípio, ela foi concebida para preparar a máquina para o DOS, o único sistema operacional que existia na época em que foi criada. Mas desde então, embora muita coisa tenha mudado no mundo dos micros da linha PC, ela permaneceu essencialmente a mesma. Ou seja: não importa se será carregado um singelo DOS ou um sistema operacional multitarefa de 32 bits como o OS/2 ou Windows 95. A rotina de inicialização é rigorosamente a mesma.
E agora, com a máquina preparada, o bootstrap vai, afinal, fazer seu primeiro acesso a disco. Um acesso dos mais simples: começa pelo primeiro drive de disquetes, o drive A, e verifica se lá há um disco. Se houver, usando as rotinas para acesso a disco contidas no próprio ROM BIOS, lê seu primeiro setor (o setor um da trilha zero da face zero, o já nosso velho conhecido setor de boot), examina seu conteúdo e verifica se aquele é um disco de boot, ou seja, um disco que contém os arquivos do sistema operacional. Se for, carrega este setor na memória e passa o controle para ele (adiante veremos exatamente o que isto significa). Se não for, ou se não encontrou um disquete no drive A, repete a operação, mas desta vez para o primeiro disco rígido (ou para a partição principal do primeiro disco rígido, caso ele contenha mais de uma partição). Lê o setor de boot, verifica se é um disco de boot e, se for, carrega na memória o setor de boot e passa-lhe o controle. O que dispara, afinal, a carga do sistema operacional.
Semana que vem veremos como um mero setor de boot, com seus míseros 512 bytes, carrega todo um sistema operacional. Antes, porém, elucidemos um dos grandes mistérios da informática. Uma curiosa mensagem que às vezes aparece quando não se consegue dar boot: "System halted. No ROM Basic". Que significa "Sistema paralisado. Não há ROM Basic" e que, hoje em dia, pouca gente sabe do que se trata.
Seguinte: se a rotina de inicialização do bootstrap não encontra um disco de boot no drive A nem um setor de boot no drive C (seja porque o drive C não foi formatado ou seu setor de boot corrompeu-se), emite uma mensagem solicitando introduzir um disco de boot no drive A e apertar qualquer tecla. Mas se (em geral por um problema de hardware como um defeito na controladora de discos), ela não consegue nem ao menos detectar a existência de um disco, então emite aquela estranha mensagem.
Acontece que o velho PC da IBM nem sonhava em ter disco rígido. E até seu drive de disquete era opcional. Mas em compensação tinha um interpretador Basic gravado em ROM, o tal ROM Basic a que se refere a mensagem. Se a rotina de boot tentasse carregar o sistema operacional do drive A sem sucesso, passava o controle para o interpretador Basic, um programa que tomava conta da máquina de forma semelhante ao sistema operacional. E que já não existe mais nem nas máquinas IBM.