Contur 2
Educational OS kernel simulator
Loading...
Searching...
No Matches
i_scheduler.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include <memory>
7#include <string_view>
8#include <vector>
9
10#include "contur/core/error.h"
11#include "contur/core/types.h"
12
13namespace contur {
14
15 class IClock;
16 class PCB;
18
24 {
25 public:
26 virtual ~IScheduler() = default;
27
32 [[nodiscard]] virtual Result<void> enqueue(PCB &pcb, Tick currentTick) = 0;
33
37 [[nodiscard]] virtual Result<void> dequeue(ProcessId pid) = 0;
38
42 [[nodiscard]] virtual Result<ProcessId> selectNext(const IClock &clock) = 0;
43
49 [[nodiscard]] virtual Result<void> blockRunning(Tick currentTick) = 0;
50
55 [[nodiscard]] virtual Result<void> blockProcess(ProcessId pid, Tick currentTick) = 0;
56
61 [[nodiscard]] virtual Result<void> unblock(ProcessId pid, Tick currentTick) = 0;
62
67 [[nodiscard]] virtual Result<void> terminate(ProcessId pid, Tick currentTick) = 0;
68
71 [[nodiscard]] virtual std::vector<ProcessId> getQueueSnapshot() const = 0;
72
75 [[nodiscard]] virtual std::vector<ProcessId> getBlockedSnapshot() const = 0;
76
80 [[nodiscard]] virtual Result<void> configureLanes(std::size_t laneCount) = 0;
81
83 [[nodiscard]] virtual std::size_t laneCount() const noexcept = 0;
84
90 [[nodiscard]] virtual Result<void> enqueueToLane(PCB &pcb, std::size_t laneIndex, Tick currentTick) = 0;
91
96 [[nodiscard]] virtual Result<ProcessId> selectNextForLane(std::size_t laneIndex, const IClock &clock) = 0;
97
108 [[nodiscard]] virtual Result<ProcessId> stealNextForLane(std::size_t thiefLane, const IClock &clock) = 0;
109
112 [[nodiscard]] virtual std::vector<std::vector<ProcessId>> getPerLaneQueueSnapshot() const = 0;
113
116 [[nodiscard]] virtual std::vector<ProcessId> runningProcesses() const = 0;
117
121 [[nodiscard]] virtual Result<void> setPolicy(std::unique_ptr<ISchedulingPolicy> policy) = 0;
122
124 [[nodiscard]] virtual std::string_view policyName() const noexcept = 0;
125 };
126
127} // namespace contur
Abstract clock interface for simulation time.
Definition clock.h:21
Scheduler abstraction managing process state queues.
Definition i_scheduler.h:24
virtual std::size_t laneCount() const noexcept=0
Returns number of configured scheduler lanes.
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 Result< void > setPolicy(std::unique_ptr< ISchedulingPolicy > policy)=0
Replaces scheduling policy at runtime.
virtual Result< void > blockRunning(Tick currentTick)=0
Moves current running process to blocked queue.
virtual Result< void > dequeue(ProcessId pid)=0
Removes a process from scheduler ownership/queues.
virtual Result< void > configureLanes(std::size_t laneCount)=0
Configures scheduler lane count used for per-core ready queues.
virtual std::vector< ProcessId > runningProcesses() const =0
Returns currently running process IDs across scheduler lanes.
virtual Result< ProcessId > selectNextForLane(std::size_t laneIndex, const IClock &clock)=0
Selects/runs next process on a specific lane.
virtual std::vector< ProcessId > getBlockedSnapshot() const =0
Returns blocked queue PID snapshot.
virtual Result< void > enqueueToLane(PCB &pcb, std::size_t laneIndex, Tick currentTick)=0
Enqueues process into a specific ready lane.
virtual ~IScheduler()=default
virtual Result< void > enqueue(PCB &pcb, Tick currentTick)=0
Enqueues a process into the ready 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 std::vector< std::vector< ProcessId > > getPerLaneQueueSnapshot() const =0
Returns per-lane ready queue snapshots.
virtual Result< void > terminate(ProcessId pid, Tick currentTick)=0
Marks process as terminated and removes it from active queues.
virtual Result< ProcessId > selectNext(const IClock &clock)=0
Selects the process to run next.
virtual std::vector< ProcessId > getQueueSnapshot() const =0
Returns ready queue PID snapshot.
virtual std::string_view policyName() const noexcept=0
Returns active policy name or "Unconfigured".
Strategy interface for scheduling algorithms.
Process Control Block — stores all metadata for a single process.
Definition pcb.h:55
A result type that holds either a success value of type T or an ErrorCode.
Definition error.h:104
Error codes and Result<T> type for fallible operations.
Definition block.h:15
std::uint64_t Tick
Simulation clock tick counter.
Definition types.h:18
std::uint32_t ProcessId
Unique identifier for a process.
Definition types.h:12
Common type aliases, sentinel constants, and forward declarations used throughout the Contur 2 kernel...