aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/memory/paging
diff options
context:
space:
mode:
authorMatteo Gmür <matteo.gmuer1@ost.ch>2025-06-06 17:15:32 +0200
committerMatteo Gmür <matteo.gmuer1@ost.ch>2025-06-06 17:15:32 +0200
commitc4ced070ab057e4be6552b2f10ec1bf35509e245 (patch)
tree91602a7732d216bff3fbaf2d6158e965460019e5 /arch/x86_64/src/memory/paging
parent3fb836101a2032e93f7b82c924ce208d7377a5ea (diff)
parent1031a69ca5e23f2087148ad57e57506735872617 (diff)
downloadteachos-c4ced070ab057e4be6552b2f10ec1bf35509e245.tar.xz
teachos-c4ced070ab057e4be6552b2f10ec1bf35509e245.zip
Merge branch 'feat_inital_context_switching' into 'develop_ba'
Implement Context Switching See merge request teachos/kernel!6
Diffstat (limited to 'arch/x86_64/src/memory/paging')
-rw-r--r--arch/x86_64/src/memory/paging/page_entry.cpp5
-rw-r--r--arch/x86_64/src/memory/paging/temporary_page.cpp8
2 files changed, 9 insertions, 4 deletions
diff --git a/arch/x86_64/src/memory/paging/page_entry.cpp b/arch/x86_64/src/memory/paging/page_entry.cpp
index 5aa0982..57045ca 100644
--- a/arch/x86_64/src/memory/paging/page_entry.cpp
+++ b/arch/x86_64/src/memory/paging/page_entry.cpp
@@ -21,10 +21,12 @@ namespace teachos::arch::memory::paging
{
flags |= entry::PRESENT;
}
+
if (elf_flags.contains_flags(multiboot::elf_section_flags::WRITABLE))
{
flags |= entry::WRITABLE;
}
+
if (!elf_flags.contains_flags(multiboot::elf_section_flags::EXECUTABLE_CODE))
{
flags |= entry::EXECUTING_CODE_FORBIDDEN;
@@ -35,6 +37,8 @@ namespace teachos::arch::memory::paging
auto entry::set_unused() -> void { flags = 0U; }
+ auto entry::set_user_accessible() -> void { flags |= entry::USER_ACCESSIBLE; }
+
auto entry::calculate_pointed_to_frame() const -> std::optional<allocator::physical_frame>
{
if (contains_flags(PRESENT))
@@ -51,6 +55,7 @@ namespace teachos::arch::memory::paging
{
exception_handling::assert((frame.start_address() & ~PHYSICAL_ADDRESS_MASK) == 0,
"[Paging Entry] Start address is not aligned with page");
+
flags = frame.start_address() | additional_flags.to_ulong();
}
diff --git a/arch/x86_64/src/memory/paging/temporary_page.cpp b/arch/x86_64/src/memory/paging/temporary_page.cpp
index 152241d..8e73523 100644
--- a/arch/x86_64/src/memory/paging/temporary_page.cpp
+++ b/arch/x86_64/src/memory/paging/temporary_page.cpp
@@ -4,16 +4,16 @@
namespace teachos::arch::memory::paging
{
- auto temporary_page::map_table_frame(allocator::physical_frame frame,
- active_page_table & active_table) -> page_table_handle
+ auto temporary_page::map_table_frame(allocator::physical_frame frame, active_page_table & active_table)
+ -> page_table_handle
{
page_table_handle handle{reinterpret_cast<page_table *>(map_to_frame(frame, active_table)),
page_table_handle::LEVEL1};
return handle;
}
- auto temporary_page::map_to_frame(allocator::physical_frame frame,
- active_page_table & active_table) -> virtual_address
+ auto temporary_page::map_to_frame(allocator::physical_frame frame, active_page_table & active_table)
+ -> virtual_address
{
exception_handling::assert(!active_table.translate_page(page).has_value(),
"[Temporary page] Page is already mapped");