Building a Kernel / Operating system from scratch.
Go to file
2021-05-02 12:04:15 -04:00
docs Initial setup, Basic helloworld kernel from wiki.osdev.org bare bones 2021-05-02 12:02:00 -04:00
src Added newline support for kterm 2021-05-02 12:04:15 -04:00
.gitignore Initial setup, Basic helloworld kernel from wiki.osdev.org bare bones 2021-05-02 12:02:00 -04:00
build.sh Initial setup, Basic helloworld kernel from wiki.osdev.org bare bones 2021-05-02 12:02:00 -04:00
README.md Initial setup, Basic helloworld kernel from wiki.osdev.org bare bones 2021-05-02 12:02:00 -04:00

Writing an Operating system

As a learning experience... Inspired by people like.. Linus Torvalds and Andreas Kling

The goal

Writing a hobby operating system to better understand the basic building blocks of any operating system.

Operating System Technical specs/details

Currently the operating system is in the planning fase. I hope to soon have the basic output and booting sequence with multiboot done.

Planning

[ ] Muliboot to kernel
[ ] Printing strings and integer numbers (both decimal and hex) on the screen is certainly a must. This is one of most basic ways of debugging, and virtually all of us have gone through a kprint() or kout in version 0.01.
[ ] Outputting to a serial port will save you a lot of debugging time. You don't have to fear losing information due to scrolling. You will be able to test your OS from a console, filter interesting debug messages, and automatize some tests.
[ ] Having a working and reliable interrupt/exception handling system that can dump the contents of the registers (and perhaps the address of the fault) will be very useful.
[ ] Plan your memory map (virtual, and physical) : decide where you want the data to be.
[ ] The heap: allocating memory at runtime (malloc and free) is almost impossible to go without. It should be implemented as soon as possible.

Other features I am thinking of:

[ ] USTAR Filesystem ( For its simplicity this is very likely the first filesystem the OS is going to support)
[ ] Memory Management
[ ] Scheduling (Unknown what the scheduling algorithm will be, as with everything suspect simplicity)
[ ] RPC - for interprocess communication
[ ] Sync primitives - Semaphores, Mutexes, spinlocks et al.
[ ] ACPI support ( Or some other basic way to support shutdown, reboot and possibly hibernation )
[ ] ATA support
[ ] Keyboard support ( must have )
[ ] Basic hardware recognition ( CPU codename, memory, ATA harddisk, RAW diskSpace, CPU speed et al. )
[ ] Basic Terminal
[ ] Simplistic draw ( maybe ?!?) \

Far in the future: \

[ ] Basic Window server/client

Support for more filesystems if I like the challenge in writing these ...

[ ] FAT Filesystem [ ] EXT2 Filesystem

Resources:

wiki.osdev.org/Main_Page

Modern Operating Systems [book]