diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp index 01c49f7..13eec48 100644 --- a/src/kernel/kernel.cpp +++ b/src/kernel/kernel.cpp @@ -22,8 +22,8 @@ int main() { Allocator kernel_allocator = Allocator(&kernel_pd, &phys_pm, &virt_pm, 0xd0000000); - void* alloc = kernel_allocator.allocate(4096); - void* alloc2 = kernel_allocator.allocate(4096); + uint8_t* test2 = new(&kernel_allocator)uint8_t; + uint8_t* test = new(&kernel_allocator)uint8_t[1024]; init_idt(); init_term(); @@ -32,7 +32,7 @@ int main() { printf("KERNEL OK!\n"); - printf("Alloc: %x\nAlloc2: %x\n", alloc, alloc2); + printf("Test: %x\nTest 2:%x\n", test, test2); init_keyboard(); diff --git a/src/kernel/memory.cpp b/src/kernel/memory.cpp index 7acfefa..b57de9d 100644 --- a/src/kernel/memory.cpp +++ b/src/kernel/memory.cpp @@ -176,7 +176,7 @@ Allocator::Allocator(PageDirectory* page_directory, PageMap* phys, PageMap* virt } void* Allocator::allocate(uint32_t size) { - uint32_t count = (size + (4096%size)) / 4096; + uint32_t count = (size + (4096 - size % 4096)) / 4096; uint32_t virt_addr = virt->find_next_available_from(this->virt_alloc_base, count); this->virt->mark_unavailable(virt_addr, count); @@ -197,4 +197,20 @@ void Allocator::deallocate(uint32_t virt_addr) { phys->mark_available(phys_addr); virt->mark_unavailable(virt_addr); +} + +void* operator new (uint32_t size, Allocator* allocator) { + return allocator->allocate(size); +} + +void operator delete (void* ptr, Allocator* allocator) { + allocator->deallocate((uint32_t)ptr); +} + +void* operator new[] (uint32_t size, Allocator* allocator) { + return allocator->allocate(size); +} + +void operator delete[] (void* ptr, Allocator* allocator) { + allocator->deallocate((uint32_t)ptr); } \ No newline at end of file diff --git a/src/kernel/memory.h b/src/kernel/memory.h index d0a1a99..49104c8 100644 --- a/src/kernel/memory.h +++ b/src/kernel/memory.h @@ -83,6 +83,10 @@ public: void* operator new (uint32_t size, Allocator* allocator); void operator delete (void* ptr, Allocator* allocator); +void* operator new[] (uint32_t size, Allocator* allocator); +void operator delete[] (void* ptr, Allocator* allocator); + + class Process : protected Allocator { private: uint32_t PID; @@ -91,4 +95,8 @@ public: Process(uint32_t PID); }; +class Kernel : private Process { + +}; + #endif \ No newline at end of file