Contur 2
Educational OS kernel simulator
Loading...
Searching...
No Matches
contur::PageTable Class Reference

Page table mapping virtual page numbers to physical frames. More...

#include <page_table.h>

Public Member Functions

 PageTable (std::size_t pageCount)
 Constructs a page table with the given number of virtual pages.
 ~PageTable ()
 Destroys page table.
 PageTable (const PageTable &)=delete
PageTableoperator= (const PageTable &)=delete
 PageTable (PageTable &&) noexcept
 Move-constructs page table state.
PageTableoperator= (PageTable &&) noexcept
 Move-assigns page table state.
Result< void > map (std::size_t virtualPage, FrameId frame)
 Maps a virtual page to a physical frame.
Result< void > unmap (std::size_t virtualPage)
 Unmaps a virtual page (marks as not present, clears frame).
Result< FrameIdtranslate (std::size_t virtualPage) const
 Translates a virtual page number to a physical frame.
Result< PageTableEntrygetEntry (std::size_t virtualPage) const
 Returns the entry for a virtual page (read-only).
Result< void > setReferenced (std::size_t virtualPage, bool value)
 Marks a page as referenced (used by Clock/LRU algorithms).
Result< void > setDirty (std::size_t virtualPage, bool value)
 Marks a page as dirty.
Result< void > clearReferenced (std::size_t virtualPage)
 Clears the referenced bit for a virtual page.
std::size_t pageCount () const noexcept
 Returns the total number of virtual pages.
std::size_t presentCount () const noexcept
 Returns the number of pages currently present in memory.
void clear ()
 Resets all entries to unmapped state.

Private Attributes

std::unique_ptr< Impl > impl_

Detailed Description

Page table mapping virtual page numbers to physical frames.

Each process has its own PageTable. The MMU uses it to translate virtual addresses and to decide which pages to swap in/out.

Definition at line 26 of file page_table.h.

Constructor & Destructor Documentation

◆ PageTable() [1/3]

contur::PageTable::PageTable ( std::size_t pageCount)
explicit

Constructs a page table with the given number of virtual pages.

References pageCount().

Referenced by operator=(), operator=(), PageTable(), and PageTable().

◆ ~PageTable()

contur::PageTable::~PageTable ( )

Destroys page table.

◆ PageTable() [2/3]

contur::PageTable::PageTable ( const PageTable & )
delete

References PageTable().

◆ PageTable() [3/3]

contur::PageTable::PageTable ( PageTable && )
noexcept

Move-constructs page table state.

References PageTable().

Member Function Documentation

◆ clear()

void contur::PageTable::clear ( )

Resets all entries to unmapped state.

References clear().

Referenced by clear().

◆ clearReferenced()

Result< void > contur::PageTable::clearReferenced ( std::size_t virtualPage)
nodiscard

Clears the referenced bit for a virtual page.

References clearReferenced().

Referenced by clearReferenced().

◆ getEntry()

Result< PageTableEntry > contur::PageTable::getEntry ( std::size_t virtualPage) const
nodiscard

Returns the entry for a virtual page (read-only).

References getEntry().

Referenced by getEntry().

◆ map()

Result< void > contur::PageTable::map ( std::size_t virtualPage,
FrameId frame )
nodiscard

Maps a virtual page to a physical frame.

Returns
Success or InvalidAddress if virtualPage is out of range.

References map().

Referenced by map().

◆ operator=() [1/2]

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

References PageTable().

◆ operator=() [2/2]

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

Move-assigns page table state.

References PageTable().

◆ pageCount()

std::size_t contur::PageTable::pageCount ( ) const
nodiscardnoexcept

Returns the total number of virtual pages.

References pageCount().

Referenced by pageCount(), and PageTable().

◆ presentCount()

std::size_t contur::PageTable::presentCount ( ) const
nodiscardnoexcept

Returns the number of pages currently present in memory.

References presentCount().

Referenced by presentCount().

◆ setDirty()

Result< void > contur::PageTable::setDirty ( std::size_t virtualPage,
bool value )
nodiscard

Marks a page as dirty.

References setDirty().

Referenced by setDirty().

◆ setReferenced()

Result< void > contur::PageTable::setReferenced ( std::size_t virtualPage,
bool value )
nodiscard

Marks a page as referenced (used by Clock/LRU algorithms).

References setReferenced().

Referenced by setReferenced().

◆ translate()

Result< FrameId > contur::PageTable::translate ( std::size_t virtualPage) const
nodiscard

Translates a virtual page number to a physical frame.

Returns
The FrameId, or InvalidAddress if not mapped, or SegmentationFault if not present.

References translate().

Referenced by translate().

◆ unmap()

Result< void > contur::PageTable::unmap ( std::size_t virtualPage)
nodiscard

Unmaps a virtual page (marks as not present, clears frame).

Returns
Success or InvalidAddress if virtualPage is out of range.

References unmap().

Referenced by unmap().

Member Data Documentation

◆ impl_

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

Definition at line 79 of file page_table.h.


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