contur2
Loading...
Searching...
No Matches
contur::VirtualMemory Class Referencefinal

Concrete virtual memory manager. More...

#include <virtual_memory.h>

Inheritance diagram for contur::VirtualMemory:
Collaboration diagram for contur::VirtualMemory:

Public Member Functions

 VirtualMemory (IMMU &mmu, std::size_t maxSlots)
 Constructs virtual memory backed by the given MMU.
 ~VirtualMemory () override
 VirtualMemory (const VirtualMemory &)=delete
VirtualMemoryoperator= (const VirtualMemory &)=delete
 VirtualMemory (VirtualMemory &&) noexcept
VirtualMemoryoperator= (VirtualMemory &&) noexcept
Result< MemoryAddressallocateSlot (ProcessId processId, std::size_t size) override
 Allocates a virtual memory slot for a process.
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.
Result< std::vector< Block > > readSegment (ProcessId processId) const override
 Reads the entire code/data segment from a process's virtual memory.
std::size_t totalSlots () const noexcept override
 Returns the number of total slots available.
std::size_t freeSlots () const noexcept override
 Returns the number of free (unallocated) slots.
bool hasSlot (ProcessId processId) const noexcept override
 Checks whether a process has an allocated slot.
std::size_t slotSize (ProcessId processId) const noexcept override
 Returns the slot size (number of blocks) for a process, or 0 if no slot.
Public Member Functions inherited from contur::IVirtualMemory
virtual ~IVirtualMemory ()=default

Private Attributes

std::unique_ptr< Impl > impl_

Detailed Description

Concrete virtual memory manager.

Manages slot allocation and delegates actual memory operations to the underlying IMMU. Each process gets a dedicated virtual address range (slot) for its code and data.

Definition at line 20 of file virtual_memory.h.

Constructor & Destructor Documentation

◆ VirtualMemory() [1/3]

contur::VirtualMemory::VirtualMemory ( IMMU & mmu,
std::size_t maxSlots )
explicit

Constructs virtual memory backed by the given MMU.

Parameters
mmuThe MMU to use for address translation (non-owning reference).
maxSlotsMaximum number of concurrent process slots.

◆ ~VirtualMemory()

contur::VirtualMemory::~VirtualMemory ( )
override

◆ VirtualMemory() [2/3]

contur::VirtualMemory::VirtualMemory ( const VirtualMemory & )
delete

◆ VirtualMemory() [3/3]

contur::VirtualMemory::VirtualMemory ( VirtualMemory && )
noexcept

Member Function Documentation

◆ allocateSlot()

Result< MemoryAddress > contur::VirtualMemory::allocateSlot ( ProcessId processId,
std::size_t size )
nodiscardoverridevirtual

Allocates a virtual memory slot for a process.

Parameters
processIdThe owning process.
sizeNumber of Block cells in the virtual address range.
Returns
The slot index (base virtual address), or an error.

Implements contur::IVirtualMemory.

◆ freeSlot()

Result< void > contur::VirtualMemory::freeSlot ( ProcessId processId)
nodiscardoverridevirtual

Frees a previously allocated slot.

Parameters
processIdThe owning process.
Returns
Success, or an error if the process has no slot.

Implements contur::IVirtualMemory.

◆ freeSlots()

std::size_t contur::VirtualMemory::freeSlots ( ) const
nodiscardoverridevirtualnoexcept

Returns the number of free (unallocated) slots.

Implements contur::IVirtualMemory.

◆ hasSlot()

bool contur::VirtualMemory::hasSlot ( ProcessId processId) const
nodiscardoverridevirtualnoexcept

Checks whether a process has an allocated slot.

Implements contur::IVirtualMemory.

◆ loadSegment()

Result< void > contur::VirtualMemory::loadSegment ( ProcessId processId,
const std::vector< Block > & data )
nodiscardoverridevirtual

Loads a code/data segment into a process's virtual address space.

Parameters
processIdThe owning process.
dataThe blocks to load.
Returns
Success, or an error if the slot is too small or not allocated.

Implements contur::IVirtualMemory.

◆ operator=() [1/2]

VirtualMemory & contur::VirtualMemory::operator= ( const VirtualMemory & )
delete

◆ operator=() [2/2]

VirtualMemory & contur::VirtualMemory::operator= ( VirtualMemory && )
noexcept

◆ readSegment()

Result< std::vector< Block > > contur::VirtualMemory::readSegment ( ProcessId processId) const
nodiscardoverridevirtual

Reads the entire code/data segment from a process's virtual memory.

Parameters
processIdThe owning process.
Returns
The blocks in the slot, or an error.

Implements contur::IVirtualMemory.

◆ slotSize()

std::size_t contur::VirtualMemory::slotSize ( ProcessId processId) const
nodiscardoverridevirtualnoexcept

Returns the slot size (number of blocks) for a process, or 0 if no slot.

Implements contur::IVirtualMemory.

◆ totalSlots()

std::size_t contur::VirtualMemory::totalSlots ( ) const
nodiscardoverridevirtualnoexcept

Returns the number of total slots available.

Implements contur::IVirtualMemory.

Member Data Documentation

◆ impl_

std::unique_ptr<Impl> contur::VirtualMemory::impl_
private

Definition at line 47 of file virtual_memory.h.


The documentation for this class was generated from the following file: