diff --git a/README.md b/README.md index 2141595..a05133e 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,44 @@ # Writing an Operating system -## As a learning experience... Inspired by people like.. Linus Torvalds and Andreas Kling - +## As a learning experience! + Inspired by people like Linus Torvalds and Andreas Kling +________________________ +### Screenshot(s) +Coming soon ... + +________________________ ### 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. - +The operating system can print strings to the +screen. The terminal/screen has scrolling so the latest messages are visible on the screen. +________________________ ### Planning +[See TODO](TODO.md) -[x] 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 - - - +________________________ +### Docs +[Intro](docs/Intro.md) \ +[Manuals](docs/Manuals.md) \ +[Project structure](docs/ProjectStructure.md) +________________________ ### Resources: +#### General kernel stuff [wiki.osdev.org/Main_Page](wiki.osdev.org/Main_Page) [Modern Operating Systems [book]](https://www.amazon.com/Modern-Operating-Systems-Tanenbaum-Andrew/dp/1292061421/ref=sr_1_1?__mk_nl_NL=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=Modern+Operating+systems&qid=1619967779&sr=8-1) +[whiteheadsoftware.dev](https://whiteheadsoftware.dev/operating-systems-development-for-dummies/) + +#### More specific stuff +[VFS explained: science.unitn.it](https://www.science.unitn.it/~fiorella/guidelinux/tlk/node102.html) + -[whiteheadsoftware.dev](https://whiteheadsoftware.dev/operating-systems-development-for-dummies/) \ No newline at end of file diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..4e545dc --- /dev/null +++ b/TODO.md @@ -0,0 +1,40 @@ +# TODO list +## Start planning + Setup Cross-Compiler \ + Multiboot to kernel \ + Printing string to the screen \ + Printing values/numbers to the screen (a.k.k itoa) \ + Extend Multiboot implementation \ + Output to serial port \ + Move to protected mode \ + Enabel CMOS clock \ + Time measurement (PIC &| PIT) \ + Detect CPU speed \ + Interrupt / exception system (API) \ + + 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. \ + Enable SIMD Extensions (SSE) + +## Other features I am thinking of: + PCI support \ + ATA PIO Mode support \ + USTAR Filesystem ( For its simplicity this is very likely the first filesystem the OS is going to support) \ + ACPI support ( Or some other basic way to support shutdown, reboot and possibly hibernation ) \ + ATAPI support \ + Keyboard support ( P/S2 Keyboard) \ + Memory Management (MMU)\ + Preemptive multi tasking + Processes + Threads + Scheduling (SRV2 Unix OR Priority Based Round Robin) \ + System V ABI compliance (partially) + POSIX compliance (partially) + RPC - for interprocess communication \ + Sync primitives - Semaphores, Mutexes, spinlocks et al. \ + Basic Terminal \ + Extend hardware recognition ( CPU codename, memory, ATA harddisk, RAW diskSpace, CPU speed through SMBIOS et al. ) \ + Basic Window server/client \ +## Support for more filesystems if I like the challenge in writing these ... + FAT Filesystem \ + EXT2 Filesystem \ \ No newline at end of file