contur2
Loading...
Searching...
No Matches
page_table.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include <memory>
7
8#include "contur/core/error.h"
9#include "contur/core/types.h"
10
11namespace contur {
12
15 {
17 bool present = false;
18 bool dirty = false;
19 bool referenced = false;
20 };
21
27 {
28 public:
30 explicit PageTable(std::size_t pageCount);
32
33 // Non-copyable, movable
34 PageTable(const PageTable &) = delete;
35 PageTable &operator=(const PageTable &) = delete;
36 PageTable(PageTable &&) noexcept;
37 PageTable &operator=(PageTable &&) noexcept;
38
41 [[nodiscard]] Result<void> map(std::size_t virtualPage, FrameId frame);
42
45 [[nodiscard]] Result<void> unmap(std::size_t virtualPage);
46
49 [[nodiscard]] Result<FrameId> translate(std::size_t virtualPage) const;
50
52 [[nodiscard]] Result<PageTableEntry> getEntry(std::size_t virtualPage) const;
53
55 [[nodiscard]] Result<void> setReferenced(std::size_t virtualPage, bool value);
56
58 [[nodiscard]] Result<void> setDirty(std::size_t virtualPage, bool value);
59
61 [[nodiscard]] Result<void> clearReferenced(std::size_t virtualPage);
62
64 [[nodiscard]] std::size_t pageCount() const noexcept;
65
67 [[nodiscard]] std::size_t presentCount() const noexcept;
68
70 void clear();
71
72 private:
73 struct Impl;
74 std::unique_ptr<Impl> impl_;
75 };
76
77} // namespace contur
Result< void > map(std::size_t virtualPage, FrameId frame)
Maps a virtual page to a physical frame.
Result< FrameId > translate(std::size_t virtualPage) const
Translates a virtual page number to a physical frame.
PageTable(std::size_t pageCount)
Constructs a page table with the given number of virtual pages.
std::size_t pageCount() const noexcept
Returns the total number of virtual pages.
void clear()
Resets all entries to unmapped state.
Result< PageTableEntry > getEntry(std::size_t virtualPage) const
Returns the entry for a virtual page (read-only).
Result< void > unmap(std::size_t virtualPage)
Unmaps a virtual page (marks as not present, clears frame).
PageTable(PageTable &&) noexcept
std::size_t presentCount() const noexcept
Returns the number of pages currently present in memory.
PageTable(const PageTable &)=delete
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.
PageTable & operator=(const PageTable &)=delete
Result< void > setReferenced(std::size_t virtualPage, bool value)
Marks a page as referenced (used by Clock/LRU algorithms).
std::unique_ptr< Impl > impl_
Definition page_table.h:74
A result type that holds either a success value of type T or an ErrorCode.
Definition error.h:104
Error codes and Result<T> type for fallible operations.
Definition block.h:15
constexpr FrameId INVALID_FRAME
Sentinel value indicating an invalid frame.
Definition types.h:52
std::uint32_t FrameId
Frame number in physical memory.
Definition types.h:43
Entry in the page table — maps one virtual page to a physical frame.
Definition page_table.h:15
FrameId frameId
Physical frame number.
Definition page_table.h:16
bool referenced
Page has been accessed (for Clock algorithm).
Definition page_table.h:19
bool present
Page is loaded in physical memory.
Definition page_table.h:17
bool dirty
Page has been modified since load.
Definition page_table.h:18
Common type aliases, sentinel constants, and forward declarations used throughout the Contur 2 kernel...