mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-28 15:34:33 +00:00
Kernel & User time stub
This commit is contained in:
parent
6a05343e51
commit
042bce48a0
@ -139,13 +139,13 @@ namespace CrashHandler
|
||||
return;
|
||||
break;
|
||||
case KEY_D_RIGHT:
|
||||
if (SBIdx > 250)
|
||||
if (SBIdx > 251)
|
||||
SBIdx--;
|
||||
else
|
||||
return;
|
||||
break;
|
||||
case KEY_D_DOWN:
|
||||
if (SBIdx > 250)
|
||||
if (SBIdx > 251)
|
||||
SBIdx--;
|
||||
else
|
||||
return;
|
||||
@ -446,10 +446,10 @@ namespace CrashHandler
|
||||
crashdata.Process = cpudata->CurrentProcess;
|
||||
crashdata.Thread = cpudata->CurrentThread;
|
||||
|
||||
error("Current Process: %s(%ld)\n",
|
||||
error("Current Process: %s(%ld)",
|
||||
cpudata->CurrentProcess->Name,
|
||||
cpudata->CurrentProcess->ID);
|
||||
error("Current Thread: %s(%ld)\n",
|
||||
error("Current Thread: %s(%ld)",
|
||||
cpudata->CurrentThread->Name,
|
||||
cpudata->CurrentThread->ID);
|
||||
}
|
||||
|
@ -44,17 +44,19 @@ namespace CrashHandler
|
||||
if (TaskManager)
|
||||
{
|
||||
if (data.Thread)
|
||||
EHPrint("\eFAFAFACrash occured in thread \eAA0F0F%s\eFAFAFA(%ld)\n", data.Thread->Name, data.Thread->ID);
|
||||
EHPrint("\eFAFAFACrash occured in thread \eAA0F0F%s\eFAFAFA(%ld) at \e00AAAA%#lx\n", data.Thread->Name, data.Thread->ID, data.Frame->rip);
|
||||
|
||||
EHPrint("\eFAFAFAProcess list (%ld):\n", Plist.size());
|
||||
foreach (auto Process in Plist)
|
||||
{
|
||||
EHPrint("\e%s-> \eFAFAFA%s\eCCCCCC(%ld) \e00AAAA%s\n",
|
||||
StatusColor[Process->Status], Process->Name, Process->ID, StatusString[Process->Status]);
|
||||
EHPrint("\e%s-> \eFAFAFA%s\eCCCCCC(%ld) \e00AAAA%s\eFAFAFA PT:\e00AAAA%#lx\n",
|
||||
StatusColor[Process->Status], Process->Name, Process->ID, StatusString[Process->Status],
|
||||
Process->PageTable);
|
||||
|
||||
foreach (auto Thread in Process->Threads)
|
||||
EHPrint("\e%s -> \eFAFAFA%s\eCCCCCC(%ld) \e00AAAA%s\n",
|
||||
StatusColor[Thread->Status], Thread->Name, Thread->ID, StatusString[Thread->Status]);
|
||||
EHPrint("\e%s -> \eFAFAFA%s\eCCCCCC(%ld) \e00AAAA%s\eFAFAFA Stack:\e00AAAA%#lx\n",
|
||||
StatusColor[Thread->Status], Thread->Name, Thread->ID, StatusString[Thread->Status],
|
||||
Thread->Stack);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -46,7 +46,7 @@ namespace Driver
|
||||
SmartLock(DriverDisplayPrintLock);
|
||||
debug("Requesting %ld pages from the kernel...", Size);
|
||||
void *ret = KernelAllocator.RequestPages(Size);
|
||||
debug("Got %p", ret);
|
||||
debug("Got %#lx", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -107,11 +107,23 @@ namespace Tasking
|
||||
}
|
||||
}
|
||||
|
||||
__no_stack_protector void Task::UpdateInfo(TaskInfo *Info, int Core)
|
||||
__no_stack_protector void Task::UpdateUserTime(TaskInfo *Info)
|
||||
{
|
||||
// TODO
|
||||
Info->UserTime++;
|
||||
}
|
||||
|
||||
__no_stack_protector void Task::UpdateKernelTime(TaskInfo *Info)
|
||||
{
|
||||
// TODO
|
||||
Info->KernelTime++;
|
||||
}
|
||||
|
||||
__no_stack_protector void Task::UpdateUsage(TaskInfo *Info, int Core)
|
||||
{
|
||||
if (Info->Affinity[Core] == true)
|
||||
{
|
||||
// TODO: Not working
|
||||
// TODO: Not working(?)
|
||||
uint64_t CounterNow = CPU::Counter();
|
||||
|
||||
Info->OldUserTime = Info->CurrentUserTime;
|
||||
@ -120,9 +132,6 @@ namespace Tasking
|
||||
Info->CurrentUserTime = Info->UserTime;
|
||||
Info->CurrentKernelTime = Info->KernelTime;
|
||||
|
||||
Info->UserTime = 0;
|
||||
Info->KernelTime = 0;
|
||||
|
||||
Info->Usage[Core] = (Info->CurrentUserTime - Info->OldUserTime) + (Info->CurrentKernelTime - Info->OldKernelTime);
|
||||
Info->Usage[Core] = (Info->Usage[Core] * 100) / (CounterNow - Info->SpawnTime);
|
||||
|
||||
@ -317,6 +326,7 @@ namespace Tasking
|
||||
schedbg("Scheduler called on CPU %d.", CurrentCPU->ID);
|
||||
schedbg("%d: %ld%%", CurrentCPU->ID, GetUsage(CurrentCPU->ID));
|
||||
|
||||
{
|
||||
schedbg("================================================================");
|
||||
schedbg("Status: 0-ukn | 1-rdy | 2-run | 3-wait | 4-term");
|
||||
schedbg("Technical Informations on regs %#lx", Frame->InterruptNumber);
|
||||
@ -334,6 +344,7 @@ namespace Tasking
|
||||
schedbg("RIP=%#lx RFL=%#lx INT=%#lx ERR=%#lx",
|
||||
Frame->rip, Frame->rflags, Frame->InterruptNumber, Frame->ErrorCode);
|
||||
schedbg("================================================================");
|
||||
}
|
||||
|
||||
// Null or invalid process/thread? Let's find a new one to execute.
|
||||
if (InvalidPCB(CurrentCPU->CurrentProcess) || InvalidTCB(CurrentCPU->CurrentThread))
|
||||
@ -467,10 +478,22 @@ namespace Tasking
|
||||
}
|
||||
End:
|
||||
{
|
||||
UpdateInfo(&CurrentCPU->CurrentProcess->Info, CurrentCPU->ID);
|
||||
UpdateInfo(&CurrentCPU->CurrentThread->Info, CurrentCPU->ID);
|
||||
// TODO: This is not accurate.
|
||||
if (CurrentCPU->CurrentProcess->Security.TrustLevel == TaskTrustLevel::User)
|
||||
UpdateUserTime(&CurrentCPU->CurrentProcess->Info);
|
||||
else
|
||||
UpdateKernelTime(&CurrentCPU->CurrentProcess->Info);
|
||||
|
||||
if (CurrentCPU->CurrentThread->Security.TrustLevel == TaskTrustLevel::User)
|
||||
UpdateUserTime(&CurrentCPU->CurrentThread->Info);
|
||||
else
|
||||
UpdateKernelTime(&CurrentCPU->CurrentThread->Info);
|
||||
|
||||
UpdateUsage(&CurrentCPU->CurrentProcess->Info, CurrentCPU->ID);
|
||||
UpdateUsage(&CurrentCPU->CurrentThread->Info, CurrentCPU->ID);
|
||||
OneShot(CurrentCPU->CurrentThread->Info.Priority);
|
||||
}
|
||||
{
|
||||
schedbg("================================================================");
|
||||
schedbg("Technical Informations on Thread %s[%ld]:", CurrentCPU->CurrentThread->Name, CurrentCPU->CurrentThread->ID);
|
||||
schedbg("FS=%#lx GS=%#lx SS=%#lx CS=%#lx DS=%#lx",
|
||||
@ -487,6 +510,7 @@ namespace Tasking
|
||||
schedbg("RIP=%#lx RFL=%#lx INT=%#lx ERR=%#lx",
|
||||
Frame->rip, Frame->rflags, Frame->InterruptNumber, Frame->ErrorCode);
|
||||
schedbg("================================================================");
|
||||
}
|
||||
RealEnd:
|
||||
{
|
||||
schedbg("Scheduler end");
|
||||
|
@ -193,7 +193,9 @@ namespace Tasking
|
||||
void RemoveThread(TCB *tcb);
|
||||
void RemoveProcess(PCB *pcb);
|
||||
|
||||
void UpdateInfo(TaskInfo *Info, int Core);
|
||||
void UpdateUserTime(TaskInfo *Info);
|
||||
void UpdateKernelTime(TaskInfo *Info);
|
||||
void UpdateUsage(TaskInfo *Info, int Core);
|
||||
|
||||
bool FindNewProcess(void *CPUDataPointer);
|
||||
bool GetNextAvailableThread(void *CPUDataPointer);
|
||||
|
Loading…
x
Reference in New Issue
Block a user