fix: scheduler L0 table confusion, PMM bitmap rounding, dead task handling
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user