From cf22ed57a24ed1105e85a8f240f1b930e2f1ba49 Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Wed, 17 Feb 2021 00:47:12 -0800 Subject: [PATCH] [docs] Update the README with roadmap info --- README.md | 74 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 67 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index aa018be..d6d1c89 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ ![jsix](assets/jsix.svg) -# jsix: A hobby operating system +# The jsix operating system -**jsix** is the hobby operating system that I am currently building. It's far -from finished, or even being usable. Instead, it's a sandbox for me to play -with kernel-level code and explore architectures. +**jsix** is a custom multi-core x64 operating system that I am building from +scratch. It's far from finished, or even being usable - see the *Status and +Roadmap* section, below. The design goals of the project are: @@ -23,9 +23,8 @@ The design goals of the project are: by the traditional microkernel problems. * Exploration - I'm really mostly doing this to have fun learning and exploring - modern OS development. Modular design may be tossed out (hopefully - temporarily) in some places to allow me to play around with the related - hardware. + modern OS development. Initial feature implementations may temporarily throw + away modular design to allow for exploration of the related hardware. A note on the name: This kernel was originally named Popcorn, but I have since discovered that the Popcorn Linux project is also developing a kernel with that @@ -35,6 +34,67 @@ and my wonderful wife. [cpu_features]: https://github.com/justinian/jsix/blob/master/src/libraries/cpu/include/cpu/features.inc +## Status and Roadmap + +The following major feature areas are targets for jsix development: + +#### UEFI boot loader + +_Done._ The bootloader loads the kernel and initial userspace programs, and +sets up necessary kernel arguments about the memory map and EFI GOP +framebuffer. Possible future ideas: + +- take over more init-time functions from the kernel +- rewrite it in Zig + +#### Memory + +_Virtual memory: Sufficient._ The kernel manages virtual memory with a number +of kinds of `vm_area` objects representing mapped areas, which can belong to +one or more `vm_space` objects which represent a whole virtual memory space. +(Each process has a `vm_space`, and so does the kernel itself.) + +Remaining to do: + +- TLB shootdowns +- Page swapping + +_Physical page allocation: Sufficient._ The current physical page allocator +implementation suses a group of block representing up-to-1GiB areas of usable +memory as defined by the bootloader. Each block has a three-level bitmap +denoting free/used pages. + +#### Multitasking + +_Sufficient._ The global scheduler object keeps separate ready/blocked lists +per core. Cores periodically attempt to balance load via work stealing. + +User-space tasks are able to create threads as well as other processes. + +Several kernel-only tasks exist, though I'm trying to reduce that. Eventually +only the timekeeping task should be a separate kernel-only thread. + +#### API + +_In progress._ User-space tasks are able to make syscalls to the kernel via +fast SYSCALL/SYSRET instructions. + +Major tasks still to do: + +- The process initialization protocol needs to be re-built entirely. +- Processes' handles to kernel objects need the ability to check capabilities + +#### Hardware Support + + * Framebuffer driver: _In progress._ Currently on machines with a video + device accessible by UEFI, jsix starts a user-space framebuffer driver that + only prints out kernel logs. + * Serial driver: _To do._ Machines without a video device should have a + user-space log output task like the framebuffer driver, but currently this + is done inside the kernel. + * USB driver: _To do_ + * AHCI (SATA) driver: _To do_ + ## Building jsix uses the [Ninja][] build tool, and generates the build files for it with a