Contur 2
Educational OS kernel simulator
Loading...
Searching...
No Matches
scheduler.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include <memory>
7
9
10namespace contur {
11
12 class ITracer;
13
18 class Scheduler final : public IScheduler
19 {
20 public:
23 explicit Scheduler(std::unique_ptr<ISchedulingPolicy> policy, ITracer &tracer);
24
26 ~Scheduler() override;
27
29 Scheduler(const Scheduler &) = delete;
30
32 Scheduler &operator=(const Scheduler &) = delete;
34 Scheduler(Scheduler &&) noexcept;
35
37 Scheduler &operator=(Scheduler &&) noexcept;
38
40 [[nodiscard]] Result<void> enqueue(PCB &pcb, Tick currentTick) override;
41
43 [[nodiscard]] Result<void> dequeue(ProcessId pid) override;
44
46 [[nodiscard]] Result<ProcessId> selectNext(const IClock &clock) override;
47
49 [[nodiscard]] Result<void> blockRunning(Tick currentTick) override;
50
52 [[nodiscard]] Result<void> blockProcess(ProcessId pid, Tick currentTick) override;
53
55 [[nodiscard]] Result<void> unblock(ProcessId pid, Tick currentTick) override;
56
58 [[nodiscard]] Result<void> terminate(ProcessId pid, Tick currentTick) override;
59
61 [[nodiscard]] std::vector<ProcessId> getQueueSnapshot() const override;
62
64 [[nodiscard]] std::vector<ProcessId> getBlockedSnapshot() const override;
65
67 [[nodiscard]] Result<void> configureLanes(std::size_t laneCount) override;
68
70 [[nodiscard]] std::size_t laneCount() const noexcept override;
71
73 [[nodiscard]] Result<void> enqueueToLane(PCB &pcb, std::size_t laneIndex, Tick currentTick) override;
74
76 [[nodiscard]] Result<ProcessId> selectNextForLane(std::size_t laneIndex, const IClock &clock) override;
77
79 [[nodiscard]] Result<ProcessId> stealNextForLane(std::size_t thiefLane, const IClock &clock) override;
80
82 [[nodiscard]] std::vector<std::vector<ProcessId>> getPerLaneQueueSnapshot() const override;
83
85 [[nodiscard]] std::vector<ProcessId> runningProcesses() const override;
86
88 [[nodiscard]] Result<void> setPolicy(std::unique_ptr<ISchedulingPolicy> policy) override;
89
91 [[nodiscard]] std::string_view policyName() const noexcept override;
92
93 private:
94 struct Impl;
95 std::unique_ptr<Impl> impl_;
96 };
97
98} // namespace contur
Abstract clock interface for simulation time.
Definition clock.h:21
Scheduler abstraction managing process state queues.
Definition i_scheduler.h:24
Strategy interface for scheduling algorithms.
Tracer interface used by kernel subsystems.
Definition i_tracer.h:17
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
Scheduler & operator=(const Scheduler &)=delete
Copy assignment is disabled.
std::vector< ProcessId > getBlockedSnapshot() const override
Snapshot of blocked queue process IDs.
Result< void > enqueueToLane(PCB &pcb, std::size_t laneIndex, Tick currentTick) override
Enqueues process into a specific lane.
Result< void > blockRunning(Tick currentTick) override
Moves running process to blocked state.
Scheduler(Scheduler &&) noexcept
Move-constructs scheduler state.
Scheduler(const Scheduler &)=delete
Copy construction is disabled.
Result< void > dequeue(ProcessId pid) override
Removes process from scheduler tracking.
std::size_t laneCount() const noexcept override
Configured scheduler lane count.
Scheduler(std::unique_ptr< ISchedulingPolicy > policy, ITracer &tracer)
Constructs scheduler with initial policy.
Result< ProcessId > selectNext(const IClock &clock) override
Selects next process according to active policy.
std::unique_ptr< Impl > impl_
Definition scheduler.h:95
std::vector< ProcessId > getQueueSnapshot() const override
Snapshot of ready queue process IDs.
Result< ProcessId > stealNextForLane(std::size_t thiefLane, const IClock &clock) override
Steals work for thief lane and selects next process there.
Result< void > blockProcess(ProcessId pid, Tick currentTick) override
Moves a specific process to blocked state.
Result< ProcessId > selectNextForLane(std::size_t laneIndex, const IClock &clock) override
Selects next process for a specific lane.
std::string_view policyName() const noexcept override
Returns active policy name.
~Scheduler() override
Destroys scheduler.
std::vector< std::vector< ProcessId > > getPerLaneQueueSnapshot() const override
Snapshot of ready queues per lane.
Result< void > terminate(ProcessId pid, Tick currentTick) override
Terminates process and removes it from scheduler state.
Result< void > configureLanes(std::size_t laneCount) override
Configures per-core lane count for ready queues.
Result< void > setPolicy(std::unique_ptr< ISchedulingPolicy > policy) override
Replaces the active scheduling policy.
Result< void > unblock(ProcessId pid, Tick currentTick) override
Moves blocked process back to ready queue.
Result< void > enqueue(PCB &pcb, Tick currentTick) override
Enqueues process into ready queue.
std::vector< ProcessId > runningProcesses() const override
Currently running process IDs across scheduler lanes.
IScheduler interface.
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