- As pessoas distinguem entre o que é complexo e o que é apenas complicado. A complexidade é vista como algo interessante, mas a complicação é vista como algo prejudicial. O processo de configuração de uma CPU x86_64 é, em grande parte, complicado.
- Explica como configurar a CPU, a partir de um setor de boot carregado pelo BIOS, para sair do modo real de 16 bits e entrar no modo longo de 64 bits. Essa configuração é básica, e ainda há mais trabalho a ser feito.
- São necessários o manual Intel 64 and IA-32 Architectures Software Developer’s Manual, um montador (usando nasm) e o QEMU. É preciso conhecer assembly x86 e a sintaxe do nasm.
Ponto de partida: BIOS
- Após o reset, a CPU x86 está em "modo real". Esse modo usa tamanho básico de operando de 16 bits. Com segmentação, é possível endereçar 1 MB de memória.
- Depois do BIOS, o primeiro código executado está no setor de boot. O BIOS procura o primeiro setor do sistema que termina com
0xaa55 e carrega esse setor de boot no endereço de memória 0x7c00.
- O BIOS fornece 512 bytes, e é com isso que o restante do bootloader precisa ser inicializado.
Configurando o setor de boot
- Monte um setor de boot simples que use rotinas do BIOS para exibir uma mensagem na tela e então pare. Isso permite verificar se as ferramentas estão funcionando.
- O setor de boot é configurado com código assembly e um Makefile.
Etapa 1 – carregar a etapa 2 do disco
- O bootloader pode ser dividido em duas etapas. A etapa 1 é o código do setor de boot, ou seja, tudo o que o BIOS carrega. O único propósito da etapa 1 é carregar a etapa 2 na memória.
- Na etapa 2, faz-se a transição do modo real de 16 bits para o modo protegido de 32 bits. No modo protegido, não é possível usar rotinas do BIOS. Carregar setores do disco se torna muito mais complexo.
- Explica como acessar o disco usando o BIOS.
Modo protegido de 32 bits
- Faz a CPU passar do modo real (16 bits) para o modo protegido (32 bits). No modo protegido, a segmentação é usada para implementar proteção de memória.
- Antes de mudar para o modo protegido, é preciso definir a Global Descriptor Table (GDT). A GDT é definida na memória como uma estrutura contínua.
- Explica como definir a GDT e como mudar para o modo protegido.
Modo longo de 64 bits
- Antes de entrar no modo longo, a CPU precisa estar em modo protegido e a paginação precisa estar habilitada. O modo protegido já foi configurado, mas a paginação ainda é necessária.
- A paginação substitui a segmentação para gerenciar espaço de endereçamento virtual, permissões etc. Explica como criar tabelas de páginas para a transição ao modo longo.
- Explica como definir a GDT para o modo longo e como fazer a transição do modo protegido para o modo longo.
Resumo do GN⁺
- Este artigo explica em detalhes o processo de configurar uma CPU x86_64 para sair do modo real de 16 bits e entrar no modo longo de 64 bits. Isso ajuda a aprofundar o entendimento sobre bootloaders e desenvolvimento de kernel de sistemas operacionais.
- Aborda vários conceitos, como BIOS, setor de boot, modo protegido e modo longo, e fornece o código assembly e os métodos de configuração necessários para cada etapa.
- Este artigo é útil para quem tem interesse em desenvolvimento de sistemas operacionais e, em especial, oferece uma compreensão mais profunda da arquitetura x86. Um projeto com funcionalidade semelhante é "Writing a Simple Operating System – from Scratch".
1 comentários
Comentários no Hacker News