Added GetSchedulerTicks()

This commit is contained in:
Alex 2023-02-14 03:52:42 +02:00
parent a21c2063ae
commit 47a10df568
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
3 changed files with 10 additions and 4 deletions

View File

@ -445,6 +445,7 @@ namespace Tasking
return;
}
CPU::x64::writecr3({.raw = (uint64_t)KernelPageTable}); /* Restore kernel page table for safety reasons. */
uint64_t SchedTmpTicks = CPU::Counter();
CPUData *CurrentCPU = GetCurrentCPU();
schedbg("Scheduler called on CPU %d.", CurrentCPU->ID);
schedbg("%d: %ld%%", CurrentCPU->ID, GetUsage(CurrentCPU->ID));
@ -635,6 +636,7 @@ namespace Tasking
/* RealEnd->[Function Exit] */
RealEnd:
this->SchedulerTicks.Store(CPU::Counter() - SchedTmpTicks);
__sync_synchronize(); /* TODO: Is this really needed? */
}

View File

@ -221,7 +221,7 @@ namespace Tasking
void Task::WaitForProcess(PCB *pcb)
{
if (!pcb)
if (InvalidPCB(pcb))
return;
if (pcb->Status == TaskStatus::UnknownStatus)
return;
@ -232,7 +232,7 @@ namespace Tasking
void Task::WaitForThread(TCB *tcb)
{
if (!tcb)
if (InvalidTCB(tcb))
return;
if (tcb->Status == TaskStatus::UnknownStatus)
return;
@ -243,7 +243,7 @@ namespace Tasking
void Task::WaitForProcessStatus(PCB *pcb, TaskStatus status)
{
if (!pcb)
if (InvalidPCB(pcb))
return;
if (pcb->Status == TaskStatus::UnknownStatus)
return;
@ -254,7 +254,7 @@ namespace Tasking
void Task::WaitForThreadStatus(TCB *tcb, TaskStatus status)
{
if (!tcb)
if (InvalidTCB(tcb))
return;
if (tcb->Status == TaskStatus::UnknownStatus)
return;
@ -835,6 +835,7 @@ namespace Tasking
Task::~Task()
{
debug("Destructor called");
SmartCriticalSection(TaskingLock);
trace("Stopping tasking");
foreach (PCB *Process in ListProcess)

View File

@ -8,6 +8,7 @@
#include <symbols.hpp>
#include <vector.hpp>
#include <memory.hpp>
#include <atomic.hpp>
#include <ipc.hpp>
#include <debug.h>
#include <abi.h>
@ -228,6 +229,7 @@ namespace Tasking
Vector<PCB *> ListProcess;
PCB *IdleProcess = nullptr;
TCB *IdleThread = nullptr;
Atomic<uint64_t> SchedulerTicks = 0;
bool InvalidPCB(PCB *pcb);
bool InvalidTCB(TCB *tcb);
@ -260,6 +262,7 @@ namespace Tasking
bool StopScheduler = false;
public:
uint64_t GetSchedulerTicks() { return SchedulerTicks.Load(); }
Vector<PCB *> GetProcessList() { return ListProcess; }
Security *GetSecurityManager() { return &SecurityManager; }
void Panic() { StopScheduler = true; }