kernel::scheduler::mlfq

Struct MLFQSched

Source
pub struct MLFQSched<'a, A: 'static + Alarm<'static>> {
    pub processes: [List<'a, MLFQProcessNode<'a>>; 3],
    /* private fields */
}

Fields§

§processes: [List<'a, MLFQProcessNode<'a>>; 3]

Implementations§

Source§

impl<'a, A: 'static + Alarm<'static>> MLFQSched<'a, A>

Source

pub const PRIORITY_REFRESH_PERIOD_MS: u32 = 5_000u32

How often to restore all processes to max priority

Source

pub const NUM_QUEUES: usize = 3usize

Source

pub fn new(alarm: &'static A) -> Self

Trait Implementations§

Source§

impl<A: 'static + Alarm<'static>, C: Chip> Scheduler<C> for MLFQSched<'_, A>

Source§

fn next(&self) -> SchedulingDecision

Decide which process to run next. Read more
Source§

fn result(&self, result: StoppedExecutingReason, execution_time_us: Option<u32>)

Inform the scheduler of why the last process stopped executing, and how long it executed for. Notably, execution_time_us will be None if the the scheduler requested this process be run cooperatively.
Source§

unsafe fn continue_process(&self, _: ProcessId, _: &C) -> bool

Ask the scheduler whether to continue trying to execute a process. Read more
Source§

unsafe fn execute_kernel_work(&self, chip: &C)

Tell the scheduler to execute kernel work such as interrupt bottom halves and dynamic deferred calls. Most schedulers will use this default implementation, but schedulers which at times wish to defer interrupt handling will reimplement it. Read more
Source§

unsafe fn do_kernel_work_now(&self, chip: &C) -> bool

Ask the scheduler whether to take a break from executing userspace processes to handle kernel tasks. Most schedulers will use this default implementation, which always prioritizes kernel work, but schedulers that wish to defer interrupt handling may reimplement it.

Auto Trait Implementations§

§

impl<'a, A> !Freeze for MLFQSched<'a, A>

§

impl<'a, A> !RefUnwindSafe for MLFQSched<'a, A>

§

impl<'a, A> !Send for MLFQSched<'a, A>

§

impl<'a, A> !Sync for MLFQSched<'a, A>

§

impl<'a, A> Unpin for MLFQSched<'a, A>
where <A as Time>::Ticks: Unpin,

§

impl<'a, A> !UnwindSafe for MLFQSched<'a, A>

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

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

Source§

type Error = Infallible

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

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

Performs the conversion.
Source§

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

Source§

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

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

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

Performs the conversion.