35 lines
1.6 KiB
Markdown
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).
|