diff options
| author | Lennard Kittner <lennard@kittner.dev> | 2025-02-26 19:46:39 +0100 |
|---|---|---|
| committer | Lennard Kittner <lennard@kittner.dev> | 2025-02-26 19:46:39 +0100 |
| commit | 3e9a4de81fd0ca55b5e385f02ab4d982841498c4 (patch) | |
| tree | 9bfcaf4b7694a56f6e89ca1f482d8ceacf352281 /src/e_core_selector.rs | |
| parent | 7de5af67e21714a8e76f4e570478011a9b21901f (diff) | |
Added initial scheduler implementation
Diffstat (limited to 'src/e_core_selector.rs')
| -rw-r--r-- | src/e_core_selector.rs | 30 |
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 |
