contur2
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 <functional>
8#include <memory>
9#include <span>
10#include <string>
11#include <string_view>
12#include <vector>
13
14#include "contur/core/error.h"
15#include "contur/core/types.h"
16
17#include "contur/arch/block.h"
20
21namespace contur {
22
23 class ISyncPrimitive;
24 class ProcessImage;
25
28 {
31
33 std::string name;
34
36 std::vector<Block> code;
37
40
43 };
44
47 {
50
52 std::size_t processCount = 0;
53
55 std::size_t readyCount = 0;
56
58 std::size_t blockedCount = 0;
59
62
64 std::size_t totalVirtualSlots = 0;
65
67 std::size_t freeVirtualSlots = 0;
68 };
69
72 std::function<Result<RegisterValue>(std::span<const RegisterValue> args, ProcessImage &caller)>;
73
75 class IKernel
76 {
77 public:
78 virtual ~IKernel() = default;
79
83 [[nodiscard]] virtual Result<ProcessId> createProcess(const ProcessConfig &config) = 0;
84
88 [[nodiscard]] virtual Result<void> terminateProcess(ProcessId pid) = 0;
89
93 [[nodiscard]] virtual Result<void> tick(std::size_t tickBudget = 0) = 0;
94
99 [[nodiscard]] virtual Result<void> runForTicks(std::size_t cycles, std::size_t tickBudget = 0) = 0;
100
106 [[nodiscard]] virtual Result<RegisterValue>
107 syscall(ProcessId pid, SyscallId id, std::span<const RegisterValue> args) = 0;
108
113 [[nodiscard]] virtual Result<void> registerSyscallHandler(SyscallId id, SyscallHandlerFn handler) = 0;
114
119 [[nodiscard]] virtual Result<void>
120 registerSyncPrimitive(const std::string &name, std::unique_ptr<ISyncPrimitive> primitive) = 0;
121
123 [[nodiscard]] virtual Result<void> enterCritical(ProcessId pid, std::string_view primitiveName) = 0;
124
126 [[nodiscard]] virtual Result<void> leaveCritical(ProcessId pid, std::string_view primitiveName) = 0;
127
129 [[nodiscard]] virtual KernelSnapshot snapshot() const = 0;
130
132 [[nodiscard]] virtual Tick now() const noexcept = 0;
133
135 [[nodiscard]] virtual bool hasProcess(ProcessId pid) const noexcept = 0;
136
138 [[nodiscard]] virtual std::size_t processCount() const noexcept = 0;
139 };
140
141} // namespace contur
Block — the fundamental unit of simulated memory.
Top-level kernel facade.
Definition i_kernel.h:76
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 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
std::function< Result< RegisterValue >(std::span< const RegisterValue > args, ProcessImage &caller)> SyscallHandlerFn
Function signature used for syscall registration.
Definition i_kernel.h:71
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
Process priority levels and the Priority struct.
Lightweight kernel state snapshot for UI and diagnostics.
Definition i_kernel.h:47
std::size_t totalVirtualSlots
Total number of virtual memory slots.
Definition i_kernel.h:64
std::size_t readyCount
Number of processes in the ready queue.
Definition i_kernel.h:55
std::size_t blockedCount
Number of processes in blocked state.
Definition i_kernel.h:58
ProcessId runningPid
PID of the currently running process or INVALID_PID.
Definition i_kernel.h:61
std::size_t freeVirtualSlots
Number of free virtual memory slots.
Definition i_kernel.h:67
Tick currentTick
Current simulation tick.
Definition i_kernel.h:49
std::size_t processCount
Total number of managed processes.
Definition i_kernel.h:52
Composite priority descriptor for a process.
Definition priority.h:46
Configuration payload used to create a process.
Definition i_kernel.h:28
std::vector< Block > code
Program code segment.
Definition i_kernel.h:36
Priority priority
Initial scheduling priority.
Definition i_kernel.h:39
std::string name
Human-readable process name.
Definition i_kernel.h:33
Tick arrivalTime
Arrival timestamp override. Defaults to current clock tick.
Definition i_kernel.h:42
Syscall IDs for the user-kernel boundary.
Common type aliases, sentinel constants, and forward declarations used throughout the Contur 2 kernel...