public static void SelfTest() { if (SelfTestDump) { Default.DumpPages(); } KernelMessage.WriteLine("Begin SelfTest"); var ptrPages = ((BootInfo.Header->InstalledPhysicalMemory / 4096) * 4) / 4096; var ptrList = (Addr *)AllocatePageAddr(ptrPages); // pointers for 4GB of pages var ptrListMapped = (Addr *)0x3000; PageTable.KernelTable.Map(ptrListMapped, ptrList, ptrPages * 4096, true, true); var checkPageCount = Default.FreePages; checkPageCount -= Default.CriticalLowPages; //checkPageCount = 32; var mapAddr = 0x2000u; for (var i = 0; i < checkPageCount; i++) { if (SelfTestDump) { KernelMessage.Write("."); } var testPage = Default.AllocatePage(); var testAddr = Default.GetAddress(testPage); ptrListMapped[i] = testAddr; PageTable.KernelTable.Map(mapAddr, testAddr, 4096, true, true); var mapPtr = (uint *)mapAddr; for (var pos = 0; pos < 1024; pos++) { *mapPtr = 0xEBFEEBFE; mapPtr += 1; } PageTable.KernelTable.UnMap(mapAddr, 4096, true); //Default.Free(testPage); } if (SelfTestDump) { Default.DumpPages(); } KernelMessage.WriteLine("Free Pages now"); for (var i = 0; i < checkPageCount; i++) { if (SelfTestDump) { KernelMessage.Write(":"); } var testAddr = ptrListMapped[i]; Default.FreeAddr(testAddr); } Default.FreeAddr(ptrList); KernelMessage.WriteLine("SelfTest Done"); if (SelfTestDump) { Default.DumpPages(); KernelMessage.WriteLine("Final Dump"); } }
public static Addr AllocatePageAddr(this IPageFrameAllocator allocator, AllocatePageOptions options = default) { return(allocator.GetAddress(allocator.AllocatePage(options))); }