aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/include
diff options
context:
space:
mode:
authorFabian Imhof <fabian.imhof@ost.ch>2025-05-07 14:06:25 +0000
committerFabian Imhof <fabian.imhof@ost.ch>2025-05-07 14:06:25 +0000
commitbe32189323ba8c46091d6deaf091cf41147426b4 (patch)
tree499d4626c82dcae9fac683983e6605d88a0d6f95 /arch/x86_64/include
parentc9f46f3773e7943ce114af888a44f50061c2ac1d (diff)
downloadteachos-be32189323ba8c46091d6deaf091cf41147426b4.tar.xz
teachos-be32189323ba8c46091d6deaf091cf41147426b4.zip
wip custom heap allocation functions for user mode
Diffstat (limited to 'arch/x86_64/include')
-rw-r--r--arch/x86_64/include/arch/memory/heap/global_heap_allocator.hpp39
-rw-r--r--arch/x86_64/include/arch/memory/heap/heap_allocator.hpp6
2 files changed, 37 insertions, 8 deletions
diff --git a/arch/x86_64/include/arch/memory/heap/global_heap_allocator.hpp b/arch/x86_64/include/arch/memory/heap/global_heap_allocator.hpp
index 772f171..bfc7b67 100644
--- a/arch/x86_64/include/arch/memory/heap/global_heap_allocator.hpp
+++ b/arch/x86_64/include/arch/memory/heap/global_heap_allocator.hpp
@@ -45,7 +45,7 @@ namespace teachos::arch::memory::heap
* @param size Amount of bytes that should be allocated
* @return void* Pointer to the start of the allocatable memory area
*/
- static auto allocate(std::size_t size) -> void *;
+ static auto kmalloc(std::size_t size) -> void *;
/**
* @brief Deallocated all memory associated with the memory area starting from the given pointer address.
@@ -53,17 +53,44 @@ namespace teachos::arch::memory::heap
*
* @param pointer Previously allocated memory area, that should now be freed
*/
- static auto deallocate(void * pointer) noexcept -> void;
+ static auto kfree(void * pointer) noexcept -> void;
+
+ /**
+ * @brief Allocates the given amount of memory and returns the pointer to the start of the allocatable memory area.
+ * Simply forwards the call to the allocate method of the registered heap_allocation implementation
+ *
+ * @param size Amount of bytes that should be allocated
+ * @return void* Pointer to the start of the allocatable memory area
+ */
+ [[gnu::section(".user_text")]]
+ static auto malloc(std::size_t size) -> void *;
+
+ /**
+ * @brief Deallocated all memory associated with the memory area starting from the given pointer address.
+ * Simply forwards the call to the deallocate method of the registered heap_allocation implementation
+ *
+ * @param pointer Previously allocated memory area, that should now be freed
+ */
+ [[gnu::section(".user_text")]]
+ static auto free(void * pointer) noexcept -> void;
private:
- static heap_allocator * allocator_instance; ///< Instance used to actually allocate and deallocate
+ static heap_allocator * kernel_allocator_instance; ///< Instance used to allocate and deallocate kernel heap memory
+ static heap_allocator * user_allocator_instance; ///< Instance used to allocate and deallocate user heap memory
+
+ /**
+ * @brief Either returns the previously registered heap allocated or halts further execution
+ *
+ * @return Reference to the registered kernel heap allocation
+ */
+ static auto kernel() -> heap_allocator &;
/**
- * @brief Either returns the previously registered heap allocated or halts furthere execution
+ * @brief Either returns the previously registered heap allocated or halts further execution
*
- * @return Reference to the registered heap allocation
+ * @return Reference to the registered user heap allocation
*/
- static auto get() -> heap_allocator &;
+ static auto user() -> heap_allocator &;
};
} // namespace teachos::arch::memory::heap
diff --git a/arch/x86_64/include/arch/memory/heap/heap_allocator.hpp b/arch/x86_64/include/arch/memory/heap/heap_allocator.hpp
index 6aed3d8..420a1d3 100644
--- a/arch/x86_64/include/arch/memory/heap/heap_allocator.hpp
+++ b/arch/x86_64/include/arch/memory/heap/heap_allocator.hpp
@@ -5,8 +5,10 @@
namespace teachos::arch::memory::heap
{
- std::size_t constexpr HEAP_START = 0x100000000;
- std::size_t constexpr HEAP_SIZE = 100 * 1024;
+ std::size_t constexpr KERNEL_HEAP_START = 0x100000000;
+ std::size_t constexpr KERNEL_HEAP_SIZE = 100 * 1024;
+ std::size_t constexpr USER_HEAP_START = 0x100019000; // Starts directly after kernel heap
+ std::size_t constexpr USER_HEAP_SIZE = 100 * 1024;
/**
* @brief Heap allocator interface containing methods required to allocate and deallocate heap memory areas