Contur 2
Educational OS kernel simulator
Loading...
Searching...
No Matches
kernel_builder.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include <cstddef>
7#include <memory>
8
10
11namespace contur {
12
13 class IClock;
14 class IMemory;
15 class IMMU;
16 class IVirtualMemory;
17 class ICPU;
18 class IExecutionEngine;
19 class IScheduler;
20 class IDispatcher;
21 class IDispatchRuntime;
22 class ITracer;
23 class IFileSystem;
24 class DeviceManager;
25 class IIoManager;
26 class IpcManager;
27 class SyscallTable;
28 struct KernelDependencies;
29
32 {
33 public:
36
39
41 KernelBuilder(const KernelBuilder &) = delete;
42
47
49 KernelBuilder &operator=(KernelBuilder &&) noexcept;
50
54 [[nodiscard]] KernelBuilder &withClock(std::unique_ptr<IClock> clock);
55
59 [[nodiscard]] KernelBuilder &withMemory(std::unique_ptr<IMemory> memory);
60
64 [[nodiscard]] KernelBuilder &withMmu(std::unique_ptr<IMMU> mmu);
65
69 [[nodiscard]] KernelBuilder &withVirtualMemory(std::unique_ptr<IVirtualMemory> virtualMemory);
70
74 [[nodiscard]] KernelBuilder &withCpu(std::unique_ptr<ICPU> cpu);
75
79 [[nodiscard]] KernelBuilder &withExecutionEngine(std::unique_ptr<IExecutionEngine> executionEngine);
80
84 [[nodiscard]] KernelBuilder &withScheduler(std::unique_ptr<IScheduler> scheduler);
85
89 [[nodiscard]] KernelBuilder &withDispatcher(std::unique_ptr<IDispatcher> dispatcher);
90
94 [[nodiscard]] KernelBuilder &withTracer(std::unique_ptr<ITracer> tracer);
95
100 [[nodiscard]] KernelBuilder &withRuntime(std::unique_ptr<IDispatchRuntime> runtime);
101
105 [[nodiscard]] KernelBuilder &withFileSystem(std::unique_ptr<IFileSystem> fileSystem);
106
110 [[nodiscard]] KernelBuilder &withDeviceManager(std::unique_ptr<DeviceManager> deviceManager);
111
115 [[nodiscard]] KernelBuilder &withIoManager(std::unique_ptr<IIoManager> ioManager);
116
120 [[nodiscard]] KernelBuilder &withIpcManager(std::unique_ptr<IpcManager> ipcManager);
121
125 [[nodiscard]] KernelBuilder &withSyscallTable(std::unique_ptr<SyscallTable> syscallTable);
126
130 [[nodiscard]] KernelBuilder &withDefaultTickBudget(std::size_t ticks);
131
133 [[nodiscard]] Result<std::unique_ptr<IKernel>> build();
134
135 private:
136 struct Impl;
137 std::unique_ptr<Impl> impl_;
138 };
139
140} // 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
Scheduler abstraction managing process state queues.
Definition i_scheduler.h:24
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
KernelBuilder & operator=(const KernelBuilder &)=delete
Copy assignment is disabled.
KernelBuilder & withClock(std::unique_ptr< IClock > clock)
Injects simulation clock dependency.
KernelBuilder & withFileSystem(std::unique_ptr< IFileSystem > fileSystem)
Injects filesystem dependency.
KernelBuilder & withMmu(std::unique_ptr< IMMU > mmu)
Injects MMU dependency.
Result< std::unique_ptr< IKernel > > build()
Builds a kernel instance from explicitly injected dependencies.
KernelBuilder & withRuntime(std::unique_ptr< IDispatchRuntime > runtime)
Injects a dispatch runtime whose lifetime is managed by the kernel.
KernelBuilder & withVirtualMemory(std::unique_ptr< IVirtualMemory > virtualMemory)
Injects virtual memory dependency.
KernelBuilder & withCpu(std::unique_ptr< ICPU > cpu)
Injects CPU dependency.
KernelBuilder & withExecutionEngine(std::unique_ptr< IExecutionEngine > executionEngine)
Injects execution-engine dependency.
KernelBuilder & withTracer(std::unique_ptr< ITracer > tracer)
Injects tracing dependency.
KernelBuilder & withDeviceManager(std::unique_ptr< DeviceManager > deviceManager)
Injects device manager dependency.
KernelBuilder & withScheduler(std::unique_ptr< IScheduler > scheduler)
Injects scheduler dependency.
KernelBuilder(const KernelBuilder &)=delete
Copy construction is disabled.
KernelBuilder & withDispatcher(std::unique_ptr< IDispatcher > dispatcher)
Injects dispatcher dependency.
KernelBuilder()
Creates an empty builder with no pre-wired dependencies.
std::unique_ptr< Impl > impl_
KernelBuilder & withDefaultTickBudget(std::size_t ticks)
Configures default dispatcher tick budget used by Kernel::tick(0).
KernelBuilder & withIoManager(std::unique_ptr< IIoManager > ioManager)
Injects unified I/O manager dependency.
KernelBuilder & withSyscallTable(std::unique_ptr< SyscallTable > syscallTable)
Injects syscall table dependency.
~KernelBuilder()
Destroys the builder and any still-owned dependency objects.
KernelBuilder & withMemory(std::unique_ptr< IMemory > memory)
Injects physical memory dependency.
KernelBuilder(KernelBuilder &&) noexcept
Move-constructs builder state.
KernelBuilder & withIpcManager(std::unique_ptr< IpcManager > ipcManager)
Injects IPC manager dependency.
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
Dependency bundle used to construct a Kernel.
Definition kernel.h:32