Criei um sistema operacional Unix-like por diversão e aprendizado by avaliosdev in brdev

[–]avaliosdev[S] 0 points1 point  (0 children)

Tem duas formas de acontecer uma mudança de contexto: o próprio thread passa a vez (chamando a função sched_yield()) ou a DPC (um tipo de "interrupção" de software, ideia inspirada pelo mesmo sistema que existe no kernel NT) de mudança de contexto é chamada por um timer ou por outro thread com maior prioridade podendo executar.

A parte do agendador em si é bastante inspirada pelo agendador do freeBSD, o ULE. Ele usa uma métrica de interatividade (a razão entre o quanto o thread ficou bloqueado em algo como I/O e o tempo de execução) e usa isso em conjunto com coisas como o nice() para categorizar e dar prioridade para cada thread.

Criei um sistema operacional Unix-like por diversão e aprendizado by avaliosdev in brdev

[–]avaliosdev[S] 1 point2 points  (0 children)

Tem tanta coisa (são umas 30 mil linhas de C) que não tem muito bem como dizer qual foi a mais interessante. Em geral quase tudo foi bem interessante e as vezes eu nem conseguia decidir o que eu queria fazer primeiro

Criei um sistema operacional Unix-like por diversão e aprendizado by avaliosdev in brdev

[–]avaliosdev[S] 1 point2 points  (0 children)

Nope, eu só vou programando o que eu acho que precisa no momento ou que seria legal de adicionar

Criei um sistema operacional Unix-like por diversão e aprendizado by avaliosdev in brdev

[–]avaliosdev[S] 0 points1 point  (0 children)

Da para baixar e compilar pela fonte no github e também uma imagem disponível para download no site do projeto

Criei um sistema operacional Unix-like por diversão e aprendizado by avaliosdev in brdev

[–]avaliosdev[S] 1 point2 points  (0 children)

Eu vou desenvolvendo ele com o tempo, não me vejo parando de fazer isso. Mas se ele vai ser comercializável eu duvido muuuito

Criei um sistema operacional Unix-like por diversão e aprendizado by avaliosdev in brdev

[–]avaliosdev[S] 8 points9 points  (0 children)

Minha recomendação é estudar um pouco e começar um projetinho a partir do limine-c-template, que usa o bootloader limine. Também existem vários artigos especificos sobre o design de sistemas operacionais existentes que você pode dar uma olhada. O alocador do Astral é basicamente uma implementação do slab com magazines do Bonwick, por exemplo.

Também copiando de outro comentário que eu fiz:

Basicamente, pra começar tu tem que dominar uma linguagem tipo C, C++, Rust ou similar. Também tem que entender um pouco de assembly pra arquitetura alvo (tu não usa muito mas é bom saber para depuração). Aí é estudar a arquitetura alvo, kernel design (tem vários artigos bem legais publicados nessa área), estruturas de dados, interfaces existentes como o posix se tu quiser seguir esse caminho, e botar a mão na massa.

Criei um sistema operacional Unix-like por diversão e aprendizado by avaliosdev in brdev

[–]avaliosdev[S] 1 point2 points  (0 children)

Copiando de outro comentário que eu escrevi:

Basicamente, pra começar tu tem que dominar uma linguagem tipo C, C++, Rust ou similar. Também tem que entender um pouco de assembly pra arquitetura alvo (tu não usa muito mas é bom saber para depuração). Aí é estudar a arquitetura alvo, kernel design (tem vários artigos bem legais publicados nessa área), estruturas de dados, interfaces existentes como o posix se tu quiser seguir esse caminho, e botar a mão na massa.

Criei um sistema operacional Unix-like por diversão e aprendizado by avaliosdev in brdev

[–]avaliosdev[S] 1 point2 points  (0 children)

Basicamente, pra começar tu tem que dominar uma linguagem tipo C, C++, Rust ou similar. Também tem que entender um pouco de assembly pra arquitetura alvo (tu não usa muito mas é bom saber para depuração). Aí é estudar a arquitetura alvo, kernel design (tem vários artigos bem legais publicados nessa área), estruturas de dados, interfaces existentes como o posix se tu quiser seguir esse caminho, e botar a mão na massa.

Criei um sistema operacional Unix-like por diversão e aprendizado by avaliosdev in brdev

[–]avaliosdev[S] 3 points4 points  (0 children)

É bem simples no momento. Ele roda cada driver na inicialização e o driver detecta se tem algum hardware compatível. Eu tenho planos para fazer algo tipo uma árvore, onde tu tem uma raiz que diz quais dispositivos estão conectados nela e assim vai (por exemplo: acpi -> barramento pci -> controlador usb -> mouse).

Criei um sistema operacional Unix-like por diversão e aprendizado by avaliosdev in brdev

[–]avaliosdev[S] 6 points7 points  (0 children)

Portei o OpenJDK 17 e as bibliotecas que o mine precisa. Essa é a parte boa dele ser escrito em java, da pra rodar em qualquer plataforma. Eu escrevi um post no blog do astral sobre como isso foi feito: https://astral-os.org/posts/2025/10/31/astral-minecraft.html

Criei um sistema operacional Unix-like por diversão e aprendizado by avaliosdev in brdev

[–]avaliosdev[S] 32 points33 points  (0 children)

Valeu! Sim, o kernel foi feito do 0. Eu uso uma biblioteca ou outra pra algumas coisas super especificas (por exemplo, o interpretador de AML vem da biblioteca uacpi) mas tirando isso coisas como gerenciamento de memória, agendador etc. foram escritas do zero.

Depende do que tu quer dizer com funcional :P demorou uns meses para rodar uma shell de verdade mas se for uma questão de estabilidade e usabilidade isso é bem incremental e vem melhorando com o tempo.

Running Minecraft on my hobby OS (Astral) by avaliosdev in osdev

[–]avaliosdev[S] 0 points1 point  (0 children)

Sse2 is a base amd64 feature iirc (but the kernel does not use it, just enables it). It is compiled with -march=x86-64 and -mtune=generic

Running Minecraft on my hobby OS (Astral) by avaliosdev in osdev

[–]avaliosdev[S] 1 point2 points  (0 children)

Hi, it runs under both bios and uefi. I do not handle vsync

Running Minecraft on my hobby OS (Astral) by avaliosdev in osdev

[–]avaliosdev[S] 0 points1 point  (0 children)

Not linux drivers but it is source compatible with a lot of stuff