summaryrefslogtreecommitdiff
path: root/src/e_core_selector.rs
diff options
context:
space:
mode:
authorLennard Kittner <lennard@kittner.dev>2025-02-26 19:46:39 +0100
committerLennard Kittner <lennard@kittner.dev>2025-02-26 19:46:39 +0100
commit3e9a4de81fd0ca55b5e385f02ab4d982841498c4 (patch)
tree9bfcaf4b7694a56f6e89ca1f482d8ceacf352281 /src/e_core_selector.rs
parent7de5af67e21714a8e76f4e570478011a9b21901f (diff)
Added initial scheduler implementation
Diffstat (limited to 'src/e_core_selector.rs')
-rw-r--r--src/e_core_selector.rs30
1 files changed, 30 insertions, 0 deletions
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<u32>) -> 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