6 de setembro de 2021

Escrevendo um sistema operacional em Rust de Philipp Opperman

Eu me lembro que em 2008 eu imaginei como seria criar um sistema operacional e na época eu busquei algo na internet para fazer uma introdução no assunto. Eu lembro que a primeira coisa que imaginei foi que pelo menos a "entrada" do sistema operacional precisaria ser escrita em Assembly. Procurando pela internet algo como "fazer um Hello World bootável", ou como criar um programa que não precisa de sistema operacional para escrever algo na tela. Lembro-me que encontrei algo em C sobre um tal de endereço 0x800000 mas ficou por isso mesmo, na época o assunto estava muito além do que eu conseguia fazer facilmente e também não continuei aprendendo para entender como fazer algo.

Vindo para tempos mais atuais eu comecei a aprender um pouco mais sobre a linguagem Rust, que é uma linguagem que vem com o objetivo de cobrir alguns pontos de falha de C/C++ e também criada desde o inicio com aspectos modernos das linguagens atuais, um sistema de build e pacotes completo. Como a proposta dela é substituir essas duas linguagens citadas ela surge como uma alternativa para criação de drivers e até sistemas operacionais, além de permitir criação de aplicações mais comuns por ter algumas facilidades em relação a C/C++.

Nas pesquisas sobre Rust eu esbarrei em um conteúdo muito legal, chamado Writing an OS in Rust do Philipp Oppermann. O autor, utilizando Rust, passa por diversas etapas da criação de um sistema operacional, desde um simples Hello World! (como eu queria ter feito lá no inicio) até a criação de processamento assíncrono. Ele tem o cuidado de explicar cada etapa, ilustrar os conceitos e ensinar incrementalmente e ao final do processo você passa por diversos conceitos, como gerenciamento de memória, interrupções e muito mais. Além de ter criado esse blog (que confesso que para mim é praticamente um livro) ele também mantém diversas bibliotecas em Rust com funcionalidades básicas do sistema operacional.

Sistema operacional rodando dentro de um emulador (QEMU)
O conteúdo é excelente, as explicações são claras mas confesso que me perdi em alguns momentos e reconheço que isso aconteceu por dois motivos: O primeiro é que não domino Rust ainda, a linguagem é bem fora do comum em alguns aspectos e para desenvolver o SO é necessário tocar em algumas coisas que não estão no básico da linguagem e apesar de ser bem cuidadoso e explicar muito bem os conceitos, o blog não esta feito para quem está aprendendo Rust. O segundo motivo é o conceito de sistema operacional em si, como foi a primeira vez que tive um contato com detalhes de implementação de algo assim as coisas não se fixaram tão bem, então é necessário uma revisão no futuro para eu dominar melhor o assunto. Mas ao final da jornada pelo blog eu confesso que aprendi muitas coisas e como o autor já divulgou que está trabalhando numa nova edição eu espero até lá estar mais apto para fazer novamente o tutorial.

Um conteúdo muito interessante que ele cita no blog é o livro Three Easy Pieces dos autores Remzi H. Arpaci-Dusseau e Andrea C. Arpaci-Dusseau da Universidade de Winsconsin-Madson. O livro que está disponível online gratuitamente tem uma didática muito diferente da que estamos acostumados em outros textos sobre sistemas operacionais, utilizando programas simples para emular comportamentos do computador, como a priorização de tarefas, o livro consegue passar uma visão muito prática sobre como funciona um sistema operacional e já dá muitos insumos para conseguirmos implementarmos um.

EXTRA: o endereço 0x800000 é o buffer da VGA, ou seja, o endereço para onde podemos mandar caracteres e escrever na tela, por isso eu vi ele anos atrás no Hello World que comentei no primeiro parágrafo.


Um comentário:

  1. Um programador C/C++ que se atentou a seu post. Parabéns pelo post e grato pela informação.

    ResponderExcluir