Initial version of Allocator complete. Added new, delete, new\[\] and delete\[\]. Preparations for Process and Kernel made
This commit is contained in:
parent
e6e156e255
commit
b4375d1269
@ -22,8 +22,8 @@ int main() {
|
|||||||
|
|
||||||
Allocator kernel_allocator = Allocator(&kernel_pd, &phys_pm, &virt_pm, 0xd0000000);
|
Allocator kernel_allocator = Allocator(&kernel_pd, &phys_pm, &virt_pm, 0xd0000000);
|
||||||
|
|
||||||
void* alloc = kernel_allocator.allocate(4096);
|
uint8_t* test2 = new(&kernel_allocator)uint8_t;
|
||||||
void* alloc2 = kernel_allocator.allocate(4096);
|
uint8_t* test = new(&kernel_allocator)uint8_t[1024];
|
||||||
|
|
||||||
init_idt();
|
init_idt();
|
||||||
init_term();
|
init_term();
|
||||||
@ -32,7 +32,7 @@ int main() {
|
|||||||
|
|
||||||
printf("KERNEL OK!\n");
|
printf("KERNEL OK!\n");
|
||||||
|
|
||||||
printf("Alloc: %x\nAlloc2: %x\n", alloc, alloc2);
|
printf("Test: %x\nTest 2:%x\n", test, test2);
|
||||||
|
|
||||||
init_keyboard();
|
init_keyboard();
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ Allocator::Allocator(PageDirectory* page_directory, PageMap* phys, PageMap* virt
|
|||||||
}
|
}
|
||||||
|
|
||||||
void* Allocator::allocate(uint32_t size) {
|
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);
|
uint32_t virt_addr = virt->find_next_available_from(this->virt_alloc_base, count);
|
||||||
this->virt->mark_unavailable(virt_addr, count);
|
this->virt->mark_unavailable(virt_addr, count);
|
||||||
@ -197,4 +197,20 @@ void Allocator::deallocate(uint32_t virt_addr) {
|
|||||||
|
|
||||||
phys->mark_available(phys_addr);
|
phys->mark_available(phys_addr);
|
||||||
virt->mark_unavailable(virt_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);
|
||||||
}
|
}
|
@ -83,6 +83,10 @@ public:
|
|||||||
void* operator new (uint32_t size, Allocator* allocator);
|
void* operator new (uint32_t size, Allocator* allocator);
|
||||||
void operator delete (void* ptr, 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 {
|
class Process : protected Allocator {
|
||||||
private:
|
private:
|
||||||
uint32_t PID;
|
uint32_t PID;
|
||||||
@ -91,4 +95,8 @@ public:
|
|||||||
Process(uint32_t PID);
|
Process(uint32_t PID);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Kernel : private Process {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
x
Reference in New Issue
Block a user