aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatteo Gmür <matteo.gmuer1@ost.ch>2024-11-24 13:51:12 +0000
committerMatteo Gmür <matteo.gmuer1@ost.ch>2024-11-24 13:51:12 +0000
commitc291e1ed629489c418049f6c4116433636717636 (patch)
treeaee0889f0d52ee51ada62ee992ee0b9682f78774
parent47732f54474a083e9f98e52714c12c0ca1181174 (diff)
downloadteachos-c291e1ed629489c418049f6c4116433636717636.tar.xz
teachos-c291e1ed629489c418049f6c4116433636717636.zip
Add comments and rename file
-rw-r--r--arch/x86_64/CMakeLists.txt2
-rw-r--r--arch/x86_64/include/arch/memory/heap/allocator.hpp46
-rw-r--r--arch/x86_64/include/arch/memory/heap/bump_allocator.hpp53
-rw-r--r--arch/x86_64/include/arch/memory/heap/concept.hpp7
-rw-r--r--arch/x86_64/src/kernel/main.cpp18
-rw-r--r--arch/x86_64/src/memory/heap/bump_allocator.cpp (renamed from arch/x86_64/src/memory/heap/allocator.cpp)7
-rw-r--r--arch/x86_64/src/memory/main.cpp2
7 files changed, 74 insertions, 61 deletions
diff --git a/arch/x86_64/CMakeLists.txt b/arch/x86_64/CMakeLists.txt
index 5b0e3a9..b758bf0 100644
--- a/arch/x86_64/CMakeLists.txt
+++ b/arch/x86_64/CMakeLists.txt
@@ -56,7 +56,7 @@ target_sources("_memory" PRIVATE
"src/memory/cpu/tlb.cpp"
"src/memory/cpu/control_register.cpp"
"src/memory/cpu/msr.cpp"
- "src/memory/heap/allocator.cpp"
+ "src/memory/heap/bump_allocator.cpp"
)
#[============================================================================[
diff --git a/arch/x86_64/include/arch/memory/heap/allocator.hpp b/arch/x86_64/include/arch/memory/heap/allocator.hpp
deleted file mode 100644
index 6f7535e..0000000
--- a/arch/x86_64/include/arch/memory/heap/allocator.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_MEMORY_HEAP_ALLOCATOR_HPP
-#define TEACHOS_ARCH_X86_64_MEMORY_HEAP_ALLOCATOR_HPP
-
-#include <cstdint>
-
-namespace teachos::arch::memory::heap
-{
- std::size_t constexpr HEAP_START = 0x4000'0000;
- std::size_t constexpr HEAP_SIZE = 100 * 1024;
-
- /**
- * @brief Simple heap allocator
- */
- struct bump_allocator
- {
- bump_allocator(std::size_t heap_start, std::size_t heap_end)
- : heap_start{heap_start}
- , heap_end{heap_end}
- , next{heap_start}
- {
- }
-
- /**
- * @brief Allocates the specified amount of memory in the heap
- *
- * @param size Amount of memory to allocate
- * @return Address of the allocated memory
- */
- auto allocate(std::size_t size) -> void *;
-
- /**
- * @brief Deallocates heap memory at the specified location
- *
- * @param pointer Pointer to the location which should be deallocated
- */
- auto deallocate(uint8_t * pointer) -> void;
-
- private:
- std::size_t heap_start;
- std::size_t heap_end;
- std::size_t next;
- };
-
-} // namespace teachos::arch::memory::heap
-
-#endif \ No newline at end of file
diff --git a/arch/x86_64/include/arch/memory/heap/bump_allocator.hpp b/arch/x86_64/include/arch/memory/heap/bump_allocator.hpp
new file mode 100644
index 0000000..5b581ba
--- /dev/null
+++ b/arch/x86_64/include/arch/memory/heap/bump_allocator.hpp
@@ -0,0 +1,53 @@
+#ifndef TEACHOS_ARCH_X86_64_MEMORY_HEAP_BUMP_ALLOCATOR_HPP
+#define TEACHOS_ARCH_X86_64_MEMORY_HEAP_BUMP_ALLOCATOR_HPP
+
+#include <cstdint>
+
+namespace teachos::arch::memory::heap
+{
+ /**
+ * @brief Simple heap allocator, which leaks all allocated memory, because it does not really deallocate anything.
+ */
+ struct bump_allocator
+ {
+ /**
+ * @brief Constructor.
+ *
+ * @param heap_start Start of the allocatable heap area
+ * @param heap_end End of the allocatable heap area (Start + Size)
+ */
+ bump_allocator(std::size_t heap_start, std::size_t heap_end)
+ : heap_start{heap_start}
+ , heap_end{heap_end}
+ , next{heap_start}
+ {
+ // Nothing to do
+ }
+
+ /**
+ * @brief Allocates the specified amount of memory in the heap.
+ *
+ * @param size Amount of memory to allocate.
+ * @return Address of the first byte to the allocated area
+ */
+ auto allocate(std::size_t size) -> void *;
+
+ /**
+ * @brief Deallocates heap memory at the specified location.
+ *
+ * @note Simply does nothing, because this allocator leaks all memory.
+ *
+ * @param pointer Pointer to the location which should be deallocated.
+ * @param size Size of the underlying memory area we want to deallocate.
+ */
+ auto deallocate(uint8_t * pointer, std::size_t size) -> void;
+
+ private:
+ std::size_t heap_start; ///< Start of the allocatable heap area
+ std::size_t heap_end; ///< End of the allocatable heap area
+ std::size_t next; ///< Current address, which is the start of still unused allocatable heap area
+ };
+
+} // namespace teachos::arch::memory::heap
+
+#endif // TEACHOS_ARCH_X86_64_MEMORY_HEAP_BUMP_ALLOCATOR_HPP
diff --git a/arch/x86_64/include/arch/memory/heap/concept.hpp b/arch/x86_64/include/arch/memory/heap/concept.hpp
index a525b0b..8c8c887 100644
--- a/arch/x86_64/include/arch/memory/heap/concept.hpp
+++ b/arch/x86_64/include/arch/memory/heap/concept.hpp
@@ -1,10 +1,13 @@
#ifndef TEACHOS_ARCH_X86_64_MEMORY_HEAP_CONCEPT_HPP
#define TEACHOS_ARCH_X86_64_MEMORY_HEAP_CONCEPT_HPP
-#include <cstdint>
+#include <concepts>
namespace teachos::arch::memory::heap
{
+ std::size_t constexpr HEAP_START = 0x4000'0000;
+ std::size_t constexpr HEAP_SIZE = 100 * 1024;
+
template<typename T>
concept HeapAllocator = requires(T t, uint8_t * pointer, std::size_t size) {
{ t.allocate(size) } -> std::same_as<uint8_t *>;
@@ -12,4 +15,4 @@ namespace teachos::arch::memory::heap
};
} // namespace teachos::arch::memory::heap
-#endif // TEACHOS_ARCH_X86_64_MEMORY_HEAP_CONCEPT_HPP \ No newline at end of file
+#endif // TEACHOS_ARCH_X86_64_MEMORY_HEAP_CONCEPT_HPP
diff --git a/arch/x86_64/src/kernel/main.cpp b/arch/x86_64/src/kernel/main.cpp
index cbd6e68..ce13723 100644
--- a/arch/x86_64/src/kernel/main.cpp
+++ b/arch/x86_64/src/kernel/main.cpp
@@ -1,6 +1,9 @@
#include "arch/kernel/main.hpp"
+#include "arch/memory/heap/bump_allocator.hpp"
+#include "arch/memory/heap/concept.hpp"
#include "arch/memory/main.hpp"
+#include "arch/memory/multiboot/reader.hpp"
#include "arch/video/vga/text.hpp"
namespace teachos::arch::kernel
@@ -13,15 +16,16 @@ namespace teachos::arch::kernel
memory::initialize_memory_management();
- // heap::bump_allocator heap_allocator{memory::heap::HEAP_START, heap::HEAP_START + memory::heap::HEAP_SIZE};
- // auto test = heap_allocator.allocate(1024);
+ memory::heap::bump_allocator heap_allocator{memory::heap::HEAP_START,
+ memory::heap::HEAP_START + memory::heap::HEAP_SIZE};
+ auto test = heap_allocator.allocate(1024);
- // auto test2 = new (test) multiboot::memory_information{};
+ auto test2 = new (test) memory::multiboot::memory_information{};
- // if (test || test2)
- // {
- // video::vga::text::write("Kernel remapping successfull", video::vga::text::common_attributes::green_on_black);
- // }
+ if (test || test2)
+ {
+ video::vga::text::write("Kernel remapping successfull", video::vga::text::common_attributes::green_on_black);
+ }
// TODO: Why is identity mapping multiboot2 information structure with new kernel not required and
// allocator.allocate_frame still works?
diff --git a/arch/x86_64/src/memory/heap/allocator.cpp b/arch/x86_64/src/memory/heap/bump_allocator.cpp
index bb61be4..486ece8 100644
--- a/arch/x86_64/src/memory/heap/allocator.cpp
+++ b/arch/x86_64/src/memory/heap/bump_allocator.cpp
@@ -1,4 +1,4 @@
-#include "arch/memory/heap/allocator.hpp"
+#include "arch/memory/heap/bump_allocator.hpp"
#include "arch/exception_handling/assert.hpp"
@@ -17,10 +17,9 @@ namespace teachos::arch::memory::heap
return reinterpret_cast<void *>(alloc_start);
}
- auto bump_allocator::deallocate(uint8_t * pointer) -> void
+ auto bump_allocator::deallocate(uint8_t * pointer, std::size_t size) -> void
{
- // Not implemented; leaking memory
- if (pointer)
+ if (pointer || size)
{
}
}
diff --git a/arch/x86_64/src/memory/main.cpp b/arch/x86_64/src/memory/main.cpp
index 80242cc..34ce113 100644
--- a/arch/x86_64/src/memory/main.cpp
+++ b/arch/x86_64/src/memory/main.cpp
@@ -4,7 +4,7 @@
#include "arch/memory/allocator/area_frame_allocator.hpp"
#include "arch/memory/cpu/control_register.hpp"
#include "arch/memory/cpu/msr.hpp"
-#include "arch/memory/heap/allocator.hpp"
+#include "arch/memory/heap/concept.hpp"
#include "arch/memory/paging/active_page_table.hpp"
#include "arch/memory/paging/kernel_mapper.hpp"