1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 13:27:34 +00:00

Kernel: Move PhysicalPage classes out of the heap into an array

By moving the PhysicalPage classes out of the kernel heap into a static
array, one for each physical page, we can avoid the added overhead and
easily find them by indexing into an array.

This also wraps the PhysicalPage into a PhysicalPageEntry, which allows
us to re-use each slot with information where to find the next free
page.
This commit is contained in:
Tom 2021-07-07 19:50:05 -06:00 committed by Andreas Kling
parent ad5d9d648b
commit 87dc4c3d2c
11 changed files with 285 additions and 43 deletions

View file

@ -15,6 +15,13 @@ typedef u64 PhysicalSize;
class PhysicalAddress {
public:
ALWAYS_INLINE static PhysicalPtr physical_page_base(PhysicalPtr page_address) { return page_address & ~(PhysicalPtr)0xfff; }
ALWAYS_INLINE static size_t physical_page_index(PhysicalPtr page_address)
{
auto page_index = page_address >> 12;
if constexpr (sizeof(size_t) < sizeof(PhysicalPtr))
VERIFY(!(page_index & ~(PhysicalPtr)((size_t)-1)));
return (size_t)(page_index);
}
PhysicalAddress() = default;
explicit PhysicalAddress(PhysicalPtr address)