instead of sending scalar messages on every page alloc/free, which is a lot of traffic, introduce an API where the swapper can request a snapshot of the alloc status by mapping the kernel's alloc table as a read-only structure into the swapper's memory space, and then invoking the swapper in its interrupt context to read that out. The structure is unmapped on return from the context. additionally, a running tally of free space is now maintained and this can be queried with a fast syscall. Thus, the normal workflow is the swapper would have a timer that periodically queries the kernel's free space level, and when it falls below a critical amount, it will invoke the expensive snapshot. this can also be extended so that the kernel can call into the swapper's interrupt context with a "help, OOM imminent" message down the road. |
||
|---|---|---|
| .. | ||
| bin | ||
| src | ||
| assemble.ps1 | ||
| assemble.sh | ||
| build.rs | ||
| Cargo.toml | ||
| link.x | ||
| README.md | ||
Xous Kernel
This contains the core kernel for Xous. It requires a stage 1 loader in order to start up, as it assumes the system is already running in Supervisor mode.
Building
To build the kernel, you will need a riscv32 target for Rust. Possible
targets include riscv32i-unknown-none-elf, riscv32imac-unknown-none-elf,
or riscv32imac-unknown-xous-elf.
- Decide what target you want. For simple, embedded systems this could
be
riscv32i-unknown-none-elf, and for more complex systems with compressed instructions you could useriscv32imac-unknown-none-elf. - Get Rust. Go to https://rustup.rs/ and follow its instructions.
- Install the proper toolchain:
rustup target add ${target_arch} - Build the kernel:
cargo build --release --target ${target_arch}
Using
To use the kernel, you must package it up into an arguments binary with
xous-tools.
Testing
TBD
Contribution Guidelines
Please see CONTRIBUTING for details on how to make a contribution.
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide its terms.
License
Copyright © 2020
This project is licensed under the Apache License 2.0 LICENSE. For accurate information, please check individual files.