book/src/development/design/kernel.md

35 lines
1.6 KiB
Markdown

# Microkernel
The core `kernel` of **Mercury** will be highly limited, implementing only necessary portions.
This allows other functionality to be simply run in userspace.
Additionally, most code should be put into separate libraries then pulled into the `kernel` code.
This will likely be done via `git submodules`.
Initially, it will be built for `RISC-V`, then `ARM` *(focused on running in a [VM](/user/virtual-machine.md))*, then on a **Raspberry Pi**.
Afterwards, we can put focus towards building out various features.
Support for multiple targets will be done via `Cargo.toml` targets, cross-compilation, and [conditional compilation](https://doc.rust-lang.org/reference/conditional-compilation.html).
## Concurrency
For performance, we will be using various concurrency programming techniques.
For **IO** intensive operations, `async` will be used.
This will include the [filesystem](/development/design/filesystem.md), [actors](/development/design/actor.md), and [GUI](/development/design/gui.md).
**CPU**-bound operations are better suited to individual `threads`, however.
This might include operations like *hashing*, *encryption*, and *indexing*.
## Boot Process
*To be implemented*
## Memory Management
*To-Do*
## Processes
*To-Do*
- [postcard](https://lib.rs/crates/postcard) for message passing
## Error Handling
All errors must be handled gracefully by the `kernel`. If possible, they should simply log an error.
If not, they can display it to the user, preferably in a simple format, maybe using something like [const_panic](https://lib.rs/crates/const_panic) or [snafu](https://lib.rs/crates/snafuhttps://lib.rs/crates/snafu).