mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 08:24:32 -08:00
[docs] Update the README with roadmap info
This commit is contained in:
74
README.md
74
README.md
@@ -1,10 +1,10 @@
|
||||

|
||||
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user