Kernel: Add barebones GeneralAllocator for >4096B

This commit is contained in:
Bananymous
2023-05-08 22:10:49 +03:00
parent f1667b398a
commit 512be884ed
8 changed files with 169 additions and 13 deletions

View File

@@ -312,7 +312,7 @@ namespace Kernel
// Find any free page page (except for page 0)
vaddr_t address = PAGE_SIZE;
while ((address << 48) == 0)
while ((address >> 48) == 0)
{
if (!(get_page_flags(address) & Flags::Present))
return address;
@@ -322,6 +322,27 @@ namespace Kernel
ASSERT_NOT_REACHED();
}
vaddr_t MMU::get_free_contiguous_pages(size_t page_count) const
{
for (vaddr_t address = PAGE_SIZE; !(address >> 48); address += PAGE_SIZE)
{
bool valid { true };
for (size_t page = 0; page < page_count; page++)
{
if (get_page_flags(address + page * PAGE_SIZE) & Flags::Present)
{
address += page;
valid = false;
break;
}
}
if (valid)
return address;
}
ASSERT_NOT_REACHED();
}
bool MMU::is_page_free(vaddr_t page) const
{
ASSERT(page % PAGE_SIZE == 0);