Friday, March 9, 2018

files

Eu acredito que uma boa parte de vocês encontrem problemas com a inicialização, assim como eu. Por isso proponho uma discussão sobre o assunto.
No meu sistema o boot funciona assim:
>> O primeiro arquivo é o MBR, ele carrega o arquivo BM.BIN na memória e passa o comando para ele, além de passar como argumentos alguns parâmetros de disco. O MBR encontra o BM.BIN do diretório raiz de uma partição formatada em fat16. Isso é feito em 16bit usando recursos do BIOS.
>> O segundo arquivo é BM.BIN, Boot Manager, ele é feito em assembly 16/32bit. Já de cara, ainda em 16bit, usando recursos do BIOS, ele carrega na memória o arquivo BL.BIN, depois faz algumas inicializações em 16bit, muda para o modo protegido, de 32bit, e entra em um mini-shell feito em assembly 32bit, de onde eu posso efetuar comandos para verificar as propriedades de disco e outras coisas. Um dos comandos é o comando 'boot', que retorna para o modo real, muda para o modo gráfico usando VESA e depois comuta para o modo protegido e passa o comando para o arquivo BL.BIN. Além de passar um monte de argumentos para ele como parâmetros do sistema.
>> O terceiro é o BL.BIN, Boot Loader. Ele é feito em C e Assembly 32bit. Quando ele inicializa ele recebe e salva os argumentos, que são muito impotantes. Em seguida passa o comando para a parte em C 32bit, que carregará o KERNEL.BIN e vários outros arquivos, que estejam em um disco IDE formatado em fat16. Faz algumas inicializações de paginação e passa o comando para o Kernel.
>> O quarto é o kernel em si. Falarei detalhadamente sobre ele em outro post. Mas ele é feito em C e Assembly 32 bit. É do tipo híbrido, e contém quatro camadas. Chamadas /hal /microkernel / executive /gramado. A camada /hal é para abstrações de hardware, é a única camada e mexe diretamente com o hardware. A camada /microkernel, faz a inicialização, a comunicação entre processos, o dma e principalmente o gerenciamento de processos e threads. A camada /executive são rotinas de nível superior, longe do hardware, ela oferece rotinas mais elaboradas, principalmente para gerenciamento do sistema. Por último e acima de todas, está a camada /gramado, nela estão os recursos gráficos, as primitivas de suporte para logon, logoff e gerenciamento de usuário.
Por fim, o kernel irá passar o comando para os threads dos processos que estão em user mode e fica rodando esses threads dos processos, seguindo uma ordem de prioridades, ele intercala entre eles, deixando cada thread usar o processador na média por 8 ciclos do timer, cada ciclo tem 10 milisegundos. O thread com mais prioridade fica mais tempo.


No comments:

Post a Comment

Projeto Pessoal

Meu projeto pessoal de Informática. Você pode ver mais sobre meu projeto pessoal na minha página no Facebook. https://facebook.com/fredno...