Clearing up kutil/kernel memory code separation

This commit is contained in:
Justin C. Miller
2018-09-07 10:08:47 -07:00
parent 956efabd8f
commit cabfec3f1e
4 changed files with 41 additions and 24 deletions

View File

@@ -1,18 +0,0 @@
#include "kutil/memory_manager.h"
#include "log.h"
kutil::memory_manager g_kernel_memory_manager;
// kutil malloc/free implementation
namespace kutil {
void *
malloc(size_t n) {
void *p = g_kernel_memory_manager.allocate(n);
log::debug(logs::memory, "Heap allocated %ld bytes: %016lx", n, p);
return p;
}
void free(void *p) { g_kernel_memory_manager.free(p); }
}

View File

@@ -7,6 +7,7 @@
#include "page_manager.h"
page_manager g_page_manager;
kutil::memory_manager g_kernel_memory_manager;
static addr_t
@@ -215,10 +216,10 @@ page_manager::init(
}
}
extern kutil::memory_manager g_kernel_memory_manager;
new (&g_kernel_memory_manager) kutil::memory_manager(
reinterpret_cast<void *>(end),
mm_grow_callback);
kutil::setup::set_heap(&g_kernel_memory_manager);
m_kernel_pml4 = get_pml4();
}

View File

@@ -1,4 +1,5 @@
#include "memory.h"
#include "memory_manager.h"
void * operator new (size_t, void *p) noexcept { return p; }
void * operator new (size_t n) { return kutil::malloc(n); }
@@ -8,6 +9,32 @@ void operator delete[] (void *p) noexcept { return kutil::free(p); }
namespace kutil {
namespace setup {
static memory_manager *heap_memory_manager;
void
set_heap(memory_manager *mm)
{
setup::heap_memory_manager = mm;
}
} // namespace kutil::setup
void *
malloc(size_t n)
{
return setup::heap_memory_manager->allocate(n);
}
void
free(void *p)
{
setup::heap_memory_manager->free(p);
}
void *
memset(void *s, uint8_t v, size_t n)
{

View File

@@ -11,15 +11,12 @@ void * operator new (size_t, void *p) noexcept;
namespace kutil {
/// Allocate memory. Note: this needs to be implemented
/// by the kernel, or other program using this library.
/// Allocate memory.
/// \arg n The number of bytes to allocate
/// \returns The allocated memory
void * malloc(size_t n);
/// Free memory allocated by malloc(). Note: this needs
/// to be implemented by the kernel, or other program
/// using this library.
/// Free memory allocated by malloc().
/// \arg p A pointer previously returned by malloc()
void free(void *p);
@@ -72,4 +69,14 @@ inline T* mask_pointer(T *p, addr_t mask)
/// \arg off An optional offset into the region
uint8_t checksum(const void *p, size_t len, size_t off = 0);
class memory_manager;
namespace setup {
/// Set the heap that malloc() / free() will use.
/// \arg mm The heap manager for the heap to use.
void set_heap(memory_manager *mm);
} // namespace kutil::setup
} // namespace kutil