0-1 ou On/OFF
Desde que comecei esta "brincadeira" de escrever sobre sistemas operacionais — bem, uma brincadeira que está ficando cada vez mais séria — tenho recebido emails, mensagens da rede social me estimulando e perguntando algumas particularidades dos sistemas. Para mim, tem sido um desafio de atualização e mesmo de aprendizado pois os novos processadores estão há anos-luz daquele velho código do 8086 que aprendi na escola de engenharia.
O assunto, desta vez, é o on/off, para responder à uma pergunta que os alunos de sistemas fazem frequentemente: como o sistema operacional é carregado na memória do computador? Em que exato momento isto acontece e o que acontece em seguida? Este assunto também é uma continuidade do último artigo (Anatomia de um kernell).
Usando uma descrição simplista e resumida, este programa (BIOS) executa, então o self-test ou Power-On Self Test (POST) que verifica a integridade física do sistema e dos periféricos. Em seguida, o programa procura pela palavra 0xAA55 (assinatura de boot) no primeiro setor de um periférico do tipo disco (Floppy, HD, CD/DVD etc.) ou cartão de memória (pen drive, cartão SD etc.).
Clicando nesta imagens podes ver um exemplo do POST |
Uma vez encontrado o setor de boot, normalmente chamado de Master Boot Record (MBR) o sistema carrega o código para o endereço 0x7C00 do segmento inicial da memória (CS:IP 0000:7C00) e passa a executar as instruções a partir daí.
Master Boot Record [1] |
O passo seguinte é a descompressão do kernel (zImage ou vmlinuz). O arquivo zImage (vmlinuz) não é apenas uma imagem comprimida mas tem o próprio gzip no início do arquivo (não se pode descomprimir o arquivo vmlinuz). Durante este processo, qualquer erro trava tudo pois o sistema não está operativo e a BIOS não tem o controle. Finalmente, a função start_kernel() que é descrita no arquivo /usr/src/linux/init/main.c entra em ação e nunca retorna. A partir deste ponto, todo o SO codificado em C entra em operação.
Hello World!
Referências:
[1] Fonte da imagem: Voronin, A. Data storage on hard discs (Part 1) May 22, 2001, http://www.engineersgarage.com/mygarage/how-computer-boots-up
Sugestão de um aluno para ler sobre o problema da linha A20: http://www.win.tue.nl/~aeb/linux/kbd/A20.html. O tratamento do problema é feito pelo arquivo a20.c no /usr/src/linux/arch/x86/boot. Boa leitura.
ResponderExcluir