aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src
diff options
context:
space:
mode:
authorMatteo Gmür <matteo.gmuer1@ost.ch>2024-11-24 13:27:15 +0000
committerMatteo Gmür <matteo.gmuer1@ost.ch>2024-11-24 13:27:15 +0000
commit47732f54474a083e9f98e52714c12c0ca1181174 (patch)
treea350031797e8fd98b22de18e7a720fd0e9f57e11 /arch/x86_64/src
parent24805678884bcfcc3f14e88757955ab574d647cb (diff)
downloadteachos-47732f54474a083e9f98e52714c12c0ca1181174.tar.xz
teachos-47732f54474a083e9f98e52714c12c0ca1181174.zip
Use container helper classes for heap remapping
Diffstat (limited to 'arch/x86_64/src')
-rw-r--r--arch/x86_64/src/memory/main.cpp16
-rw-r--r--arch/x86_64/src/memory/paging/virtual_page.cpp13
2 files changed, 23 insertions, 6 deletions
diff --git a/arch/x86_64/src/memory/main.cpp b/arch/x86_64/src/memory/main.cpp
index ce07115..80242cc 100644
--- a/arch/x86_64/src/memory/main.cpp
+++ b/arch/x86_64/src/memory/main.cpp
@@ -14,13 +14,16 @@ namespace teachos::arch::memory
{
auto remap_heap(allocator::area_frame_allocator allocator, paging::active_page_table & active_table) -> void
{
- auto heap_start_page = paging::virtual_page::containing_address(memory::heap::HEAP_START);
- auto heap_end_page =
- paging::virtual_page::containing_address(memory::heap::HEAP_START + memory::heap::HEAP_SIZE - 1);
-
- for (auto i = heap_start_page.page_number; i <= heap_end_page.page_number; i++)
+ auto const start_page = paging::virtual_page::containing_address(memory::heap::HEAP_START);
+ auto const end_page =
+ ++(paging::virtual_page::containing_address(memory::heap::HEAP_START + memory::heap::HEAP_SIZE - 1));
+ paging::page_container::iterator const begin{start_page};
+ paging::page_container::iterator const end{end_page};
+ paging::page_container const pages{begin, end};
+
+ for (auto const & page : pages)
{
- active_table.map_page_to_next_free_frame(allocator, paging::virtual_page{i}, paging::entry::WRITABLE);
+ active_table.map_page_to_next_free_frame(allocator, page, paging::entry::WRITABLE);
}
}
} // namespace
@@ -43,5 +46,6 @@ namespace teachos::arch::memory
video::vga::text::write("Kernel remapping successfull", video::vga::text::common_attributes::green_on_black);
remap_heap(allocator, active_table);
+ video::vga::text::write("Heap remapping successfull", video::vga::text::common_attributes::green_on_black);
}
} // namespace teachos::arch::memory \ No newline at end of file
diff --git a/arch/x86_64/src/memory/paging/virtual_page.cpp b/arch/x86_64/src/memory/paging/virtual_page.cpp
index f798709..d374156 100644
--- a/arch/x86_64/src/memory/paging/virtual_page.cpp
+++ b/arch/x86_64/src/memory/paging/virtual_page.cpp
@@ -17,4 +17,17 @@ namespace teachos::arch::memory::paging
{
return (page_number >> (level * 9U)) & 0x1FF;
}
+
+ auto virtual_page::operator++(int) -> virtual_page
+ {
+ virtual_page const old_value = *this;
+ ++page_number;
+ return old_value;
+ }
+
+ auto virtual_page::operator++() -> virtual_page &
+ {
+ ++page_number;
+ return *this;
+ }
} // namespace teachos::arch::memory::paging