aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/memory/main.cpp
diff options
context:
space:
mode:
authorMatteo Gmür <matteo.gmuer1@ost.ch>2025-04-14 15:21:52 +0000
committerMatteo Gmür <matteo.gmuer1@ost.ch>2025-04-14 15:21:52 +0000
commiteafe8533bb5ccbe15bd8ffbc917b38122b04a157 (patch)
tree53a04ecb68f816a71400e27452bb8393f23a80d3 /arch/x86_64/src/memory/main.cpp
parent4909c80b31f3198030d3e666db87cfd39ac87c6f (diff)
downloadteachos-eafe8533bb5ccbe15bd8ffbc917b38122b04a157.tar.xz
teachos-eafe8533bb5ccbe15bd8ffbc917b38122b04a157.zip
Add stack frame allocator. Fix stl vector bug and create stl stack implementation
Diffstat (limited to 'arch/x86_64/src/memory/main.cpp')
-rw-r--r--arch/x86_64/src/memory/main.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/arch/x86_64/src/memory/main.cpp b/arch/x86_64/src/memory/main.cpp
index a920a20..3041a75 100644
--- a/arch/x86_64/src/memory/main.cpp
+++ b/arch/x86_64/src/memory/main.cpp
@@ -4,6 +4,8 @@
#include "arch/kernel/cpu/control_register.hpp"
#include "arch/kernel/cpu/msr.hpp"
#include "arch/memory/allocator/area_frame_allocator.hpp"
+#include "arch/memory/allocator/concept.hpp"
+#include "arch/memory/allocator/stack_frame_allocator.hpp"
#include "arch/memory/heap/heap_allocator.hpp"
#include "arch/memory/paging/active_page_table.hpp"
#include "arch/memory/paging/kernel_mapper.hpp"
@@ -12,7 +14,21 @@ namespace teachos::arch::memory
{
namespace
{
- auto remap_heap(allocator::area_frame_allocator allocator, paging::active_page_table & active_table) -> void
+ template<allocator::FrameAllocator T>
+ auto create_frame_allocator(multiboot::memory_information const & memory_information) -> T
+ {
+ return allocator::area_frame_allocator{memory_information};
+ }
+
+ template<>
+ auto create_frame_allocator(multiboot::memory_information const & memory_information)
+ -> allocator::stack_frame_allocator
+ {
+ return allocator::stack_frame_allocator{memory_information};
+ }
+
+ template<allocator::FrameAllocator T>
+ auto remap_heap(T & allocator, paging::active_page_table & active_table) -> void
{
auto const start_page = paging::virtual_page::containing_address(memory::heap::HEAP_START);
auto const end_page =
@@ -36,7 +52,7 @@ namespace teachos::arch::memory
has_been_called = true;
auto const memory_information = multiboot::read_multiboot2();
- allocator::area_frame_allocator allocator(memory_information);
+ auto allocator = create_frame_allocator<allocator::stack_frame_allocator>(memory_information);
kernel::cpu::set_cr0_bit(kernel::cpu::cr0_flags::WRITE_PROTECT);
kernel::cpu::set_efer_bit(kernel::cpu::efer_flags::NXE);