Improved kernel memory usage
Moved base linear address to 0xFF800000 Kernel only reserves the page frames it actually needs Memory for multiboot2 headers is freed Video memory and APIC registers are dynamically mapped into linear addresses
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
#include "pageallocator.h"
|
||||
#include "mmgr.h"
|
||||
#include "allocator.h"
|
||||
#include "types/status.h"
|
||||
|
||||
physaddr_t reserve_page(struct page_stack_t *stack)
|
||||
@@ -15,12 +17,25 @@ physaddr_t reserve_page(struct page_stack_t *stack)
|
||||
|
||||
int free_page(struct page_stack_t *stack, physaddr_t location)
|
||||
{
|
||||
void *new_limit;
|
||||
if(stack->stack_pointer > stack->limit_pointer)
|
||||
{
|
||||
stack->stack_pointer--;
|
||||
*stack->stack_pointer = location;
|
||||
return S_OK;
|
||||
}
|
||||
else if((new_limit = allocate_from_top(page_size)) != NULL)
|
||||
{
|
||||
switch(map_page(stack, new_limit, location, PAGE_RW))
|
||||
{
|
||||
case S_OUT_OF_MEMORY:
|
||||
return S_OUT_OF_MEMORY;
|
||||
case S_OUT_OF_BOUNDS:
|
||||
return S_OUT_OF_BOUNDS;
|
||||
case S_OK:
|
||||
stack->limit_pointer = new_limit;
|
||||
}
|
||||
}
|
||||
return S_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
@@ -29,7 +44,7 @@ size_t free_page_count(struct page_stack_t *stack)
|
||||
return stack->base_pointer - stack->stack_pointer;
|
||||
}
|
||||
|
||||
int initialize_page_stack(struct page_stack_t *stack, struct memory_map_t *map, size_t page_size)
|
||||
int initialize_page_stack(struct page_stack_t *stack, struct memory_map_t *map)
|
||||
{
|
||||
stack->total_pages = 0;
|
||||
for(int i = 0; i < map->size; i++)
|
||||
|
||||
Reference in New Issue
Block a user