fix: scheduler L0 table confusion, PMM bitmap rounding, dead task handling

This commit is contained in:
karina
2026-05-02 23:01:40 +04:00
parent 272b9c8998
commit 5673c44a99
3 changed files with 8 additions and 3 deletions
+6 -1
View File
@@ -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;