From 5673c44a99a2c17e3796d91fef9b1d72a07789d6 Mon Sep 17 00:00:00 2001 From: karina Date: Sat, 2 May 2026 23:01:40 +0400 Subject: [PATCH] fix: scheduler L0 table confusion, PMM bitmap rounding, dead task handling --- Kernel/Source/Arch/DTB.c | 2 +- Kernel/Source/OS/Scheduler.c | 7 ++++++- Kernel/Source/VM/PMM.c | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Kernel/Source/Arch/DTB.c b/Kernel/Source/Arch/DTB.c index c57cfeb..961a1f6 100644 --- a/Kernel/Source/Arch/DTB.c +++ b/Kernel/Source/Arch/DTB.c @@ -25,7 +25,7 @@ void DTBParse(Pointer dtb, VMBootMemoryMap* bootMap) { ASCII* currentNode = ""; UInt32 currentDepth = 0; UInt32 reservedMemoryDepth = 0; - bool inReservedMemory = false; + Boolean inReservedMemory = false; while (true) { UInt32 token = BytesSwap32(*(UInt32*)structs); diff --git a/Kernel/Source/OS/Scheduler.c b/Kernel/Source/OS/Scheduler.c index a818f13..3310c91 100644 --- a/Kernel/Source/OS/Scheduler.c +++ b/Kernel/Source/OS/Scheduler.c @@ -15,7 +15,7 @@ static OSProcess sOSSchedulerKernelProcess; void SchedulerInitialize() { sOSSchedulerKernelProcess.id = 0; sOSSchedulerKernelProcess.state = OSTaskStateRunning; - sOSSchedulerKernelProcess.l0Table = gVMKernelL0Table; + sOSSchedulerKernelProcess.l0Table = (Address*)VMPhysToHHDM((Address)gVMKernelL0Table); StringCopy(sOSSchedulerKernelProcess.name, "kernel"); OSTask* kernelTask = (OSTask*)HeapAllocate(sizeof(OSTask)); @@ -90,6 +90,11 @@ Address SchedulerNext(Address stackPointer) { OSTask* nextTask = gOSSchedulerCurrentTask->next; loop { + if (nextTask->state == OSTaskStateDead) { + nextTask = nextTask->next; + if (nextTask == gOSSchedulerCurrentTask) OSPanic("No running tasks"); + continue; + } if (nextTask->state == OSTaskStateSleeping && nextTask->sleepTicks == 0) nextTask->state = OSTaskStateRunning; if (nextTask->state == OSTaskStateRunning) break; nextTask = nextTask->next; diff --git a/Kernel/Source/VM/PMM.c b/Kernel/Source/VM/PMM.c index 723d3c0..d1095db 100644 --- a/Kernel/Source/VM/PMM.c +++ b/Kernel/Source/VM/PMM.c @@ -28,7 +28,7 @@ static inline void BitmapUnset(MemoryPointer bitmap, Address address) { void PMMInitialize(VMBootMemoryMap* bootMap) { sPMMRamBase = bootMap->totalRAM.base; sPMMTotalPages = bootMap->totalRAM.size / kVMPageSize; - sPMMBitmapSize = sPMMTotalPages / kVMBlocksPerByte; + sPMMBitmapSize = (sPMMTotalPages + kVMBlocksPerByte - 1) / kVMBlocksPerByte; sPMMBitmap = (MemoryPointer)_kernelEnd; MemorySet(sPMMBitmap, 0, sPMMBitmapSize);