Contur 2
Educational OS kernel simulator
Loading...
Searching...
No Matches
contur::Scheduler Class Referencefinal

Scheduler host that manages process queues and policy decisions. More...

#include <scheduler.h>

Inheritance diagram for contur::Scheduler:

Public Member Functions

 Scheduler (std::unique_ptr< ISchedulingPolicy > policy, ITracer &tracer)
 Constructs scheduler with initial policy.
 ~Scheduler () override
 Destroys scheduler.
 Scheduler (const Scheduler &)=delete
 Copy construction is disabled.
Scheduleroperator= (const Scheduler &)=delete
 Copy assignment is disabled.
 Scheduler (Scheduler &&) noexcept
 Move-constructs scheduler state.
Scheduleroperator= (Scheduler &&) noexcept
 Move-assigns scheduler state.
Result< void > enqueue (PCB &pcb, Tick currentTick) override
 Enqueues process into ready queue.
Result< void > dequeue (ProcessId pid) override
 Removes process from scheduler tracking.
Result< ProcessIdselectNext (const IClock &clock) override
 Selects next process according to active policy.
Result< void > blockRunning (Tick currentTick) override
 Moves running process to blocked state.
Result< void > blockProcess (ProcessId pid, Tick currentTick) override
 Moves a specific process to blocked state.
Result< void > unblock (ProcessId pid, Tick currentTick) override
 Moves blocked process back to ready queue.
Result< void > terminate (ProcessId pid, Tick currentTick) override
 Terminates process and removes it from scheduler state.
std::vector< ProcessIdgetQueueSnapshot () const override
 Snapshot of ready queue process IDs.
std::vector< ProcessIdgetBlockedSnapshot () const override
 Snapshot of blocked queue process IDs.
Result< void > configureLanes (std::size_t laneCount) override
 Configures per-core lane count for ready queues.
std::size_t laneCount () const noexcept override
 Configured scheduler lane count.
Result< void > enqueueToLane (PCB &pcb, std::size_t laneIndex, Tick currentTick) override
 Enqueues process into a specific lane.
Result< ProcessIdselectNextForLane (std::size_t laneIndex, const IClock &clock) override
 Selects next process for a specific lane.
Result< ProcessIdstealNextForLane (std::size_t thiefLane, const IClock &clock) override
 Steals work for thief lane and selects next process there.
std::vector< std::vector< ProcessId > > getPerLaneQueueSnapshot () const override
 Snapshot of ready queues per lane.
std::vector< ProcessIdrunningProcesses () const override
 Currently running process IDs across scheduler lanes.
Result< void > setPolicy (std::unique_ptr< ISchedulingPolicy > policy) override
 Replaces the active scheduling policy.
std::string_view policyName () const noexcept override
 Returns active policy name.
Public Member Functions inherited from contur::IScheduler
virtual ~IScheduler ()=default

Private Attributes

std::unique_ptr< Impl > impl_

Detailed Description

Scheduler host that manages process queues and policy decisions.

Scheduler owns queue state and delegates ordering/preemption logic to the active ISchedulingPolicy implementation.

Definition at line 18 of file scheduler.h.

Constructor & Destructor Documentation

◆ Scheduler() [1/3]

contur::Scheduler::Scheduler ( std::unique_ptr< ISchedulingPolicy > policy,
ITracer & tracer )
explicit

Constructs scheduler with initial policy.

Parameters
policyInitial scheduling policy. Null policy leaves scheduler unconfigured.

Referenced by operator=(), operator=(), Scheduler(), and Scheduler().

◆ ~Scheduler()

contur::Scheduler::~Scheduler ( )
override

Destroys scheduler.

◆ Scheduler() [2/3]

contur::Scheduler::Scheduler ( const Scheduler & )
delete

Copy construction is disabled.

References Scheduler().

◆ Scheduler() [3/3]

contur::Scheduler::Scheduler ( Scheduler && )
noexcept

Move-constructs scheduler state.

References Scheduler().

Member Function Documentation

◆ blockProcess()

Result< void > contur::Scheduler::blockProcess ( ProcessId pid,
Tick currentTick )
nodiscardoverridevirtual

Moves a specific process to blocked state.

Implements contur::IScheduler.

References blockProcess().

Referenced by blockProcess().

◆ blockRunning()

Result< void > contur::Scheduler::blockRunning ( Tick currentTick)
nodiscardoverridevirtual

Moves running process to blocked state.

Implements contur::IScheduler.

References blockRunning().

Referenced by blockRunning().

◆ configureLanes()

Result< void > contur::Scheduler::configureLanes ( std::size_t laneCount)
nodiscardoverridevirtual

Configures per-core lane count for ready queues.

Implements contur::IScheduler.

References configureLanes(), and laneCount().

Referenced by configureLanes().

◆ dequeue()

Result< void > contur::Scheduler::dequeue ( ProcessId pid)
nodiscardoverridevirtual

Removes process from scheduler tracking.

Implements contur::IScheduler.

References dequeue().

Referenced by dequeue().

◆ enqueue()

Result< void > contur::Scheduler::enqueue ( PCB & pcb,
Tick currentTick )
nodiscardoverridevirtual

Enqueues process into ready queue.

Implements contur::IScheduler.

References enqueue().

Referenced by enqueue().

◆ enqueueToLane()

Result< void > contur::Scheduler::enqueueToLane ( PCB & pcb,
std::size_t laneIndex,
Tick currentTick )
nodiscardoverridevirtual

Enqueues process into a specific lane.

Implements contur::IScheduler.

References enqueueToLane().

Referenced by enqueueToLane().

◆ getBlockedSnapshot()

std::vector< ProcessId > contur::Scheduler::getBlockedSnapshot ( ) const
nodiscardoverridevirtual

Snapshot of blocked queue process IDs.

Implements contur::IScheduler.

References getBlockedSnapshot().

Referenced by getBlockedSnapshot().

◆ getPerLaneQueueSnapshot()

std::vector< std::vector< ProcessId > > contur::Scheduler::getPerLaneQueueSnapshot ( ) const
nodiscardoverridevirtual

Snapshot of ready queues per lane.

Implements contur::IScheduler.

References getPerLaneQueueSnapshot().

Referenced by getPerLaneQueueSnapshot().

◆ getQueueSnapshot()

std::vector< ProcessId > contur::Scheduler::getQueueSnapshot ( ) const
nodiscardoverridevirtual

Snapshot of ready queue process IDs.

Implements contur::IScheduler.

References getQueueSnapshot().

Referenced by getQueueSnapshot().

◆ laneCount()

std::size_t contur::Scheduler::laneCount ( ) const
nodiscardoverridevirtualnoexcept

Configured scheduler lane count.

Implements contur::IScheduler.

References laneCount().

Referenced by configureLanes(), and laneCount().

◆ operator=() [1/2]

Scheduler & contur::Scheduler::operator= ( const Scheduler & )
delete

Copy assignment is disabled.

References Scheduler().

◆ operator=() [2/2]

Scheduler & contur::Scheduler::operator= ( Scheduler && )
noexcept

Move-assigns scheduler state.

References Scheduler().

◆ policyName()

std::string_view contur::Scheduler::policyName ( ) const
nodiscardoverridevirtualnoexcept

Returns active policy name.

Implements contur::IScheduler.

References policyName().

Referenced by policyName().

◆ runningProcesses()

std::vector< ProcessId > contur::Scheduler::runningProcesses ( ) const
nodiscardoverridevirtual

Currently running process IDs across scheduler lanes.

Implements contur::IScheduler.

References runningProcesses().

Referenced by runningProcesses().

◆ selectNext()

Result< ProcessId > contur::Scheduler::selectNext ( const IClock & clock)
nodiscardoverridevirtual

Selects next process according to active policy.

Implements contur::IScheduler.

References selectNext().

Referenced by selectNext().

◆ selectNextForLane()

Result< ProcessId > contur::Scheduler::selectNextForLane ( std::size_t laneIndex,
const IClock & clock )
nodiscardoverridevirtual

Selects next process for a specific lane.

Implements contur::IScheduler.

References selectNextForLane().

Referenced by selectNextForLane().

◆ setPolicy()

Result< void > contur::Scheduler::setPolicy ( std::unique_ptr< ISchedulingPolicy > policy)
nodiscardoverridevirtual

Replaces the active scheduling policy.

Implements contur::IScheduler.

References setPolicy().

Referenced by setPolicy().

◆ stealNextForLane()

Result< ProcessId > contur::Scheduler::stealNextForLane ( std::size_t thiefLane,
const IClock & clock )
nodiscardoverridevirtual

Steals work for thief lane and selects next process there.

Implements contur::IScheduler.

References stealNextForLane().

Referenced by stealNextForLane().

◆ terminate()

Result< void > contur::Scheduler::terminate ( ProcessId pid,
Tick currentTick )
nodiscardoverridevirtual

Terminates process and removes it from scheduler state.

Implements contur::IScheduler.

References terminate().

Referenced by terminate().

◆ unblock()

Result< void > contur::Scheduler::unblock ( ProcessId pid,
Tick currentTick )
nodiscardoverridevirtual

Moves blocked process back to ready queue.

Implements contur::IScheduler.

References unblock().

Referenced by unblock().

Member Data Documentation

◆ impl_

std::unique_ptr<Impl> contur::Scheduler::impl_
private

Definition at line 95 of file scheduler.h.


The documentation for this class was generated from the following file: