Contur 2
Educational OS kernel simulator
Loading...
Searching...
No Matches
kernel.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include <memory>
7
9
10namespace contur {
11
12 class IClock;
13 class IMemory;
14 class IMMU;
15 class IVirtualMemory;
16 class ICPU;
17 class IExecutionEngine;
18 class IScheduler;
19 class IDispatcher;
20 class ITracer;
21 class IFileSystem;
22 class IDispatchRuntime;
25 class SyscallTable;
26 class IpcManager;
27 class DeviceManager;
28 class IIoManager;
29
32 {
34 std::unique_ptr<IClock> clock;
35
37 std::unique_ptr<IMemory> memory;
38
40 std::unique_ptr<IMMU> mmu;
41
43 std::unique_ptr<IVirtualMemory> virtualMemory;
44
46 std::unique_ptr<ICPU> cpu;
47
49 std::unique_ptr<IExecutionEngine> executionEngine;
50
52 std::unique_ptr<IScheduler> scheduler;
53
55 std::unique_ptr<IDispatcher> dispatcher;
56
58 std::unique_ptr<ITracer> tracer;
59
61 std::unique_ptr<IFileSystem> fileSystem;
62
64 std::unique_ptr<DeviceManager> deviceManager;
65
67 std::unique_ptr<IIoManager> ioManager;
68
70 std::unique_ptr<IpcManager> ipcManager;
71
73 std::unique_ptr<SyscallTable> syscallTable;
74
77 std::unique_ptr<IDispatchRuntime> runtime;
78
80 std::size_t defaultTickBudget = static_cast<std::size_t>(DEFAULT_TIME_SLICE);
81 };
82
84 class Kernel final : public IKernel
85 {
86 public:
89 explicit Kernel(KernelDependencies deps);
90
92 ~Kernel() override;
93
95 Kernel(const Kernel &) = delete;
96
98 Kernel &operator=(const Kernel &) = delete;
100 Kernel(Kernel &&) noexcept;
101
103 Kernel &operator=(Kernel &&) noexcept;
104
106 [[nodiscard]] Result<ProcessId> createProcess(const ProcessConfig &config) override;
107
109 [[nodiscard]] Result<void> terminateProcess(ProcessId pid) override;
110
112 [[nodiscard]] Result<void> tick(std::size_t tickBudget = 0) override;
113
115 [[nodiscard]] Result<void> runForTicks(std::size_t cycles, std::size_t tickBudget = 0) override;
116
118 [[nodiscard]] Result<RegisterValue>
119 syscall(ProcessId pid, SyscallId id, std::span<const RegisterValue> args) override;
120
122 [[nodiscard]] Result<void> registerSyscallHandler(SyscallId id, SyscallHandlerFn handler) override;
123
125 [[nodiscard]] Result<void>
126 registerSyncPrimitive(const std::string &name, std::unique_ptr<ISyncPrimitive> primitive) override;
127
129 [[nodiscard]] Result<void> enterCritical(ProcessId pid, std::string_view primitiveName) override;
130
132 [[nodiscard]] Result<void> leaveCritical(ProcessId pid, std::string_view primitiveName) override;
133
135 [[nodiscard]] KernelSnapshot snapshot() const override;
136
138 [[nodiscard]] Tick now() const noexcept override;
139
141 [[nodiscard]] bool hasProcess(ProcessId pid) const noexcept override;
142
144 [[nodiscard]] std::size_t processCount() const noexcept override;
145
146 private:
147 struct Impl;
148 std::unique_ptr<Impl> impl_;
149 };
150
151} // namespace contur
Registry and dispatcher for I/O devices.
Abstract CPU interface.
Definition i_cpu.h:21
Abstract clock interface for simulation time.
Definition clock.h:21
Strategy interface that executes dispatch/tick across dispatcher lanes.
Interface for process lifecycle dispatch orchestration.
Abstract execution engine interface.
Abstract file-system interface.
Kernel I/O manager interface.
Top-level kernel facade.
Definition i_kernel.h:145
Abstract interface for the Memory Management Unit.
Definition i_mmu.h:22
Abstract interface for linear addressable memory.
Definition i_memory.h:19
Abstract interface for page replacement algorithms.
Scheduler abstraction managing process state queues.
Definition i_scheduler.h:24
Strategy interface for scheduling algorithms.
Common interface for synchronization primitives.
Tracer interface used by kernel subsystems.
Definition i_tracer.h:17
Abstract interface for virtual memory management.
Registry/mediator for named IPC channels.
Definition ipc_manager.h:18
Result< void > tick(std::size_t tickBudget=0) override
Executes one dispatch cycle.
Result< RegisterValue > syscall(ProcessId pid, SyscallId id, std::span< const RegisterValue > args) override
Dispatches a syscall on behalf of a process.
std::unique_ptr< Impl > impl_
Definition kernel.h:148
Tick now() const noexcept override
Returns current simulation time.
Result< void > terminateProcess(ProcessId pid) override
Terminates a process immediately.
Result< void > enterCritical(ProcessId pid, std::string_view primitiveName) override
Acquires a named synchronization primitive.
Kernel(Kernel &&) noexcept
Move-constructs kernel facade.
Result< void > registerSyscallHandler(SyscallId id, SyscallHandlerFn handler) override
Registers or replaces syscall handler.
Result< void > runForTicks(std::size_t cycles, std::size_t tickBudget=0) override
Executes multiple dispatch cycles.
Result< void > leaveCritical(ProcessId pid, std::string_view primitiveName) override
Releases a named synchronization primitive.
Result< void > registerSyncPrimitive(const std::string &name, std::unique_ptr< ISyncPrimitive > primitive) override
Registers a named synchronization primitive.
Kernel(KernelDependencies deps)
Constructs kernel facade from fully prepared dependencies.
Result< ProcessId > createProcess(const ProcessConfig &config) override
Creates and admits a process.
KernelSnapshot snapshot() const override
Returns a snapshot of current kernel state.
bool hasProcess(ProcessId pid) const noexcept override
Returns true when process exists in dispatcher.
Kernel(const Kernel &)=delete
Copy construction is disabled.
std::size_t processCount() const noexcept override
Returns total managed process count.
~Kernel() override
Destroys kernel facade and owned subsystem graph.
Kernel & operator=(const Kernel &)=delete
Copy assignment is disabled.
A result type that holds either a success value of type T or an ErrorCode.
Definition error.h:104
Dispatch table mapping SyscallId to handler functions.
IKernel facade interface for top-level kernel 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:140
constexpr Tick DEFAULT_TIME_SLICE
Default time slice for Round Robin scheduling (in ticks).
Definition types.h:61
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
std::int32_t RegisterValue
Value stored in a CPU register.
Definition types.h:21
Dependency bundle used to construct a Kernel.
Definition kernel.h:32
std::unique_ptr< ICPU > cpu
CPU implementation used by execution engines.
Definition kernel.h:46
std::unique_ptr< IMemory > memory
Physical memory backend.
Definition kernel.h:37
std::unique_ptr< IpcManager > ipcManager
IPC manager service.
Definition kernel.h:70
std::unique_ptr< IClock > clock
Simulation clock implementation.
Definition kernel.h:34
std::unique_ptr< IDispatchRuntime > runtime
Optional dispatch runtime whose lifetime is managed by the kernel.
Definition kernel.h:77
std::unique_ptr< DeviceManager > deviceManager
Device registry service.
Definition kernel.h:64
std::unique_ptr< IIoManager > ioManager
Unified I/O manager service.
Definition kernel.h:67
std::unique_ptr< IExecutionEngine > executionEngine
Execution engine (interpreter or native).
Definition kernel.h:49
std::unique_ptr< IDispatcher > dispatcher
Dispatcher orchestrating process lifecycle.
Definition kernel.h:55
std::unique_ptr< SyscallTable > syscallTable
Syscall dispatch table.
Definition kernel.h:73
std::unique_ptr< IMMU > mmu
Memory management unit implementation.
Definition kernel.h:40
std::unique_ptr< ITracer > tracer
Tracer used for kernel-level event instrumentation.
Definition kernel.h:58
std::size_t defaultTickBudget
Default per-dispatch tick budget used when caller passes 0.
Definition kernel.h:80
std::unique_ptr< IScheduler > scheduler
Scheduler implementation.
Definition kernel.h:52
std::unique_ptr< IFileSystem > fileSystem
File system service.
Definition kernel.h:61
std::unique_ptr< IVirtualMemory > virtualMemory
Virtual memory manager.
Definition kernel.h:43
Lightweight kernel state snapshot for UI and diagnostics.
Definition i_kernel.h:92
Configuration payload used to create a process.
Definition i_kernel.h:31