O
primeiro processo que um sistema operacional precisa fazer é ser
carregado para a memória. Como deve ser de conhecimento, a memória
RAM não mantêm dados depois que o computador é desligado, portanto
o sistema operacional e todos os outros arquivos devem permanecer em
memórias secundárias, sendo carregados para a memória
principal somente quando necessário.
A ação
de carregar o sistema operacional do disco rígido ou CDROM para a
memória primária é chamado de bootstrapping,
ou simplesmente boot. Este processo não é feito pelo sistema
operacional em si, mas por um auxiliar chamado de carregador de boot
(bootloader).
O
carregador de boot é um programa auxiliar que é executado somente
durante o carregamento do sistema e é totalmente desnecessário
depois. Normalmente o processo de boot pode ser divido em duas
partes.
A
primeira está no setor de boot, um pequeno pedaço do disco, que
contém um minúsculo programa escrito em Assembly. O setor de boot é
carregado pela BIOS para a memória e executado, ele pode
carregar diretamente o sistema operacional ou carregar uma segunda
parte do bootloader.
Como o
setor de boot tem normalmente um tamanho pequeno, não é possível
que o bootloader tenha muitos recursos e nem que seja escrito em
outra linguagem que não seja Assembly. Para resolver essa limitação,
com o bootloader tendo mais recursos, faz-se com que o programa
contido no setor de boot seja o mais simples possível, porem todas a
funcionalidade são implementados em outra parte, a qual é carregada
pelo setor de boot.
Essa
segunda parte do bootloader pode ser escrita em qualquer outra
linguagem e, normalmente, não tem nenhuma limitação, sendo
possível implementar diversos recursos. Esta é a forma utilizada
pelo GRUB (GRand Unified
Bootloader) utilizado por muitas distribuições Linux.
A
diferença fundamental entre um carregador mono-estágio (que somente
tem o setor de boot) para um multi-estágio é que, no mono-estágio,
o arquivo de kernel a ser carregado deve estar totalmente pronto para
ser executado, ou seja, não pode ser um arquivo realocável,
enquanto que em um carregador multi-estágio é até possível
carregar um executável com realocações.
Não
pretendo utilizar um carregador de boot externo como o GRUB, mas
também quero que o carregador tenha mais recursos que o simples
setor de boot, então a escolha recairá em justamente implementar um
bootloader de dois estágios. Porem antes de começar a implementar o
carregador de boot é necessário que se tenha o mínimo do sistema
operacional, pois escrever um programa para carregar algo que ainda
nem existe é muito mais complicado.
Além de
que, ainda, como irei utilizar o FPC, que foi concebido para
funcionar em 32 bits (64 também) e com modelo de memória FLAT, não
é possível escrever o bootloader com ele, somente em Assembly.
Portanto
o bootloader é uma parte extremamente chata de se implementar, que
poderia ocupar um tempo demasiadamente logo sem apresentar resultados
práticos, então a forma a qual acho mais interessante no momento de
desenvolvimento do sistema é executar um “boot-parasita”.
O que
seria esse boot-parasita?
Simples,
utilizar um sistema operacional simples que funciona exclusivamente
em modo real, o MS-DOS por exemplo, e a partir de um programa
executado por ele, carregar o nosso sistema operacional para a
memória e pô-lo em execução. Isto é mais simples e rápido de
ser feito, embora pareça um processo “sujo”, é mais eficiente
durante o desenvolvimento e possibilita que se aproveite melhor o
tempo com algo realmente mais importante, o kernel.
Então o
que fazer: escreverei um programa em Turbo Pascal, que roda sobre o
MS-DOS, este programa será responsável por carregar o kernel do
nosso sistema para a memória e preparar o computador para pô-lo em
funcionamento. Após ter um kernel funcional escreveremos nosso
próprio bootloader.
Isto
torna fácil os testes, principalmente no DosBox, que já emula um
DOS mas permite que um programa use o modo protegido. Já nas outras
máquinas virtuais é necessário que se tenha um disco de boot do
MS-DOS ou do Windows 95 (ou do FreeDOS).
Uma outra
pergunta que pode estar surgindo é porque eu irei utilizar o MS-DOS FreeDOS inicialmente para boot se atualmente uso o Linux?
Simples
novamente, o Linux já funciona em modo protegido e não iria
permitir que um programa tomasse o controle do hardware, enquanto o
MS-DOS FreeDOS roda em modo real e, assim, permite que qualquer programa
controle e configure o computador para trabalhar em modo protegido.
Próximo - Boot, fase 2 – Requisitos >>
<< Anterior - Antes de começar
Próximo - Boot, fase 2 – Requisitos >>
<< Anterior - Antes de começar
Voltar a Faça seu próprio sistema operacional.
Nenhum comentário:
Postar um comentário
Obs.: Após escrever seu comentário, inscreva-se por e-mail para seguir os próximos comentários. Ou assine a postagem de comentários (Atom).