40 [[nodiscard]] std::
size_t totalSlots() const noexcept override;
41 [[nodiscard]] std::
size_t freeSlots() const noexcept override;
Abstract interface for the Memory Management Unit.
Abstract interface for virtual memory management.
A result type that holds either a success value of type T or an ErrorCode.
Result< MemoryAddress > allocateSlot(ProcessId processId, std::size_t size) override
Allocates a virtual memory slot for a process.
std::unique_ptr< Impl > impl_
bool hasSlot(ProcessId processId) const noexcept override
Checks whether a process has an allocated slot.
~VirtualMemory() override
Result< void > freeSlot(ProcessId processId) override
Frees a previously allocated slot.
Result< void > loadSegment(ProcessId processId, const std::vector< Block > &data) override
Loads a code/data segment into a process's virtual address space.
std::size_t totalSlots() const noexcept override
Returns the number of total slots available.
VirtualMemory & operator=(const VirtualMemory &)=delete
std::size_t slotSize(ProcessId processId) const noexcept override
Returns the slot size (number of blocks) for a process, or 0 if no slot.
VirtualMemory(const VirtualMemory &)=delete
VirtualMemory(VirtualMemory &&) noexcept
Result< std::vector< Block > > readSegment(ProcessId processId) const override
Reads the entire code/data segment from a process's virtual memory.
VirtualMemory(IMMU &mmu, std::size_t maxSlots)
Constructs virtual memory backed by the given MMU.
std::size_t freeSlots() const noexcept override
Returns the number of free (unallocated) slots.
IVirtualMemory interface — virtual address space management.
std::uint32_t ProcessId
Unique identifier for a process.
std::uint32_t MemoryAddress
Represents a memory address (physical or virtual).
A single memory cell in the simulated architecture.