aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86_64/CMakeLists.txt3
-rw-r--r--arch/x86_64/include/arch/memory/allocator/tiny_frame_allocator.hpp10
-rw-r--r--arch/x86_64/include/arch/memory/paging/active_page_table.hpp (renamed from arch/x86_64/include/arch/memory/paging/page_mapper.hpp)7
-rw-r--r--arch/x86_64/include/arch/memory/paging/inactive_page_table.hpp15
-rw-r--r--arch/x86_64/include/arch/memory/paging/temporary_page.hpp2
-rw-r--r--arch/x86_64/src/kernel/main.cpp2
-rw-r--r--arch/x86_64/src/memory/paging/active_page_table.cpp (renamed from arch/x86_64/src/memory/paging/page_mapper.cpp)2
-rw-r--r--arch/x86_64/src/memory/paging/inactive_page_table.cpp5
-rw-r--r--arch/x86_64/src/memory/paging/temporary_page.cpp2
9 files changed, 30 insertions, 18 deletions
diff --git a/arch/x86_64/CMakeLists.txt b/arch/x86_64/CMakeLists.txt
index 8d64985..a97abaa 100644
--- a/arch/x86_64/CMakeLists.txt
+++ b/arch/x86_64/CMakeLists.txt
@@ -50,7 +50,8 @@ target_sources("_memory" PRIVATE
"src/memory/paging/page_table.cpp"
"src/memory/paging/temporary_page.cpp"
"src/memory/paging/virtual_page.cpp"
- "src/memory/paging/page_mapper.cpp"
+ "src/memory/paging/active_page_table.cpp"
+ "src/memory/paging/inactive_page_table.cpp"
)
#[============================================================================[
diff --git a/arch/x86_64/include/arch/memory/allocator/tiny_frame_allocator.hpp b/arch/x86_64/include/arch/memory/allocator/tiny_frame_allocator.hpp
index 4bcec1c..e55b376 100644
--- a/arch/x86_64/include/arch/memory/allocator/tiny_frame_allocator.hpp
+++ b/arch/x86_64/include/arch/memory/allocator/tiny_frame_allocator.hpp
@@ -23,16 +23,8 @@ namespace teachos::arch::memory::allocator
* entries *when a new page table is required.
*/
tiny_frame_allocator(area_frame_allocator & allocator)
- : frames{}
+ : frames{allocator.allocate_frame(), allocator.allocate_frame(), allocator.allocate_frame()}
{
- for (auto & frame : frames)
- {
- auto temp_frame = allocator.allocate_frame();
- if (temp_frame.has_value())
- {
- frame.emplace(temp_frame.value());
- }
- }
// Nothing to do
}
diff --git a/arch/x86_64/include/arch/memory/paging/page_mapper.hpp b/arch/x86_64/include/arch/memory/paging/active_page_table.hpp
index 20d9afc..8011ee0 100644
--- a/arch/x86_64/include/arch/memory/paging/page_mapper.hpp
+++ b/arch/x86_64/include/arch/memory/paging/active_page_table.hpp
@@ -1,11 +1,10 @@
-#ifndef TEACHOS_ARCH_X86_64_MEMORY_PAGING_PAGE_MAPPER_HPP
-#define TEACHOS_ARCH_X86_64_MEMORY_PAGING_PAGE_MAPPER_HPP
+#ifndef TEACHOS_ARCH_X86_64_MEMORY_PAGING_ACTIVE_PAGE_TABLE_HPP
+#define TEACHOS_ARCH_X86_64_MEMORY_PAGING_ACTIVE_PAGE_TABLE_HPP
#include "arch/exception_handling/assert.hpp"
#include "arch/memory/allocator/concept.hpp"
#include "arch/memory/paging/virtual_page.hpp"
-#include <algorithm>
#include <array>
#include <optional>
@@ -216,4 +215,4 @@ namespace teachos::arch::memory::paging
};
} // namespace teachos::arch::memory::paging
-#endif // TEACHOS_ARCH_X86_64_MEMORY_PAGING_PAGE_MAPPER_HPP
+#endif // TEACHOS_ARCH_X86_64_MEMORY_PAGING_ACTIVE_PAGE_TABLE_HPP
diff --git a/arch/x86_64/include/arch/memory/paging/inactive_page_table.hpp b/arch/x86_64/include/arch/memory/paging/inactive_page_table.hpp
new file mode 100644
index 0000000..4285fc2
--- /dev/null
+++ b/arch/x86_64/include/arch/memory/paging/inactive_page_table.hpp
@@ -0,0 +1,15 @@
+#ifndef TEACHOS_ARCH_X86_64_MEMORY_PAGING_INACTIVE_PAGE_TABLE_HPP
+#define TEACHOS_ARCH_X86_64_MEMORY_PAGING_INACTIVE_PAGE_TABLE_HPP
+
+#include "arch/memory/allocator/physical_frame.hpp"
+
+namespace teachos::arch::memory::paging
+{
+ struct inactive_page_table
+ {
+ private:
+ allocator::physical_frame page_table_level_4_frame;
+ };
+} // namespace teachos::arch::memory::paging
+
+#endif // TEACHOS_ARCH_X86_64_MEMORY_PAGING_INACTIVE_PAGE_TABLE_HPP
diff --git a/arch/x86_64/include/arch/memory/paging/temporary_page.hpp b/arch/x86_64/include/arch/memory/paging/temporary_page.hpp
index c42745a..b658f7a 100644
--- a/arch/x86_64/include/arch/memory/paging/temporary_page.hpp
+++ b/arch/x86_64/include/arch/memory/paging/temporary_page.hpp
@@ -3,7 +3,7 @@
#include "arch/memory/allocator/physical_frame.hpp"
#include "arch/memory/allocator/tiny_frame_allocator.hpp"
-#include "arch/memory/paging/page_mapper.hpp"
+#include "arch/memory/paging/active_page_table.hpp"
#include "arch/memory/paging/page_table.hpp"
#include "arch/memory/paging/virtual_page.hpp"
diff --git a/arch/x86_64/src/kernel/main.cpp b/arch/x86_64/src/kernel/main.cpp
index 22335d1..f1d6496 100644
--- a/arch/x86_64/src/kernel/main.cpp
+++ b/arch/x86_64/src/kernel/main.cpp
@@ -3,7 +3,7 @@
#include "arch/exception_handling/assert.hpp"
#include "arch/memory/allocator/area_frame_allocator.hpp"
#include "arch/memory/multiboot/reader.hpp"
-#include "arch/memory/paging/page_mapper.hpp"
+#include "arch/memory/paging/active_page_table.hpp"
#include "arch/memory/paging/temporary_page.hpp"
#include "arch/video/vga/text.hpp"
diff --git a/arch/x86_64/src/memory/paging/page_mapper.cpp b/arch/x86_64/src/memory/paging/active_page_table.cpp
index 30055e8..38696f8 100644
--- a/arch/x86_64/src/memory/paging/page_mapper.cpp
+++ b/arch/x86_64/src/memory/paging/active_page_table.cpp
@@ -1,4 +1,4 @@
-#include "arch/memory/paging/page_mapper.hpp"
+#include "arch/memory/paging/active_page_table.hpp"
namespace teachos::arch::memory::paging
{
diff --git a/arch/x86_64/src/memory/paging/inactive_page_table.cpp b/arch/x86_64/src/memory/paging/inactive_page_table.cpp
new file mode 100644
index 0000000..1f36aa3
--- /dev/null
+++ b/arch/x86_64/src/memory/paging/inactive_page_table.cpp
@@ -0,0 +1,5 @@
+#include "arch/memory/paging/inactive_page_table.hpp"
+
+namespace teachos::arch::memory::paging
+{
+} // namespace teachos::arch::memory::paging
diff --git a/arch/x86_64/src/memory/paging/temporary_page.cpp b/arch/x86_64/src/memory/paging/temporary_page.cpp
index 4a8f4da..180b4a8 100644
--- a/arch/x86_64/src/memory/paging/temporary_page.cpp
+++ b/arch/x86_64/src/memory/paging/temporary_page.cpp
@@ -27,7 +27,7 @@ namespace teachos::arch::memory::paging
auto temporary_page::zero_entries(active_page_table & active_table) -> void
{
auto frame = allocator.allocate_frame();
- exception_handling::assert(!frame.has_value(), "[Temporary Page] Tiny allocator could not allocate a frame");
+ exception_handling::assert(frame.has_value(), "[Temporary Page] Tiny allocator could not allocate a frame");
page_table_handle handle = map_table_frame(frame.value(), active_table);
handle.zero_entries();