Hi HN, I’m Dvir, a young developer. Last year, I got rejected after a job interview because I lacked some CPU knowledge. After that, I decided to deepen my understanding in the low level world and learn how things work under the hood. I decided to try and create an OS in C and ASM as a way to broaden my knowledge in this area.
This took me on the most interesting ride, where I’ve learned about OS theory and low level programming on a whole new level. I’ve spent hours upon hours, blood and tears, while reading different OS theory blogs, learning low level concepts, debugging, testing and working on this project.
I started by reading University books and online blogs, while also watching videos.
Some sources that helped me out were OSDev Wiki (https://wiki.osdev.org/Expanded_Main_Page), OSTEP (https://pages.cs.wisc.edu/~remzi/OSTEP), open-source repositories like MellOS and LemonOS (more advanced), DoomGeneric, and some friends that have built an OS before.
This part was the longest, but also the easiest. I felt like I understood the theory, but still could not connect it into actual code. Sitting down and starting to code was difficult, but I knew that was the next step I needed to take!
I began by working on the bootloader, which is optional since you can use a pre-made one (I too switched to GRUB later), but implementing it was mainly for learning purposes and to warm up on ASM. These were my steps after that:
1) I started implementing the VGA driver, which gave me the ability to display text.
2) Interrupts - IDT, ISR, IRQ, which signal to the CPU that a certain event occurred and
needs handling (such as faults, hardware connected device actions, etc).
3) Keyboard driver, which enables me to display the same text I type on my keyboard.
4) PMM (Physical memory management)
5) Paging and virtual memory management
6) RTC driver - clock addition (which was, in my opinion, optional)
7) PIT driver - Ticks every certain amount of time, and also
8) FS (File System) and physical HDD drivers - for the HDD I chose PATA (HDD
communication protocol) for simplicity (SATA is a newer but harder option as well).
For the FS I chose EXT2 (The Second Extended FileSystem), which is a foundational
linux FS structure introduced in 1993. This FS structure is not the simplest, but is very
popular in hobby-OS, it is very supported, easy to set up and upgrade to newer EXT
versions, it has a lot of materials online, compared to other options.
This was probably the longest and largest feature I had worked on.
9) Syscall support.
10) Libc implementation.
11) Processing and scheduling for multiprocessing.
12) Here I also made a shell to test it all.
Comments URL: https://news.ycombinator.com/item?id=45715241
Points: 1
# Comments: 0
Source: github.com
