[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
|
**jsix** is a custom multi-core x64 operating system that I am building from
|
||||||
from finished, or even being usable. Instead, it's a sandbox for me to play
|
scratch. It's far from finished, or even being usable - see the *Status and
|
||||||
with kernel-level code and explore architectures.
|
Roadmap* section, below.
|
||||||
|
|
||||||
The design goals of the project are:
|
The design goals of the project are:
|
||||||
|
|
||||||
@@ -23,9 +23,8 @@ The design goals of the project are:
|
|||||||
by the traditional microkernel problems.
|
by the traditional microkernel problems.
|
||||||
|
|
||||||
* Exploration - I'm really mostly doing this to have fun learning and exploring
|
* Exploration - I'm really mostly doing this to have fun learning and exploring
|
||||||
modern OS development. Modular design may be tossed out (hopefully
|
modern OS development. Initial feature implementations may temporarily throw
|
||||||
temporarily) in some places to allow me to play around with the related
|
away modular design to allow for exploration of the related hardware.
|
||||||
hardware.
|
|
||||||
|
|
||||||
A note on the name: This kernel was originally named Popcorn, but I have since
|
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
|
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
|
[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
|
## Building
|
||||||
|
|
||||||
jsix uses the [Ninja][] build tool, and generates the build files for it with a
|
jsix uses the [Ninja][] build tool, and generates the build files for it with a
|
||||||
|
|||||||
Reference in New Issue
Block a user