contur2
Loading...
Searching...
No Matches
mmu.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include <memory>
7
10
11namespace contur {
12
13 // Forward declarations
14 class IMemory;
15
24 class Mmu final : public IMMU
25 {
26 public:
30 explicit Mmu(IMemory &memory, std::unique_ptr<IPageReplacementPolicy> replacementPolicy);
31 ~Mmu() override;
32
33 // Non-copyable, movable
34 Mmu(const Mmu &) = delete;
35 Mmu &operator=(const Mmu &) = delete;
36 Mmu(Mmu &&) noexcept;
37 Mmu &operator=(Mmu &&) noexcept;
38
39 // IMMU interface
40 [[nodiscard]] Result<Block> read(ProcessId processId, MemoryAddress virtualAddress) const override;
41 [[nodiscard]] Result<void>
42 write(ProcessId processId, MemoryAddress virtualAddress, const Block &block) override;
43 [[nodiscard]] Result<MemoryAddress> allocate(ProcessId processId, std::size_t pageCount) override;
44 [[nodiscard]] Result<void> deallocate(ProcessId processId) override;
45 [[nodiscard]] Result<void> swapIn(ProcessId processId, MemoryAddress virtualAddress) override;
46 [[nodiscard]] Result<void> swapOut(ProcessId processId, MemoryAddress virtualAddress) override;
47 [[nodiscard]] std::size_t totalFrames() const noexcept override;
48 [[nodiscard]] std::size_t freeFrames() const noexcept override;
49
50 private:
51 struct Impl;
52 std::unique_ptr<Impl> impl_;
53 };
54
55} // namespace contur
Abstract interface for the Memory Management Unit.
Definition i_mmu.h:22
Abstract interface for linear addressable memory.
Definition i_memory.h:19
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.
~Mmu() override
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.
Mmu(Mmu &&) noexcept
std::size_t freeFrames() const noexcept override
Returns the number of free (unallocated) physical frames.
Mmu & operator=(const Mmu &)=delete
Mmu(const Mmu &)=delete
std::unique_ptr< Impl > impl_
Definition mmu.h:52
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.
Definition error.h:104
IMMU interface — Memory Management Unit abstraction.
IPageReplacementPolicy interface — pluggable page replacement algorithms.
Definition block.h:15
std::uint32_t ProcessId
Unique identifier for a process.
Definition types.h:12
std::uint32_t MemoryAddress
Represents a memory address (physical or virtual).
Definition types.h:15
A single memory cell in the simulated architecture.
Definition block.h:26