Contur 2
Educational OS kernel simulator
Loading...
Searching...
No Matches
i_kernel.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include <cstddef>
7#include <cstdint>
8#include <functional>
9#include <memory>
10#include <optional>
11#include <span>
12#include <string>
13#include <string_view>
14#include <vector>
15
16#include "contur/core/error.h"
17#include "contur/core/types.h"
18
19#include "contur/arch/block.h"
23
24namespace contur {
25
26 class ISyncPrimitive;
27 class ProcessImage;
28
31 {
34
36 std::string name;
37
42 std::vector<Block> code;
43
46
49
56 std::string nativePath;
57 };
58
86
92 {
95
97 std::size_t processCount = 0;
98
100 std::size_t readyCount = 0;
101
103 std::size_t blockedCount = 0;
104
106 std::vector<ProcessId> runningPids;
107
109 std::vector<ProcessId> readyQueue;
110
112 std::vector<ProcessId> blockedQueue;
113
115 std::vector<std::vector<ProcessId>> perLaneReadyQueues;
116
118 std::string policyName;
119
121 std::vector<KernelProcessSnapshot> processes;
122
124 std::size_t totalVirtualSlots = 0;
125
127 std::size_t freeVirtualSlots = 0;
128
130 std::optional<std::size_t> totalFrames;
131
133 std::optional<std::size_t> freeFrames;
134
136 std::vector<std::optional<ProcessId>> frameOwners;
137 };
138
141 std::function<Result<RegisterValue>(std::span<const RegisterValue> args, ProcessImage &caller)>;
142
145 {
146 public:
148 virtual ~IKernel() = default;
149
153 [[nodiscard]] virtual Result<ProcessId> createProcess(const ProcessConfig &config) = 0;
154
158 [[nodiscard]] virtual Result<void> terminateProcess(ProcessId pid) = 0;
159
163 [[nodiscard]] virtual Result<void> tick(std::size_t tickBudget = 0) = 0;
164
169 [[nodiscard]] virtual Result<void> runForTicks(std::size_t cycles, std::size_t tickBudget = 0) = 0;
170
176 [[nodiscard]] virtual Result<RegisterValue>
177 syscall(ProcessId pid, SyscallId id, std::span<const RegisterValue> args) = 0;
178
183 [[nodiscard]] virtual Result<void> registerSyscallHandler(SyscallId id, SyscallHandlerFn handler) = 0;
184
189 [[nodiscard]] virtual Result<void>
190 registerSyncPrimitive(const std::string &name, std::unique_ptr<ISyncPrimitive> primitive) = 0;
191
193 [[nodiscard]] virtual Result<void> enterCritical(ProcessId pid, std::string_view primitiveName) = 0;
194
196 [[nodiscard]] virtual Result<void> leaveCritical(ProcessId pid, std::string_view primitiveName) = 0;
197
199 [[nodiscard]] virtual KernelSnapshot snapshot() const = 0;
200
202 [[nodiscard]] virtual Tick now() const noexcept = 0;
203
205 [[nodiscard]] virtual bool hasProcess(ProcessId pid) const noexcept = 0;
206
208 [[nodiscard]] virtual std::size_t processCount() const noexcept = 0;
209 };
210
211} // namespace contur
Block — the fundamental unit of simulated memory.
Top-level kernel facade.
Definition i_kernel.h:145
virtual Result< void > tick(std::size_t tickBudget=0)=0
Executes one dispatch cycle.
virtual Result< RegisterValue > syscall(ProcessId pid, SyscallId id, std::span< const RegisterValue > args)=0
Dispatches a syscall on behalf of a process.
virtual Result< void > registerSyscallHandler(SyscallId id, SyscallHandlerFn handler)=0
Registers or replaces syscall handler.
virtual Result< void > leaveCritical(ProcessId pid, std::string_view primitiveName)=0
Releases a named synchronization primitive.
virtual Tick now() const noexcept=0
Returns current simulation time.
virtual Result< void > enterCritical(ProcessId pid, std::string_view primitiveName)=0
Acquires a named synchronization primitive.
virtual Result< void > registerSyncPrimitive(const std::string &name, std::unique_ptr< ISyncPrimitive > primitive)=0
Registers a named synchronization primitive.
virtual Result< ProcessId > createProcess(const ProcessConfig &config)=0
Creates and admits a process.
virtual Result< void > runForTicks(std::size_t cycles, std::size_t tickBudget=0)=0
Executes multiple dispatch cycles.
virtual std::size_t processCount() const noexcept=0
Returns total managed process count.
virtual Result< void > terminateProcess(ProcessId pid)=0
Terminates a process immediately.
virtual ~IKernel()=default
Virtual destructor for interface-safe polymorphic cleanup.
virtual bool hasProcess(ProcessId pid) const noexcept=0
Returns true when process exists in dispatcher.
virtual KernelSnapshot snapshot() const =0
Returns a snapshot of current kernel state.
Common interface for synchronization primitives.
Full in-memory representation of a process.
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
ProcessState
All possible states in a process lifecycle.
Definition state.h:29
@ New
Process has been created but not yet admitted to the ready queue.
Definition state.h:30
PriorityLevel
Discrete priority levels, from highest (Realtime) to lowest (Idle).
Definition priority.h:20
@ Normal
Default priority for user processes.
Definition priority.h:24
std::function< Result< RegisterValue >(std::span< const RegisterValue > args, ProcessImage &caller)> SyscallHandlerFn
Function signature used for syscall registration.
Definition i_kernel.h:140
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
SyscallId
Numeric identifiers for system calls.
Definition syscall_ids.h:12
constexpr ProcessId INVALID_PID
Sentinel value indicating an invalid/unassigned process ID.
Definition types.h:46
constexpr std::int32_t NICE_DEFAULT
Default nice value (no adjustment).
Definition priority.h:37
Process priority levels and the Priority struct.
ProcessState enum class and validated state transitions.
Lightweight process row for diagnostics and TUI rendering.
Definition i_kernel.h:61
PriorityLevel effectivePriority
Effective/dynamic priority.
Definition i_kernel.h:75
std::optional< std::size_t > laneIndex
Optional scheduler lane ownership metadata.
Definition i_kernel.h:84
std::int32_t nice
Nice value used for fine-grained priority adjustments.
Definition i_kernel.h:78
ProcessState state
Current process lifecycle state.
Definition i_kernel.h:69
PriorityLevel basePriority
Base/static priority.
Definition i_kernel.h:72
std::string name
Process name.
Definition i_kernel.h:66
Tick cpuTime
Total CPU time consumed by process.
Definition i_kernel.h:81
Lightweight kernel state snapshot for UI and diagnostics.
Definition i_kernel.h:92
std::size_t totalVirtualSlots
Total number of virtual memory slots.
Definition i_kernel.h:124
std::size_t readyCount
Number of processes in the ready queue.
Definition i_kernel.h:100
std::size_t blockedCount
Number of processes in blocked state.
Definition i_kernel.h:103
std::vector< ProcessId > runningPids
Process IDs currently running across dispatcher/scheduler lanes.
Definition i_kernel.h:106
std::vector< std::optional< ProcessId > > frameOwners
Optional frame ownership map (one entry per frame).
Definition i_kernel.h:136
std::optional< std::size_t > totalFrames
Optional total number of physical frames.
Definition i_kernel.h:130
std::string policyName
Active scheduling policy name.
Definition i_kernel.h:118
std::vector< ProcessId > blockedQueue
Blocked queue PID snapshot.
Definition i_kernel.h:112
std::vector< KernelProcessSnapshot > processes
Process rows for UI tables.
Definition i_kernel.h:121
std::vector< std::vector< ProcessId > > perLaneReadyQueues
Per-lane ready queue snapshots.
Definition i_kernel.h:115
std::optional< std::size_t > freeFrames
Optional free physical frame count.
Definition i_kernel.h:133
std::size_t freeVirtualSlots
Number of free virtual memory slots.
Definition i_kernel.h:127
Tick currentTick
Current simulation tick.
Definition i_kernel.h:94
std::size_t processCount
Total number of managed processes.
Definition i_kernel.h:97
std::vector< ProcessId > readyQueue
Ready queue PID snapshot.
Definition i_kernel.h:109
Composite priority descriptor for a process.
Definition priority.h:46
Configuration payload used to create a process.
Definition i_kernel.h:31
std::vector< Block > code
Program code segment. Required for interpreter-backed processes.
Definition i_kernel.h:42
Priority priority
Initial scheduling priority.
Definition i_kernel.h:45
std::string name
Human-readable process name.
Definition i_kernel.h:36
Tick arrivalTime
Arrival timestamp override. Defaults to current clock tick.
Definition i_kernel.h:48
std::string nativePath
Optional path to a native host executable.
Definition i_kernel.h:56
Syscall IDs for the user-kernel boundary.
Common type aliases, sentinel constants, and forward declarations used throughout the Contur 2 kernel...