30 explicit Mmu(
IMemory &memory, std::unique_ptr<IPageReplacementPolicy> replacementPolicy);
47 [[nodiscard]] std::
size_t totalFrames() const noexcept override;
48 [[nodiscard]] std::
size_t freeFrames() const noexcept override;
Abstract interface for the Memory Management Unit.
Abstract interface for linear addressable memory.
Result< Block > read(ProcessId processId, MemoryAddress virtualAddress) const override
Reads a Block from a virtual address in a given process's address space.
Result< void > swapOut(ProcessId processId, MemoryAddress virtualAddress) override
Swaps a page out of physical memory (to simulated disk).
std::size_t totalFrames() const noexcept override
Returns the total number of physical frames managed.
Result< void > write(ProcessId processId, MemoryAddress virtualAddress, const Block &block) override
Writes a Block to a virtual address in a given process's address space.
Mmu(IMemory &memory, std::unique_ptr< IPageReplacementPolicy > replacementPolicy)
Constructs an MMU backed by the given physical memory.
std::size_t freeFrames() const noexcept override
Returns the number of free (unallocated) physical frames.
Mmu & operator=(const Mmu &)=delete
std::unique_ptr< Impl > impl_
Result< void > swapIn(ProcessId processId, MemoryAddress virtualAddress) override
Swaps a page into physical memory.
Result< MemoryAddress > allocate(ProcessId processId, std::size_t pageCount) override
Allocates a range of frames for a process.
Result< void > deallocate(ProcessId processId) override
Deallocates all frames owned by a process.
A result type that holds either a success value of type T or an ErrorCode.
IMMU interface — Memory Management Unit abstraction.
IPageReplacementPolicy interface — pluggable page replacement algorithms.
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.