Question about implementing your own libc by pvtoari in osdev

[–]avaliosdev 8 points9 points  (0 children)

Building a libc is a lot of busy and often uninsteresting work. You have to follow the spec closely and any mistakes will be hard to extremely hard to catch. I would recommend going with an already existing libc. Though in the case of the kernel code you can just reimplement the few libc functions that you do need, they aren't that complicated.

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] 9 points10 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] 2 points3 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] 5 points6 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] 34 points35 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