GnoCiYeH f0c87a897f
重写调度模块 (#679)
## PR:重写调度模块
--- 
### 完成的部分
- 实现cfs调度策略
- 搭建框架,后续功能可以迭代开发
- 目前能跑,未测试性能

### 需要后续接力的部分
- 实现组内调度(task_group)
- 实现跨核负载均衡(pelt算法)
- 接入sysfs,实现参数动态调节(sched_stat等)
- nice值以及priority等参数的设置及调优
2024-04-05 17:54:48 +08:00

68 lines
1.7 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

use super::Scheduler;
pub struct IdleScheduler;
impl Scheduler for IdleScheduler {
fn enqueue(
_rq: &mut super::CpuRunQueue,
_pcb: alloc::sync::Arc<crate::process::ProcessControlBlock>,
_flags: super::EnqueueFlag,
) {
// idle已经被设置无需入队
}
fn dequeue(
_rq: &mut super::CpuRunQueue,
_pcb: alloc::sync::Arc<crate::process::ProcessControlBlock>,
_flags: super::DequeueFlag,
) {
}
fn yield_task(_rq: &mut super::CpuRunQueue) {}
fn check_preempt_currnet(
rq: &mut super::CpuRunQueue,
_pcb: &alloc::sync::Arc<crate::process::ProcessControlBlock>,
_flags: super::WakeupFlags,
) {
rq.resched_current();
}
fn pick_task(
_rq: &mut super::CpuRunQueue,
) -> Option<alloc::sync::Arc<crate::process::ProcessControlBlock>> {
panic!()
}
/// ### 表示idle被选中
///
/// 主要做一些统计工作
fn pick_next_task(
_rq: &mut super::CpuRunQueue,
_pcb: Option<alloc::sync::Arc<crate::process::ProcessControlBlock>>,
) -> Option<alloc::sync::Arc<crate::process::ProcessControlBlock>> {
// TODO: Fixme
// 做一些统计工作
None
}
fn tick(
_rq: &mut super::CpuRunQueue,
_pcb: alloc::sync::Arc<crate::process::ProcessControlBlock>,
_queued: bool,
) {
// Nothing to do
}
fn task_fork(_pcb: alloc::sync::Arc<crate::process::ProcessControlBlock>) {
todo!()
}
fn put_prev_task(
_rq: &mut super::CpuRunQueue,
_prev: alloc::sync::Arc<crate::process::ProcessControlBlock>,
) {
// Nothing todo
}
}