From 3e9a4de81fd0ca55b5e385f02ab4d982841498c4 Mon Sep 17 00:00:00 2001 From: Lennard Kittner Date: Wed, 26 Feb 2025 19:46:39 +0100 Subject: Added initial scheduler implementation --- src/e_core_selector.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/e_core_selector.rs (limited to 'src/e_core_selector.rs') diff --git a/src/e_core_selector.rs b/src/e_core_selector.rs new file mode 100644 index 0000000..76d8233 --- /dev/null +++ b/src/e_core_selector.rs @@ -0,0 +1,30 @@ +use std::ops::Range; + +pub trait ECoreSelector { + fn next_core(&mut self) -> i32; +} + +//TODO: better core selection e.g. try to leave task on the same core +pub struct RoundRobinSelector { + offset: u32, + num_cores: u32, + last_used: u32 +} + +impl RoundRobinSelector { + //TODO: use range instead + pub fn new(e_cores: Range) -> RoundRobinSelector { + Self { + offset: e_cores.start, + num_cores: e_cores.len() as u32, + last_used: 0, + } + } +} + +impl ECoreSelector for RoundRobinSelector { + fn next_core(&mut self) -> i32 { + self.last_used += 1; + (self.last_used % self.num_cores) as i32 + } +} \ No newline at end of file -- cgit v1.3.1