diff options
Diffstat (limited to 'Kernel/KernelKit')
| -rw-r--r-- | Kernel/KernelKit/LockDelegate.hpp | 9 | ||||
| -rw-r--r-- | Kernel/KernelKit/PEFSharedObject.hxx | 30 | ||||
| -rw-r--r-- | Kernel/KernelKit/ProcessScheduler.hxx | 48 | ||||
| -rw-r--r-- | Kernel/KernelKit/Semaphore.hpp | 8 |
4 files changed, 48 insertions, 47 deletions
diff --git a/Kernel/KernelKit/LockDelegate.hpp b/Kernel/KernelKit/LockDelegate.hpp index 24eab70a..36a68054 100644 --- a/Kernel/KernelKit/LockDelegate.hpp +++ b/Kernel/KernelKit/LockDelegate.hpp @@ -9,11 +9,14 @@ #include <NewKit/Atom.hpp> #include <NewKit/Defines.hpp> -#define kLockDone (200U) /* job is done */ -#define kLockTimedOut (100U) /* job has timed out */ - namespace Kernel { + enum + { + kLockDone = 200, + kLockTimedOut, + }; + /// @brief Lock condition pointer. typedef Boolean* LockPtr; diff --git a/Kernel/KernelKit/PEFSharedObject.hxx b/Kernel/KernelKit/PEFSharedObject.hxx index d490c567..7b85937c 100644 --- a/Kernel/KernelKit/PEFSharedObject.hxx +++ b/Kernel/KernelKit/PEFSharedObject.hxx @@ -24,38 +24,40 @@ namespace Kernel * @brief Shared Library class * Load library from this class */ - class SharedObject final + class PEFSharedObjectInterface final { public: - struct SharedObjectTrait final + struct PEF_SHARED_OBJECT_TRAITS final { - VoidPtr fImageObject; - VoidPtr fImageEntrypointOffset; + VoidPtr fImageObject{nullptr}; + VoidPtr fImageEntrypointOffset{nullptr}; + + Bool IsValid() { return fImageObject && fImageEntrypointOffset; } }; public: - explicit SharedObject() = default; - ~SharedObject() = default; + explicit PEFSharedObjectInterface() = default; + ~PEFSharedObjectInterface() = default; public: - NEWOS_COPY_DEFAULT(SharedObject); + NEWOS_COPY_DEFAULT(PEFSharedObjectInterface); private: - SharedObjectTrait* fMounted{nullptr}; + PEF_SHARED_OBJECT_TRAITS* fMounted{nullptr}; public: - SharedObjectTrait** GetAddressOf() + PEF_SHARED_OBJECT_TRAITS** GetAddressOf() { return &fMounted; } - SharedObjectTrait* Get() + PEF_SHARED_OBJECT_TRAITS* Get() { return fMounted; } public: - void Mount(SharedObjectTrait* to_mount) + void Mount(PEF_SHARED_OBJECT_TRAITS* to_mount) { if (!to_mount || !to_mount->fImageObject) return; @@ -106,10 +108,10 @@ namespace Kernel PEFLoader* fLoader{nullptr}; }; - typedef SharedObject* SharedObjectPtr; + typedef PEFSharedObjectInterface* SharedObjectPtr; - EXTERN_C SharedObjectPtr rtl_init_shared_object(ProcessHeader* header); - EXTERN_C Void rtl_fini_shared_object(ProcessHeader* header, SharedObjectPtr lib, Bool* successful); + EXTERN_C SharedObjectPtr rtl_init_shared_object(PROCESS_HEADER_BLOCK* header); + EXTERN_C Void rtl_fini_shared_object(PROCESS_HEADER_BLOCK* header, SharedObjectPtr lib, Bool* successful); } // namespace Kernel #endif /* ifndef __KERNELKIT_SHARED_OBJECT_HXX__ */ diff --git a/Kernel/KernelKit/ProcessScheduler.hxx b/Kernel/KernelKit/ProcessScheduler.hxx index b174858a..c15c5f76 100644 --- a/Kernel/KernelKit/ProcessScheduler.hxx +++ b/Kernel/KernelKit/ProcessScheduler.hxx @@ -26,9 +26,12 @@ namespace Kernel { - class ProcessHeader; + //! @brief Forward declarations. + struct PROCESS_HEADER_BLOCK; class ProcessTeam; class ProcessScheduler; + class ProcessHelper; + class PEFSharedObjectInterface; //! @brief Process identifier. typedef Int64 ProcessID; @@ -36,11 +39,6 @@ namespace Kernel //! @brief Process name length. inline constexpr SizeT kProcessLen = 256U; - //! @brief Forward declarations. - class ProcessHeader; - class ProcessScheduler; - class ProcessHelper; - class SharedObject; //! @brief Process status enum. enum class ProcessStatus : Int32 @@ -124,21 +122,19 @@ namespace Kernel using ImagePtr = VoidPtr; using HeapPtrKind = VoidPtr; - // @name ProcessHeader - // @brief Process Header (PH) - // Holds information about the running process. - // Thread execution is being abstracted away. - class ProcessHeader final + /// @name PROCESS_HEADER_BLOCK + /// @brief Process Header (PHB). Holds information about the running process. Thread execution the THREAD_INFORMATION_BLOCK. + struct PROCESS_HEADER_BLOCK final { public: - explicit ProcessHeader(VoidPtr startImage = nullptr) + explicit PROCESS_HEADER_BLOCK(VoidPtr startImage = nullptr) : Image(startImage) { } - ~ProcessHeader() = default; + ~PROCESS_HEADER_BLOCK() = default; - NEWOS_COPY_DEFAULT(ProcessHeader) + NEWOS_COPY_DEFAULT(PROCESS_HEADER_BLOCK) public: void SetEntrypoint(UIntPtr& imageStart) noexcept; @@ -158,7 +154,7 @@ namespace Kernel HeapPtrKind HeapPtr{nullptr}; // shared library handle, reserved for .lib only. - SharedObject* SharedLibObjectPtr{nullptr}; + PEFSharedObjectInterface* SharedObjectPEF{nullptr}; // Memory usage. SizeT UsedMemory{0}; @@ -167,7 +163,7 @@ namespace Kernel enum { kAppKind = 1, - kShLibKind = 2, + kSharedObjectKind = 2, kKindCount, }; @@ -200,7 +196,7 @@ namespace Kernel ///! @brief Wakes up threads. Void Wake(const bool wakeup = false); - // ProcessHeader getters. + // PROCESS_HEADER_BLOCK getters. public: ///! @brief Get the process's name ///! @example 'C Runtime Library' @@ -232,19 +228,19 @@ namespace Kernel NEWOS_COPY_DEFAULT(ProcessTeam); - MutableArray<Ref<ProcessHeader>>& AsArray(); - Ref<ProcessHeader>& AsRef(); + MutableArray<Ref<PROCESS_HEADER_BLOCK>>& AsArray(); + Ref<PROCESS_HEADER_BLOCK>& AsRef(); UInt64& Id() noexcept; public: - MutableArray<Ref<ProcessHeader>> mProcessList; - Ref<ProcessHeader> mCurrentProcess; + MutableArray<Ref<PROCESS_HEADER_BLOCK>> mProcessList; + Ref<PROCESS_HEADER_BLOCK> mCurrentProcess; UInt64 mTeamId{0}; }; - using ProcessHeaderRef = ProcessHeader*; + using ProcessHeaderRef = PROCESS_HEADER_BLOCK*; - /// @brief ProcessHeader manager class. + /// @brief PROCESS_HEADER_BLOCK manager class. /// The main class which you call to schedule an app. class ProcessScheduler final { @@ -262,11 +258,11 @@ namespace Kernel ProcessTeam& CurrentTeam(); public: - SizeT Add(Ref<ProcessHeader>& processRef); + SizeT Add(Ref<PROCESS_HEADER_BLOCK>& processRef); Bool Remove(SizeT processSlot); public: - Ref<ProcessHeader>& TheCurrent(); + Ref<PROCESS_HEADER_BLOCK>& TheCurrent(); SizeT Run() noexcept; public: @@ -284,7 +280,7 @@ namespace Kernel { public: STATIC bool Switch(HAL::StackFrame* newStack, const PID& newPid); - STATIC bool CanBeScheduled(Ref<ProcessHeader>& process); + STATIC bool CanBeScheduled(Ref<PROCESS_HEADER_BLOCK>& process); STATIC PID& TheCurrentPID(); STATIC SizeT StartScheduling(); }; diff --git a/Kernel/KernelKit/Semaphore.hpp b/Kernel/KernelKit/Semaphore.hpp index 29223b6f..1f67dbc6 100644 --- a/Kernel/KernelKit/Semaphore.hpp +++ b/Kernel/KernelKit/Semaphore.hpp @@ -12,9 +12,9 @@ namespace Kernel { - class ProcessHeader; + class PROCESS_HEADER_BLOCK; - typedef ProcessHeader* ProcessHeaderRef; + typedef PROCESS_HEADER_BLOCK* ProcessHeaderRef; /// @brief Access control class, which locks a task until one is done. class Semaphore final @@ -31,8 +31,8 @@ namespace Kernel void WaitForProcess() noexcept; public: - bool Lock(ProcessHeader* process); - bool LockOrWait(ProcessHeader* process, HardwareTimerInterface* timer); + bool Lock(PROCESS_HEADER_BLOCK* process); + bool LockOrWait(PROCESS_HEADER_BLOCK* process, HardwareTimerInterface* timer); public: NEWOS_COPY_DEFAULT(Semaphore); |
