1*f0c87a89SGnoCiYeH use super::Scheduler; 2*f0c87a89SGnoCiYeH 3*f0c87a89SGnoCiYeH pub struct IdleScheduler; 4*f0c87a89SGnoCiYeH 5*f0c87a89SGnoCiYeH impl Scheduler for IdleScheduler { enqueue( _rq: &mut super::CpuRunQueue, _pcb: alloc::sync::Arc<crate::process::ProcessControlBlock>, _flags: super::EnqueueFlag, )6*f0c87a89SGnoCiYeH fn enqueue( 7*f0c87a89SGnoCiYeH _rq: &mut super::CpuRunQueue, 8*f0c87a89SGnoCiYeH _pcb: alloc::sync::Arc<crate::process::ProcessControlBlock>, 9*f0c87a89SGnoCiYeH _flags: super::EnqueueFlag, 10*f0c87a89SGnoCiYeH ) { 11*f0c87a89SGnoCiYeH // idle已经被设置,无需入队 12*f0c87a89SGnoCiYeH } 13*f0c87a89SGnoCiYeH dequeue( _rq: &mut super::CpuRunQueue, _pcb: alloc::sync::Arc<crate::process::ProcessControlBlock>, _flags: super::DequeueFlag, )14*f0c87a89SGnoCiYeH fn dequeue( 15*f0c87a89SGnoCiYeH _rq: &mut super::CpuRunQueue, 16*f0c87a89SGnoCiYeH _pcb: alloc::sync::Arc<crate::process::ProcessControlBlock>, 17*f0c87a89SGnoCiYeH _flags: super::DequeueFlag, 18*f0c87a89SGnoCiYeH ) { 19*f0c87a89SGnoCiYeH } 20*f0c87a89SGnoCiYeH yield_task(_rq: &mut super::CpuRunQueue)21*f0c87a89SGnoCiYeH fn yield_task(_rq: &mut super::CpuRunQueue) {} 22*f0c87a89SGnoCiYeH check_preempt_currnet( rq: &mut super::CpuRunQueue, _pcb: &alloc::sync::Arc<crate::process::ProcessControlBlock>, _flags: super::WakeupFlags, )23*f0c87a89SGnoCiYeH fn check_preempt_currnet( 24*f0c87a89SGnoCiYeH rq: &mut super::CpuRunQueue, 25*f0c87a89SGnoCiYeH _pcb: &alloc::sync::Arc<crate::process::ProcessControlBlock>, 26*f0c87a89SGnoCiYeH _flags: super::WakeupFlags, 27*f0c87a89SGnoCiYeH ) { 28*f0c87a89SGnoCiYeH rq.resched_current(); 29*f0c87a89SGnoCiYeH } 30*f0c87a89SGnoCiYeH pick_task( _rq: &mut super::CpuRunQueue, ) -> Option<alloc::sync::Arc<crate::process::ProcessControlBlock>>31*f0c87a89SGnoCiYeH fn pick_task( 32*f0c87a89SGnoCiYeH _rq: &mut super::CpuRunQueue, 33*f0c87a89SGnoCiYeH ) -> Option<alloc::sync::Arc<crate::process::ProcessControlBlock>> { 34*f0c87a89SGnoCiYeH panic!() 35*f0c87a89SGnoCiYeH } 36*f0c87a89SGnoCiYeH 37*f0c87a89SGnoCiYeH /// ### 表示idle被选中 38*f0c87a89SGnoCiYeH /// 39*f0c87a89SGnoCiYeH /// 主要做一些统计工作 pick_next_task( _rq: &mut super::CpuRunQueue, _pcb: Option<alloc::sync::Arc<crate::process::ProcessControlBlock>>, ) -> Option<alloc::sync::Arc<crate::process::ProcessControlBlock>>40*f0c87a89SGnoCiYeH fn pick_next_task( 41*f0c87a89SGnoCiYeH _rq: &mut super::CpuRunQueue, 42*f0c87a89SGnoCiYeH _pcb: Option<alloc::sync::Arc<crate::process::ProcessControlBlock>>, 43*f0c87a89SGnoCiYeH ) -> Option<alloc::sync::Arc<crate::process::ProcessControlBlock>> { 44*f0c87a89SGnoCiYeH // TODO: Fixme 45*f0c87a89SGnoCiYeH // 做一些统计工作 46*f0c87a89SGnoCiYeH None 47*f0c87a89SGnoCiYeH } 48*f0c87a89SGnoCiYeH tick( _rq: &mut super::CpuRunQueue, _pcb: alloc::sync::Arc<crate::process::ProcessControlBlock>, _queued: bool, )49*f0c87a89SGnoCiYeH fn tick( 50*f0c87a89SGnoCiYeH _rq: &mut super::CpuRunQueue, 51*f0c87a89SGnoCiYeH _pcb: alloc::sync::Arc<crate::process::ProcessControlBlock>, 52*f0c87a89SGnoCiYeH _queued: bool, 53*f0c87a89SGnoCiYeH ) { 54*f0c87a89SGnoCiYeH // Nothing to do 55*f0c87a89SGnoCiYeH } 56*f0c87a89SGnoCiYeH task_fork(_pcb: alloc::sync::Arc<crate::process::ProcessControlBlock>)57*f0c87a89SGnoCiYeH fn task_fork(_pcb: alloc::sync::Arc<crate::process::ProcessControlBlock>) { 58*f0c87a89SGnoCiYeH todo!() 59*f0c87a89SGnoCiYeH } 60*f0c87a89SGnoCiYeH put_prev_task( _rq: &mut super::CpuRunQueue, _prev: alloc::sync::Arc<crate::process::ProcessControlBlock>, )61*f0c87a89SGnoCiYeH fn put_prev_task( 62*f0c87a89SGnoCiYeH _rq: &mut super::CpuRunQueue, 63*f0c87a89SGnoCiYeH _prev: alloc::sync::Arc<crate::process::ProcessControlBlock>, 64*f0c87a89SGnoCiYeH ) { 65*f0c87a89SGnoCiYeH // Nothing todo 66*f0c87a89SGnoCiYeH } 67*f0c87a89SGnoCiYeH } 68