diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-13 08:27:07 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-13 08:27:07 +0200 |
| commit | 126cc73bb933cd1b550c8c5b97d8621717fb1e6b (patch) | |
| tree | f67922ba36b8a4847b0f1854f77da4466e64f7e6 /dev/kernel/KernelKit | |
| parent | 799327413742309ab5def75d310df28576aefc7e (diff) | |
| parent | f30470c40229806a33c914ebdd1dbdf037c9698d (diff) | |
Merge pull request #17 from amlel-el-mahrouss/dev
dev, scheduler, ahci, dev: Refactor scheduler, and fix minor mistakes.
Diffstat (limited to 'dev/kernel/KernelKit')
| -rw-r--r-- | dev/kernel/KernelKit/BinaryMutex.h | 8 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/Defines.h | 2 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/DeviceMgr.h | 5 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/IPEFDylibObject.h | 4 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/PEF.h | 6 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/ProcessScheduler.h | 61 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/UserProcessScheduler.inl | 2 |
7 files changed, 45 insertions, 43 deletions
diff --git a/dev/kernel/KernelKit/BinaryMutex.h b/dev/kernel/KernelKit/BinaryMutex.h index ec1e355d..675396fd 100644 --- a/dev/kernel/KernelKit/BinaryMutex.h +++ b/dev/kernel/KernelKit/BinaryMutex.h @@ -12,9 +12,9 @@ namespace Kernel { - class UserProcess; + class Process; - typedef UserProcess& UserProcessRef; + typedef Process& UserProcessRef; /// @brief Access control class, which locks a task until one is done. class BinaryMutex final @@ -31,8 +31,8 @@ namespace Kernel BOOL WaitForProcess(const Int16& sec) noexcept; public: - bool Lock(UserProcess& process); - bool LockOrWait(UserProcess& process, TimerInterface* timer); + bool Lock(Process& process); + bool LockOrWait(Process& process, TimerInterface* timer); public: NE_COPY_DEFAULT(BinaryMutex) diff --git a/dev/kernel/KernelKit/Defines.h b/dev/kernel/KernelKit/Defines.h index ca258f58..1356f340 100644 --- a/dev/kernel/KernelKit/Defines.h +++ b/dev/kernel/KernelKit/Defines.h @@ -13,4 +13,4 @@ class UserProcessScheduler; class IDylibObject; -class UserProcess; +class Process; diff --git a/dev/kernel/KernelKit/DeviceMgr.h b/dev/kernel/KernelKit/DeviceMgr.h index 64949162..fcafa7a5 100644 --- a/dev/kernel/KernelKit/DeviceMgr.h +++ b/dev/kernel/KernelKit/DeviceMgr.h @@ -52,13 +52,13 @@ namespace Kernel IDeviceObject(const IDeviceObject<T>&) = default; public: - virtual IDeviceObject<T>& operator<<(T Data) [[maybe_unused]] + virtual IDeviceObject<T>& operator<<(T Data) { fOut(this, Data); return *this; } - virtual IDeviceObject<T>& operator>>(T Data) [[maybe_unused]] + virtual IDeviceObject<T>& operator>>(T Data) { fIn(this, Data); return *this; @@ -133,6 +133,7 @@ namespace Kernel kDeviceTypeSCSI, kDeviceTypeAHCI, kDeviceTypeMBCI, + kDeviceTypeATA, kDeviceTypeUSB, kDeviceTypeMediaCtrl, // MM controller kDeviceTypeCount, diff --git a/dev/kernel/KernelKit/IPEFDylibObject.h b/dev/kernel/KernelKit/IPEFDylibObject.h index 4769f0f9..f1edc1d5 100644 --- a/dev/kernel/KernelKit/IPEFDylibObject.h +++ b/dev/kernel/KernelKit/IPEFDylibObject.h @@ -99,8 +99,8 @@ namespace Kernel typedef IPEFDylibObject* IDylibRef; - EXTERN_C IDylibRef rtl_init_dylib(UserProcess& header); - EXTERN_C Void rtl_fini_dylib(UserProcess& header, IDylibRef lib, Bool* successful); + EXTERN_C IDylibRef rtl_init_dylib(Process& header); + EXTERN_C Void rtl_fini_dylib(Process& header, IDylibRef lib, Bool* successful); } // namespace Kernel #endif /* ifndef __KERNELKIT_SHARED_OBJECT_H__ */ diff --git a/dev/kernel/KernelKit/PEF.h b/dev/kernel/KernelKit/PEF.h index 41abe3fd..1cfbfa54 100644 --- a/dev/kernel/KernelKit/PEF.h +++ b/dev/kernel/KernelKit/PEF.h @@ -21,10 +21,10 @@ #define kPefMagic "Joy!" #define kPefMagicFat "yoJ!" -#define kPefMagicLen 5 +#define kPefMagicLen (5) -#define kPefVersion 3 -#define kPefNameLen 256U +#define kPefVersion (3) +#define kPefNameLen (256U) /* not mandatory, only for non fork based filesystems. */ #define kPefExt ".exec" diff --git a/dev/kernel/KernelKit/ProcessScheduler.h b/dev/kernel/KernelKit/ProcessScheduler.h index 631bac6e..db6f9aed 100644 --- a/dev/kernel/KernelKit/ProcessScheduler.h +++ b/dev/kernel/KernelKit/ProcessScheduler.h @@ -7,6 +7,7 @@ #ifndef INC_PROCESS_SCHEDULER_H #define INC_PROCESS_SCHEDULER_H +/// @file ProcessScheduler.h /// @brief Process scheduler code and definitions. /// @author Amlal El Mahrouss (amlal@nekernel.org) @@ -16,7 +17,7 @@ #include <NewKit/MutableArray.h> #define kSchedMinMicroTime (AffinityKind::kStandard) -#define kSchedInvalidPID ((PID)~0) +#define kSchedInvalidPID (-1) #define kSchedProcessLimitPerTeam (32U) #define kSchedMaxMemoryLimit gib_cast(128) /* max physical memory limit */ @@ -33,8 +34,8 @@ namespace Kernel //! @brief Forward declarations. class IDylibObject; - class UserProcess; - class UserProcessTeam; + class Process; + class ProcessTeam; class UserProcessScheduler; class UserProcessHelper; @@ -141,9 +142,9 @@ namespace Kernel /***********************************************************************************/ using ImagePtr = VoidPtr; - struct UserProcessImage final + struct ProcessImage final { - explicit UserProcessImage() = default; + explicit ProcessImage() = default; ImagePtr fCode; ImagePtr fBlob; @@ -160,17 +161,17 @@ namespace Kernel }; /***********************************************************************************/ - /// @name UserProcess - /// @brief User process class, holds information about the running process/thread. + /// @name Process + /// @brief Process class, holds information about the running process/thread. /***********************************************************************************/ - class UserProcess final + class Process final { public: - explicit UserProcess(); - ~UserProcess(); + explicit Process(); + ~Process(); public: - NE_COPY_DEFAULT(UserProcess) + NE_COPY_DEFAULT(Process) public: Char Name[kSchedNameLen] = {"Process"}; @@ -180,7 +181,7 @@ namespace Kernel AffinityKind Affinity{AffinityKind::kStandard}; ProcessStatusKind Status{ProcessStatusKind::kFinished}; UInt8* StackReserve{nullptr}; - UserProcessImage Image{}; + ProcessImage Image{}; SizeT StackSize{kSchedMaxStackSz}; IDylibObject* DylibDelegate{nullptr}; SizeT MemoryCursor{0UL}; @@ -197,16 +198,16 @@ namespace Kernel struct ProcessMemoryHeapList* MemoryNext{nullptr}; }; - struct UserProcessSignal final + struct ProcessSignal final { UIntPtr SignalArg; ProcessStatusKind PreviousStatus; UIntPtr SignalID; }; - UserProcessSignal ProcessSignal; + ProcessSignal ProcessSignal; ProcessMemoryHeapList* ProcessMemoryHeap{nullptr}; - UserProcessTeam* ProcessParentTeam; + ProcessTeam* ProcessParentTeam; VoidPtr VMRegister{0UL}; @@ -292,28 +293,28 @@ namespace Kernel /// \brief Processs Team (contains multiple processes inside it.) /// Equivalent to a process batch - class UserProcessTeam final + class ProcessTeam final { public: - explicit UserProcessTeam(); - ~UserProcessTeam() = default; + explicit ProcessTeam(); + ~ProcessTeam() = default; - NE_COPY_DEFAULT(UserProcessTeam) + NE_COPY_DEFAULT(ProcessTeam) - Array<UserProcess, kSchedProcessLimitPerTeam>& AsArray(); - Ref<UserProcess>& AsRef(); + Array<Process, kSchedProcessLimitPerTeam>& AsArray(); + Ref<Process>& AsRef(); ProcessID& Id() noexcept; public: - Array<UserProcess, kSchedProcessLimitPerTeam> mProcessList; - Ref<UserProcess> mCurrentProcess; + Array<Process, kSchedProcessLimitPerTeam> mProcessList; + Ref<Process> mCurrentProcess; ProcessID mTeamId{0}; ProcessID mProcessCount{0}; }; - typedef Array<UserProcess, kSchedProcessLimitPerTeam> UserThreadArray; + typedef Array<Process, kSchedProcessLimitPerTeam> UserThreadArray; - using UserProcessRef = UserProcess&; + using UserProcessRef = Process&; /***********************************************************************************/ /// @brief Process scheduler class. @@ -333,7 +334,7 @@ namespace Kernel bool operator!(); public: - UserProcessTeam& CurrentTeam(); + ProcessTeam& CurrentTeam(); public: ProcessID Spawn(const Char* name, VoidPtr code, VoidPtr image); @@ -344,19 +345,19 @@ namespace Kernel Bool HasMP() override; public: - Ref<UserProcess>& CurrentProcess(); + Ref<Process>& CurrentProcess(); SizeT Run() noexcept; public: STATIC UserProcessScheduler& The(); private: - UserProcessTeam mTeam{}; + ProcessTeam mTeam{}; }; /***********************************************************************************/ /** - * \brief UserProcess helper class, which contains needed utilities for the scheduler. + * \brief Process helper class, which contains needed utilities for the scheduler. */ /***********************************************************************************/ @@ -364,7 +365,7 @@ namespace Kernel { public: STATIC Bool Switch(VoidPtr image_ptr, UInt8* stack_ptr, HAL::StackFramePtr frame_ptr, PID new_pid); - STATIC Bool CanBeScheduled(const UserProcess& process); + STATIC Bool CanBeScheduled(const Process& process); STATIC ErrorOr<PID> TheCurrentPID(); STATIC SizeT StartScheduling(); }; diff --git a/dev/kernel/KernelKit/UserProcessScheduler.inl b/dev/kernel/KernelKit/UserProcessScheduler.inl index 39e2aaf0..d89d9aa1 100644 --- a/dev/kernel/KernelKit/UserProcessScheduler.inl +++ b/dev/kernel/KernelKit/UserProcessScheduler.inl @@ -17,7 +17,7 @@ namespace Kernel /***********************************************************************************/ template <typename T> - Boolean UserProcess::Delete(ErrorOr<T*> ptr) + Boolean Process::Delete(ErrorOr<T*> ptr) { if (!ptr) return No; |
