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:
parent
ad5d9d648b
commit
87dc4c3d2c
11 changed files with 285 additions and 43 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue