contur2
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 <vector>
8
9#include "contur/core/error.h"
10#include "contur/core/types.h"
11
12namespace contur {
13
14 class IClock;
15 class PCB;
17
23 {
24 public:
25 virtual ~IScheduler() = default;
26
31 [[nodiscard]] virtual Result<void> enqueue(PCB &pcb, Tick currentTick) = 0;
32
36 [[nodiscard]] virtual Result<void> dequeue(ProcessId pid) = 0;
37
41 [[nodiscard]] virtual Result<ProcessId> selectNext(const IClock &clock) = 0;
42
46 [[nodiscard]] virtual Result<void> blockRunning(Tick currentTick) = 0;
47
52 [[nodiscard]] virtual Result<void> unblock(ProcessId pid, Tick currentTick) = 0;
53
58 [[nodiscard]] virtual Result<void> terminate(ProcessId pid, Tick currentTick) = 0;
59
62 [[nodiscard]] virtual std::vector<ProcessId> getQueueSnapshot() const = 0;
63
66 [[nodiscard]] virtual std::vector<ProcessId> getBlockedSnapshot() const = 0;
67
70 [[nodiscard]] virtual ProcessId runningProcess() const noexcept = 0;
71
75 [[nodiscard]] virtual Result<void> setPolicy(std::unique_ptr<ISchedulingPolicy> policy) = 0;
76 };
77
78} // namespace contur
Abstract clock interface for simulation time.
Definition clock.h:21
Scheduler abstraction managing process state queues.
Definition i_scheduler.h:23
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 std::vector< ProcessId > getBlockedSnapshot() const =0
Returns blocked queue PID snapshot.
virtual ~IScheduler()=default
virtual Result< void > enqueue(PCB &pcb, Tick currentTick)=0
Enqueues a process into the ready 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 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 ProcessId runningProcess() const noexcept=0
Returns currently running process, or INVALID_PID.
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...