1 pub mod cfs; 2 pub mod completion; 3 pub mod core; 4 pub mod rt; 5 pub mod syscall; 6 7 /// 调度策略 8 #[allow(dead_code)] 9 #[derive(Debug, Clone, Copy, PartialEq, Eq)] 10 pub enum SchedPolicy { 11 /// 完全公平调度 12 CFS, 13 /// 先进先出调度 14 FIFO, 15 /// 轮转调度 16 RR, 17 } 18 19 /// 调度优先级 20 #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] 21 pub struct SchedPriority(i32); 22 23 impl SchedPriority { 24 const MIN: i32 = 0; 25 const MAX: i32 = 139; 26 27 /// 创建一个新的调度优先级 new(priority: i32) -> Option<Self>28 pub const fn new(priority: i32) -> Option<Self> { 29 if Self::validate(priority) { 30 Some(Self(priority)) 31 } else { 32 None 33 } 34 } 35 36 /// 校验优先级是否合法 validate(priority: i32) -> bool37 pub const fn validate(priority: i32) -> bool { 38 priority >= Self::MIN && priority <= Self::MAX 39 } 40 data(&self) -> i3241 pub fn data(&self) -> i32 { 42 self.0 43 } 44 } 45 46 pub trait SchedArch { 47 /// 开启当前核心的调度 enable_sched_local()48 fn enable_sched_local(); 49 /// 关闭当前核心的调度 disable_sched_local()50 fn disable_sched_local(); 51 52 /// 在第一次开启调度之前,进行初始化工作。 53 /// 54 /// 注意区别于sched_init,这个函数只是做初始化时钟的工作等等。 initial_setup_sched_local()55 fn initial_setup_sched_local() {} 56 } 57