![]() |
Contur 2
Educational OS kernel simulator
|
Scheduler abstraction managing process state queues. More...
#include <i_scheduler.h>
Public Member Functions | |
| virtual | ~IScheduler ()=default |
| virtual Result< void > | enqueue (PCB &pcb, Tick currentTick)=0 |
| Enqueues a process into the ready queue. | |
| virtual Result< void > | dequeue (ProcessId pid)=0 |
| Removes a process from scheduler ownership/queues. | |
| virtual Result< ProcessId > | selectNext (const IClock &clock)=0 |
| Selects the process to run next. | |
| virtual Result< void > | blockRunning (Tick currentTick)=0 |
| Moves current running process to blocked queue. | |
| virtual Result< void > | blockProcess (ProcessId pid, Tick currentTick)=0 |
| Moves a specific running or ready process to the blocked queue. | |
| virtual Result< void > | unblock (ProcessId pid, Tick currentTick)=0 |
| Moves a blocked process back to ready queue. | |
| virtual Result< void > | terminate (ProcessId pid, Tick currentTick)=0 |
| Marks process as terminated and removes it from active queues. | |
| virtual std::vector< ProcessId > | getQueueSnapshot () const =0 |
| Returns ready queue PID snapshot. | |
| virtual std::vector< ProcessId > | getBlockedSnapshot () const =0 |
| Returns blocked queue PID snapshot. | |
| virtual Result< void > | configureLanes (std::size_t laneCount)=0 |
| Configures scheduler lane count used for per-core ready queues. | |
| virtual std::size_t | laneCount () const noexcept=0 |
| Returns number of configured scheduler lanes. | |
| virtual Result< void > | enqueueToLane (PCB &pcb, std::size_t laneIndex, Tick currentTick)=0 |
| Enqueues process into a specific ready lane. | |
| virtual Result< ProcessId > | selectNextForLane (std::size_t laneIndex, const IClock &clock)=0 |
| Selects/runs next process on a specific lane. | |
| virtual Result< ProcessId > | stealNextForLane (std::size_t thiefLane, const IClock &clock)=0 |
| Steals one ready process from another lane and schedules it on thief lane. | |
| virtual std::vector< std::vector< ProcessId > > | getPerLaneQueueSnapshot () const =0 |
| Returns per-lane ready queue snapshots. | |
| virtual std::vector< ProcessId > | runningProcesses () const =0 |
| Returns currently running process IDs across scheduler lanes. | |
| virtual Result< void > | setPolicy (std::unique_ptr< ISchedulingPolicy > policy)=0 |
| Replaces scheduling policy at runtime. | |
| virtual std::string_view | policyName () const noexcept=0 |
| Returns active policy name or "Unconfigured". | |
Scheduler abstraction managing process state queues.
Coordinates ready/blocked/running process sets and delegates process ordering decisions to the active ISchedulingPolicy implementation.
Definition at line 23 of file i_scheduler.h.
|
virtualdefault |
|
nodiscardpure virtual |
Moves a specific running or ready process to the blocked queue.
| pid | Process identifier to block. |
| currentTick | Simulation tick for timing metadata. |
Implemented in contur::Scheduler.
Moves current running process to blocked queue.
| currentTick | Simulation tick for blocked queue timing metadata. |
Implemented in contur::Scheduler.
|
nodiscardpure virtual |
Configures scheduler lane count used for per-core ready queues.
| laneCount | Number of scheduler lanes (must be >= 1). |
Implemented in contur::Scheduler.
References laneCount().
Removes a process from scheduler ownership/queues.
| pid | Identifier of the process to remove. |
Implemented in contur::Scheduler.
|
nodiscardpure virtual |
Enqueues a process into the ready queue.
| pcb | Process control block to add. |
| currentTick | Simulation tick used for queue timing metadata. |
Implemented in contur::Scheduler.
|
nodiscardpure virtual |
Enqueues process into a specific ready lane.
| pcb | Process control block to add. |
| laneIndex | Target lane index. |
| currentTick | Simulation tick used for queue timing metadata. |
Implemented in contur::Scheduler.
References enqueueToLane().
Referenced by enqueueToLane().
|
nodiscardpure virtual |
Returns blocked queue PID snapshot.
Implemented in contur::Scheduler.
|
nodiscardpure virtual |
Returns per-lane ready queue snapshots.
Implemented in contur::Scheduler.
References getPerLaneQueueSnapshot().
Referenced by getPerLaneQueueSnapshot().
|
nodiscardpure virtual |
Returns ready queue PID snapshot.
Implemented in contur::Scheduler.
|
nodiscardpure virtualnoexcept |
Returns number of configured scheduler lanes.
Implemented in contur::Scheduler.
Referenced by configureLanes().
|
nodiscardpure virtualnoexcept |
Returns active policy name or "Unconfigured".
Implemented in contur::Scheduler.
References policyName().
Referenced by policyName().
|
nodiscardpure virtual |
Returns currently running process IDs across scheduler lanes.
Implemented in contur::Scheduler.
References runningProcesses().
Referenced by runningProcesses().
|
nodiscardpure virtual |
Selects the process to run next.
| clock | Simulation clock for time-aware policy decisions. |
Implemented in contur::Scheduler.
|
nodiscardpure virtual |
Selects/runs next process on a specific lane.
| laneIndex | Target lane index. |
| clock | Simulation clock for policy decisions. |
Implemented in contur::Scheduler.
References selectNextForLane().
Referenced by selectNextForLane().
|
nodiscardpure virtual |
Replaces scheduling policy at runtime.
| policy | New scheduling policy instance. |
Implemented in contur::Scheduler.
References setPolicy().
Referenced by setPolicy().
|
nodiscardpure virtual |
Steals one ready process from another lane and schedules it on thief lane.
This is scheduler-level (intra-dispatcher) work stealing: it moves a simulated process between per-core ready queues inside a single dispatcher. It is independent of runtime-level (inter-dispatcher) work stealing performed by DispatcherPool, which moves whole dispatcher lanes between host threads.
| thiefLane | Lane that steals work. |
| clock | Simulation clock for selection and preemption checks. |
Implemented in contur::Scheduler.
References stealNextForLane().
Referenced by stealNextForLane().
|
nodiscardpure virtual |
Marks process as terminated and removes it from active queues.
| pid | Identifier of the process to terminate. |
| currentTick | Simulation tick used for final accounting. |
Implemented in contur::Scheduler.
|
nodiscardpure virtual |
Moves a blocked process back to ready queue.
| pid | Identifier of the blocked process. |
| currentTick | Simulation tick used when re-enqueueing. |
Implemented in contur::Scheduler.