summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/KernelKit/CoreProcessScheduler.h
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-04-23 22:27:47 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-04-23 22:27:47 +0200
commitb55d3ac738b40677c579221b4f0dbf294dc3b017 (patch)
tree2ce2089d58f1d5d1bfca642442e20c2b4ad8255c /dev/kernel/KernelKit/CoreProcessScheduler.h
parent46d60a746e86270e0f2a66f724e809fca32679c0 (diff)
dev, kernel: necessary refactors regarding future changes.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/KernelKit/CoreProcessScheduler.h')
-rw-r--r--dev/kernel/KernelKit/CoreProcessScheduler.h161
1 files changed, 161 insertions, 0 deletions
diff --git a/dev/kernel/KernelKit/CoreProcessScheduler.h b/dev/kernel/KernelKit/CoreProcessScheduler.h
new file mode 100644
index 00000000..bd493140
--- /dev/null
+++ b/dev/kernel/KernelKit/CoreProcessScheduler.h
@@ -0,0 +1,161 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#pragma once
+
+#include <NewKit/Defines.h>
+#include <NewKit/ErrorOr.h>
+
+namespace Kernel
+{
+ class USER_PROCESS;
+ class KERNEL_PROCESS;
+ class UserProcessTeam;
+
+ /***********************************************************************************/
+ /// @brief Subsystem enum type.
+ /***********************************************************************************/
+
+ enum class ProcessSubsystem : Int32
+ {
+ kProcessSubsystemSecurity = 100,
+ kProcessSubsystemApplication,
+ kProcessSubsystemService,
+ kProcessSubsystemDriver,
+ kProcessSubsystemInvalid = 256U,
+ kProcessSubsystemCount = 4,
+ };
+
+ typedef UInt64 PTime;
+
+ /***********************************************************************************/
+ //! @brief Local Process identifier.
+ /***********************************************************************************/
+ typedef Int64 ProcessID;
+
+ /***********************************************************************************/
+ //! @brief Local Process status enum.
+ /***********************************************************************************/
+ enum class ProcessStatusKind : Int32
+ {
+ kInvalid,
+ kStarting,
+ kRunning,
+ kKilled,
+ kFrozen,
+ kFinished,
+ kCount,
+ };
+
+ /***********************************************************************************/
+ //! @brief Affinity is the amount of nano-seconds this process is going to run.
+ /***********************************************************************************/
+ enum class AffinityKind : Int32
+ {
+ kRealTime = 500,
+ kVeryHigh = 250,
+ kHigh = 200,
+ kStandard = 1000,
+ kLowUsage = 1500,
+ kVeryLowUsage = 2000,
+ };
+
+ /***********************************************************************************/
+ //! Operators for AffinityKind
+ /***********************************************************************************/
+
+ inline bool operator<(AffinityKind lhs, AffinityKind rhs)
+ {
+ Int32 lhs_int = static_cast<Int>(lhs);
+ Int32 rhs_int = static_cast<Int>(rhs);
+
+ return lhs_int < rhs_int;
+ }
+
+ inline bool operator>(AffinityKind lhs, AffinityKind rhs)
+ {
+ Int32 lhs_int = static_cast<Int>(lhs);
+ Int32 rhs_int = static_cast<Int>(rhs);
+
+ return lhs_int > rhs_int;
+ }
+
+ inline bool operator<=(AffinityKind lhs, AffinityKind rhs)
+ {
+ Int32 lhs_int = static_cast<Int>(lhs);
+ Int32 rhs_int = static_cast<Int>(rhs);
+
+ return lhs_int <= rhs_int;
+ }
+
+ inline bool operator>=(AffinityKind lhs, AffinityKind rhs)
+ {
+ Int32 lhs_int = static_cast<Int>(lhs);
+ Int32 rhs_int = static_cast<Int>(rhs);
+
+ return lhs_int >= rhs_int;
+ }
+
+ using ProcessTime = UInt64;
+ using PID = Int64;
+
+ /***********************************************************************************/
+ /// @note For User manager, tells where we run the code.
+ /***********************************************************************************/
+ enum class ProcessLevelRing : Int32
+ {
+ kRingStdUser = 1,
+ kRingSuperUser = 2,
+ kRingGuestUser = 5,
+ kRingCount = 5,
+ };
+
+ /***********************************************************************************/
+ /// @brief Helper type to describe a code image.
+ /***********************************************************************************/
+ using ImagePtr = VoidPtr;
+
+ /***********************************************************************************/
+ /// @brief Helper class to contain a process's image and blob.
+ /***********************************************************************************/
+ struct PROCESS_IMAGE final
+ {
+ explicit PROCESS_IMAGE() = default;
+
+ ImagePtr fCode;
+ ImagePtr fBlob;
+
+ Bool HasCode()
+ {
+ return this->fCode != nullptr;
+ }
+
+ Bool HasImage()
+ {
+ return this->fBlob != nullptr;
+ }
+
+ ErrorOr<ImagePtr> Leak()
+ {
+ if (this->fCode)
+ {
+ return ErrorOr<ImagePtr>{this->fCode};
+ }
+
+ return ErrorOr<ImagePtr>{kErrorInvalidData};
+ }
+
+ ErrorOr<ImagePtr> LeakBlob()
+ {
+ if (this->fBlob)
+ {
+ return ErrorOr<ImagePtr>{this->fBlob};
+ }
+
+ return ErrorOr<ImagePtr>{kErrorInvalidData};
+ }
+ };
+} // namespace Kernel