xous-core/kernel
Sean Cross 4ec43363f5 kernel: don't always context-switch on message return
Currently, returning a Message (e.g. a Scalar1, Scalar2, or
MemoryMessage) always results in a context switch from the server to the
client. This is what makes these syscalls cheaper.

However, this results in process starvation. For example, if three
processes send a message to a server, then the server will only be able
to respond to one of those messages at a time. This works well with a
lightly-loaded system, but quickly falls apart when many threads are
running.

Keep track of which process and thread were originally switched to as
part of the `SwitchTo` call. If the Server is responding to a message
and owns the current quantum, don't immediately switch to the Client
thread.

Signed-off-by: Sean Cross <sean@xobs.io>
2023-02-01 10:19:07 +08:00
..
bin kernel: compatibility with riscv32imac-unknown-xous-elf 2021-08-18 18:14:24 +08:00
src kernel: don't always context-switch on message return 2023-02-01 10:19:07 +08:00
assemble.ps1 kernel: compatibility with riscv32imac-unknown-xous-elf 2021-08-18 18:14:24 +08:00
assemble.sh Switch to using env to find the path to bash. 2022-03-28 16:43:47 -06:00
build.rs xous: Use CARGO_CFG_TARGET_OS in build scripts. 2022-10-12 19:03:46 +02:00
Cargo.toml bump versions to absorb xous-names fix 2023-01-31 15:07:32 +08:00
link.x add an "endcap" to the kernel region 2023-01-17 23:07:05 +08:00
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.

  1. 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 use riscv32imac-unknown-none-elf.
  2. Get Rust. Go to https://rustup.rs/ and follow its instructions.
  3. Install the proper toolchain: rustup target add ${target_arch}
  4. 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

Contributor Covenant

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.