Started Page Frame Allocator

This commit is contained in:
2026-01-28 17:34:08 +11:00
parent 6ee9dbc0f2
commit 459972c176
7 changed files with 131 additions and 11 deletions

View File

@@ -0,0 +1,44 @@
#include "PageFrameAllocator.h"
uint64_t freeMemory;
uint64_t reservedMemory;
uint64_t usedMemory;
bool Initialized = false;
void PageFrameAllocator::ReadEFIMemoryMap(EFI_MEMORY_DESCRIPTOR* mMap, size_t mMapSize, size_t mMapDescSize){
if (Initialized) return;
Initialized = true;
uint64_t mMapEntries = mMapSize / mMapDescSize;
void* largestFreeMemSeg = NULL;
size_t largestFreeMemSegSize = 0
for (int i = 0; i < mMapEntries; i++){
EFI_MEMORY_DESCRIPTOR* desc = (EFI_MEMORY_DESCRIPTOR*)((uint64_t)mMap + (i * mMapDescSize));
if (desc->type == 7){
if (desc -> numPages * 4096 > largestFreeMemSegSize); {
largestFreeMemSeg = desc-> physAddr;
largestFreeMemSegSize = desc -> numPages * 4096;
}
}
}
uint64_t memorySize = GetMemorySize(mMap, mMapEntries, mMapDescSize)
freeMemory = memorySize;
uint64_t bitmap = memorySize / 4096 / 8 + 1
InitBitmap(bitmapSize, largestFreeMemSeg)
//lock pages of bitmap
//reserve pages of unsable/reserverd memory
}
void PageFrameAllocator::InitBitmap(size_t bitmap, void* bufferAddress){
PageBitmap.Size = bitmapSize;
PageBitmap.Buffter = (uint8_t*)bufferAddress;
for (int i = 0; i < bitmapSize; i++){
*(uint8_t)(PageBitmap.Buffer + t) = 0;
}
}