|
@@ -15,8 +15,7 @@ use crate::{
|
|
|
use super::core::{sched_enqueue, Scheduler};
|
|
|
|
|
|
/// 声明全局的cfs调度器实例
|
|
|
-
|
|
|
-pub static mut CFS_SCHEDULER_PTR: *mut SchedulerCFS = null_mut();
|
|
|
+pub static mut CFS_SCHEDULER_PTR: Option<Box<SchedulerCFS>> = None;
|
|
|
|
|
|
/// @brief 获取cfs调度器实例的可变引用
|
|
|
#[inline]
|
|
@@ -26,18 +25,18 @@ pub fn __get_cfs_scheduler() -> &'static mut SchedulerCFS {
|
|
|
|
|
|
/// @brief 初始化cfs调度器
|
|
|
pub unsafe fn sched_cfs_init() {
|
|
|
- if CFS_SCHEDULER_PTR.is_null() {
|
|
|
- CFS_SCHEDULER_PTR = Box::leak(Box::new(SchedulerCFS::new()));
|
|
|
+ if CFS_SCHEDULER_PTR.is_none() {
|
|
|
+ CFS_SCHEDULER_PTR = Some(Box::new(SchedulerCFS::new()));
|
|
|
} else {
|
|
|
kBUG!("Try to init CFS Scheduler twice.");
|
|
|
panic!("Try to init CFS Scheduler twice.");
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// @brief CFS队列(per-cpu的)
|
|
|
#[derive(Debug)]
|
|
|
struct CFSQueue {
|
|
|
- /// 当前cpu上执行的进程,剩余的时间片
|
|
|
+ /// 当前cpu上执行的进程剩余的时间片
|
|
|
cpu_exec_proc_jiffies: i64,
|
|
|
/// 队列的锁
|
|
|
lock: RawSpinlock,
|
|
@@ -100,7 +99,7 @@ impl CFSQueue {
|
|
|
}
|
|
|
}
|
|
|
/// 获取运行队列的长度
|
|
|
- pub fn get_cfs_queue_size(&mut self) -> usize {
|
|
|
+ fn get_cfs_queue_size(&mut self) -> usize {
|
|
|
return self.queue.len();
|
|
|
}
|
|
|
}
|