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