pub struct Scheduler {
ready_queue: [VecDeque<Task>; 2],
blocked_queue: [VecDeque<Task>; 2],
zombie_queue: [VecDeque<Task>; 2],
dispatcher: [Dispatcher; 2],
interval: u64,
current_task_id: [Option<usize>; 2],
}
Fields§
§ready_queue: [VecDeque<Task>; 2]
Queue for ready-to-run tasks
blocked_queue: [VecDeque<Task>; 2]
Queue for blocked tasks (waiting for I/O, etc.)
zombie_queue: [VecDeque<Task>; 2]
Queue for zombie tasks (finished but not yet cleaned up)
dispatcher: [Dispatcher; 2]
§interval: u64
§current_task_id: [Option<usize>; 2]
Implementations§
Source§impl Scheduler
impl Scheduler
pub const fn new() -> Self
pub fn add_task(&mut self, task: Task, cpu_id: usize)
fn run(&mut self, cpu: &mut Arch)
Sourcepub fn schedule(&mut self, cpu: &mut Arch) -> !
pub fn schedule(&mut self, cpu: &mut Arch) -> !
Schedule tasks on the CPU, saving the currently running task’s state
This function is called by the timer interrupt handler. It saves the current task’s state and switches to the next task.
§Arguments
cpu
- The CPU architecture state
Sourcepub fn schedule_initial(&mut self, cpu: &mut Arch) -> !
pub fn schedule_initial(&mut self, cpu: &mut Arch) -> !
Schedule tasks on the CPU without current task (for initial startup)
This function is called at initial startup when there is no current task to save state for. It should only be used during system initialization.
§Arguments
cpu
- The CPU architecture state
pub fn start_scheduler(&mut self)
pub fn get_current_task(&mut self, cpu_id: usize) -> Option<&mut Task>
Sourcepub fn get_task_by_id(&mut self, task_id: usize) -> Option<&mut Task>
pub fn get_task_by_id(&mut self, task_id: usize) -> Option<&mut Task>
Returns a mutable reference to the task with the specified ID, if found.
This method searches across all task queues (ready, blocked, zombie) to find the task with the specified ID. This is needed for Waker integration.
§Arguments
task_id
- The ID of the task to search for.
§Returns
A mutable reference to the task if found, or None otherwise.