Struct Scheduler

Source
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

Source

pub const fn new() -> Self

Source

pub fn add_task(&mut self, task: Task, cpu_id: usize)

Source

fn run(&mut self, cpu: &mut Arch)

Source

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
Source

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
Source

pub fn start_scheduler(&mut self)

Source

pub fn get_current_task(&mut self, cpu_id: usize) -> Option<&mut Task>

Source

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.

Source

pub fn wake_task(&mut self, task_id: usize) -> bool

Move a task from blocked queue to ready queue when it’s woken up

This method is called by Waker when a blocked task needs to be woken up.

§Arguments
  • task_id - The ID of the task to move to ready queue
§Returns

true if the task was found and moved, false otherwise

Auto Trait Implementations§

§

impl Freeze for Scheduler

§

impl !RefUnwindSafe for Scheduler

§

impl !Send for Scheduler

§

impl !Sync for Scheduler

§

impl Unpin for Scheduler

§

impl !UnwindSafe for Scheduler

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.