diff options
Diffstat (limited to 'arch/x86_64/include')
| -rw-r--r-- | arch/x86_64/include/arch/memory/allocator/stack_frame_allocator.hpp | 67 |
1 files changed, 0 insertions, 67 deletions
diff --git a/arch/x86_64/include/arch/memory/allocator/stack_frame_allocator.hpp b/arch/x86_64/include/arch/memory/allocator/stack_frame_allocator.hpp deleted file mode 100644 index a8e7233..0000000 --- a/arch/x86_64/include/arch/memory/allocator/stack_frame_allocator.hpp +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef TEACHOS_ARCH_X86_64_MEMORY_ALLOCATOR_STACK_FRAME_ALLOCATOR_HPP -#define TEACHOS_ARCH_X86_64_MEMORY_ALLOCATOR_STACK_FRAME_ALLOCATOR_HPP - -#include "arch/memory/allocator/physical_frame.hpp" -#include "arch/memory/multiboot/reader.hpp" -#include "arch/stl/stack.hpp" - -#include <optional> - -namespace teachos::arch::memory::allocator -{ - /** - * @brief Uses an internal stack-like dynamic structure to keep track of the address of all avaialable physical frames - * that are available using the memory areas read from the multiboot2 information pointer and simply pushes - * deallocated frames back onto the stack. Allows for constant speed O(1) allocation and deallocation - */ - struct stack_frame_allocator - { - /** - * @brief Constructor - * - * @param mem_info Structure containg all relevant information to map and allocate memory - */ - stack_frame_allocator(multiboot::memory_information const & mem_info); - - /** - * @brief Allocate memory by finding and returning a free physical frame. - * - * @return next free physical frame or nullopt if none was found. - */ - auto allocate_frame() -> std::optional<physical_frame>; - - /** - * @brief Deallocates a previously allocated physical frame. - * - * @param physical_frame Previously allocated physical_frame that should be deallocated. - */ - auto deallocate_frame(physical_frame const & physical_frame) -> void; - - private: - /** - * @brief Load all initally free physical frames from the current memory area into the underlying stack data - * structure so they can simply be accessed once required. Recallling the method will load all free physical frames - * from the next free memory area until there are no memory areas left. - */ - auto load_free_physical_frames() -> void; - - /** - * @brief Find the next memory area and write it into current_area. - */ - auto choose_next_area() -> void; - - stl::stack<physical_frame> free_frames; ///< All currently free physical frames in a LIFO (last-in, first-out) - ///< data structure. - physical_frame next_free_frame; ///< The physical_frame after the last allocated one. - std::optional<multiboot::memory_area> current_area; ///< The current memory area. - multiboot::memory_area_container const - memory_areas; ///< All memory areas in custom container allows to use std::ranges. - physical_frame const kernel_start; ///< The start address of the kernel code in memory. - physical_frame const kernel_end; ///< The end address of the kernel code in memory. - physical_frame const multiboot_start; ///< The start address of the multiboot code in memory. - physical_frame const multiboot_end; ///< The end address of the multiboot code in memory. - }; - -} // namespace teachos::arch::memory::allocator - -#endif // TEACHOS_ARCH_X86_64_MEMORY_ALLOCATOR_STACK_FRAME_ALLOCATOR_HPP |
