Pular para o conteúdo

Introdução

Desenvolvimento de sistemas operacionais é a prática de escrever o software que roda antes de qualquer aplicação: o código que assume o controle a partir do bootloader, inicializa o processador, gerencia a memória e fornece o ambiente em que todo outro programa é executado. Esta wiki documenta essa prática do zero, cobrindo a construção de um kernel em vez do uso de um já existente.

O material pressupõe familiaridade com C e capacidade de ler assembly x86, sem exigir experiência prévia escrevendo código em nível de kernel. Tópicos como paginação e tratamento de interrupções são cobertos a partir dos princípios básicos. O progresso costuma ser lento: um kernel hobby capaz de chegar a um shell é, geralmente, meses de trabalho, não um projeto curto.

Os artigos estão agrupados, em linhas gerais, na ordem em que um kernel novo costuma precisar deles. Ambiente e Ferramentas cobre a construção de um cross-compiler e a configuração de um emulador antes de qualquer código de kernel ser escrito. Boot cobre a sequência entre o power-on e a primeira instrução do kernel. Fundamentos de Arquitetura, Gerenciamento de Memória e Interrupções e Exceções cobrem mecanismos x86 necessários logo no início da maioria dos kernels. Processos e Escalonamento, Drivers e Sistemas de Arquivos costumam ser relevantes assim que um kernel consegue inicializar e produzir alguma saída.

A maioria dos exemplos tem como alvo x86-64 em long mode e é compilada com um cross-compiler GCC; os artigos indicam explicitamente quando o conteúdo é específico de 32 bits ou de outra arquitetura.

Espera-se que o desenvolvimento ocorra contra um emulador como QEMU ou Bochs antes de qualquer teste em hardware físico. Emuladores reiniciam rapidamente, permitem anexar um depurador a um kernel em execução e fornecem saída de diagnóstico indisponível em firmware real quando um kernel falha logo no início. Testar em hardware físico continua sendo útil mais adiante no desenvolvimento, uma vez que a funcionalidade básica já esteja estabelecida.