summaryrefslogtreecommitdiffhomepage
path: root/Kernel/KernelKit
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/KernelKit')
-rw-r--r--Kernel/KernelKit/LockDelegate.hpp9
-rw-r--r--Kernel/KernelKit/PEFSharedObject.hxx30
-rw-r--r--Kernel/KernelKit/ProcessScheduler.hxx48
-rw-r--r--Kernel/KernelKit/Semaphore.hpp8
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);