7#ifndef INC_PROCESS_SCHEDULER_H
8#define INC_PROCESS_SCHEDULER_H
40 auto DoVet()
const {
return *
this; }
91 explicit operator bool();
121 template <
typename T>
199 explicit operator bool();
Core Process Scheduler header file.
#define kSchedInvalidPID
Definition CoreProcessScheduler.h:17
#define kSchedNameLen
Definition CoreProcessScheduler.h:24
#define kSchedMaxStackSz
Definition CoreProcessScheduler.h:22
#define kSchedMaxMemoryLimit
Definition CoreProcessScheduler.h:21
#define NE_COPY_DELETE(KLASS)
Definition Detail.h:13
#define NE_MOVE_DELETE(KLASS)
Definition Detail.h:21
#define NE_COPY_DEFAULT(KLASS)
Definition Detail.h:17
ErrorOr class for error handling.
Definition ErrorOr.h:22
Dylib class object. A handle to a shared library.
Definition IDylibObject.h:21
Definition UserProcessScheduler.h:35
PROCESS_FILE_TREE< VoidPtr > * FileTree
Definition UserProcessScheduler.h:67
ProcessTime PTime
Definition UserProcessScheduler.h:80
KPCError LastExitCode
Definition UserProcessScheduler.h:154
IDylibObject * DylibDelegate
Definition UserProcessScheduler.h:55
AffinityKind Affinity
Definition UserProcessScheduler.h:50
ProcessID ProcessId
brief Process used time.
Definition UserProcessScheduler.h:84
ErrorOr< VoidPtr > New(SizeT sz, SizeT pad_amount=0)
TLS allocate.
ProcessImage Image
Definition UserProcessScheduler.h:53
HAL::StackFramePtr StackFrame
Definition UserProcessScheduler.h:49
KPCError & GetLocalCode()
return local error code of process.
PROCESS_HEAP_TREE< VoidPtr > * HeapTree
Definition UserProcessScheduler.h:68
ProcessSubsystem SubSystem
Definition UserProcessScheduler.h:47
USER_PROCESS_SIGNAL Signal
Definition UserProcessScheduler.h:66
friend UserProcessScheduler
Definition UserProcessScheduler.h:157
User * Owner
Definition UserProcessScheduler.h:48
SizeT StackSize
Definition UserProcessScheduler.h:54
@ kExecutableKind
Definition UserProcessScheduler.h:75
@ kExecutableKindCount
Definition UserProcessScheduler.h:77
@ kExecutableDylibKind
Definition UserProcessScheduler.h:76
@ kInvalidExecutableKind
Definition UserProcessScheduler.h:74
UserProcessTeam * ParentTeam
Definition UserProcessScheduler.h:69
KPCError LocalCode
Definition UserProcessScheduler.h:155
Int32 Kind
Definition UserProcessScheduler.h:85
ProcessTime RTime
Process allocated tine.
Definition UserProcessScheduler.h:81
Void Exit(const Int32 &exit_code=0)
!
Char Name[kSchedNameLen]
Definition UserProcessScheduler.h:46
KPCError & GetExitCode()
Gets the local exit code.
SizeT UsedMemory
Definition UserProcessScheduler.h:58
ProcessStatusKind Status
Definition UserProcessScheduler.h:51
auto DoVet() const
Definition UserProcessScheduler.h:40
Void Wake(Bool wakeup=false)
!
SizeT MemoryLimit
Definition UserProcessScheduler.h:57
SizeT MemoryCursor
Definition UserProcessScheduler.h:56
VoidPtr VMRegister
Definition UserProcessScheduler.h:71
ProcessTime UTime
Process run time.
Definition UserProcessScheduler.h:82
const AffinityKind & GetAffinity()
Boolean Delete(ErrorOr< T * > ptr)
TLS free.
const ProcessStatusKind & GetStatus()
UInt8 StackReserve[kSchedMaxStackSz]
Definition UserProcessScheduler.h:52
friend UserProcessHelper
Definition UserProcessScheduler.h:158
Reference wrapper class. /// =========================================================== ///.
Definition Ref.h:22
System User class.
Definition UserMgr.h:49
USER_PROCESS helper class, which contains needed utilities for the scheduler.
Definition UserProcessScheduler.h:231
STATIC Bool CanBeScheduled(const USER_PROCESS &process)
Check if process can be schedulded.
Definition UserProcessScheduler.cc:583
STATIC ErrorOr< ProcessID > TheCurrentPID()
Current proccess id getter.
Definition UserProcessScheduler.cc:571
STATIC Bool Switch(HAL::StackFramePtr frame_ptr, ProcessID new_pid)
Does a context switch in a CPU.
Definition UserProcessScheduler.cc:613
STATIC SizeT StartScheduling()
Start scheduling the current team.
Definition UserProcessScheduler.cc:601
USER_PROCESS scheduler class. The main class which you call to schedule user processes.
Definition UserProcessScheduler.h:188
Bool IsUser() override
Is it a user scheduler?
Definition UserProcessScheduler.cc:473
STATIC UserProcessScheduler & The()
Retrieves the singleton of the process scheduler.
Definition UserProcessScheduler.cc:450
UserProcessTeam mTeam
Definition UserProcessScheduler.h:222
Bool HasMP() override
Is it a SMP scheduler?
Definition UserProcessScheduler.cc:485
USER_PROCESS_REF & TheCurrentProcess()
Gets current running process.
Definition UserProcessScheduler.cc:565
UserProcessScheduler()=default
bool operator!()
this checks if no process is on the team.
Definition UserProcessScheduler.cc:680
Bool IsKernel() override
Is it a kernel scheduler?
Definition UserProcessScheduler.cc:479
~UserProcessScheduler() override=default
Void Remove(ProcessID process_id)
Remove process from the team.
Definition UserProcessScheduler.cc:464
BOOL SwitchTeam(UserProcessTeam &team)
Switches the current team.
Definition UserProcessScheduler.cc:555
ProcessID Spawn(const Char *name, VoidPtr code, VoidPtr image)
Add process to team.
Definition UserProcessScheduler.cc:359
friend class UserProcessHelper
Definition UserProcessScheduler.h:189
SizeT Run()
Run User scheduler object.
Definition UserProcessScheduler.cc:495
UserProcessTeam & TheCurrentTeam()
Gets the current scheduled team.
Definition UserProcessScheduler.cc:544
Processs Team (contains multiple processes inside it.) Equivalent to a process batch.
Definition UserProcessScheduler.h:166
USER_PROCESS_ARRAY mProcessList
Definition UserProcessScheduler.h:178
Ref< USER_PROCESS > & AsRef()
Get current process getter as Ref.
Definition UserProcessTeam.cc:52
ProcessID mProcessCur
Definition UserProcessScheduler.h:181
Array< USER_PROCESS, kSchedProcessLimitPerTeam > & AsArray()
Process list array getter.
Definition UserProcessTeam.cc:34
ProcessID & Id()
Get team ID.
Definition UserProcessTeam.cc:43
~UserProcessTeam()=default
USER_PROCESS_REF mCurrentProcess
Definition UserProcessScheduler.h:179
ProcessID mTeamId
Definition UserProcessScheduler.h:180
UserProcessTeam()
Definition UserProcessTeam.cc:16
StackFrame * StackFramePtr
Definition Processor.h:34
UPS inline definitions.
Definition Device.h:12
char Char
Definition Config.h:51
void Void
Definition Config.h:87
Array< USER_PROCESS, kSchedProcessLimitPerTeam > USER_PROCESS_ARRAY
Definition UserProcessScheduler.h:161
Int64 ProcessID
Local Process Identifier type.
Definition CoreProcessScheduler.h:219
ProcessSubsystem
Subsystem enum type.
Definition CoreProcessScheduler.h:145
@ kProcessSubsystemUser
Definition CoreProcessScheduler.h:147
__SIZE_TYPE__ SizeT
Definition Config.h:60
PTime ProcessTime
Definition CoreProcessScheduler.h:214
__UINT8_TYPE__ UInt8
Definition Config.h:55
void * VoidPtr
Definition Config.h:33
ProcessStatusKind
Local Process status enum.
Definition CoreProcessScheduler.h:158
@ kKilled
Definition CoreProcessScheduler.h:162
__INT32_TYPE__ Int32
Definition Config.h:38
AffinityKind
Affinity is the amount of nano-seconds this process is going to run.
Definition CoreProcessScheduler.h:171
@ kStandard
Definition CoreProcessScheduler.h:176
Int32 KPCError
Definition KPC.h:28
bool Boolean
Definition Config.h:49
__UINTPTR_TYPE__ UIntPtr
Definition Config.h:62
Ref< USER_PROCESS > USER_PROCESS_REF
Definition UserProcessScheduler.h:162
bool Bool
Definition Config.h:50
Definition UserProcessScheduler.h:60
UIntPtr SignalArg
Definition UserProcessScheduler.h:61
ProcessStatusKind Status
Definition UserProcessScheduler.h:62
UIntPtr SignalID
Definition UserProcessScheduler.h:63
Definition CoreProcessScheduler.h:79
Definition CoreProcessScheduler.h:52
Helper class to contain a process's image and blob.
Definition CoreProcessScheduler.h:239