diff options
| author | Matteo Gmür <matteo.gmuer1@ost.ch> | 2025-04-14 15:21:52 +0000 |
|---|---|---|
| committer | Matteo Gmür <matteo.gmuer1@ost.ch> | 2025-04-14 15:21:52 +0000 |
| commit | eafe8533bb5ccbe15bd8ffbc917b38122b04a157 (patch) | |
| tree | 53a04ecb68f816a71400e27452bb8393f23a80d3 /arch/x86_64/src/memory/main.cpp | |
| parent | 4909c80b31f3198030d3e666db87cfd39ac87c6f (diff) | |
| download | teachos-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.cpp | 20 |
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); |
