summaryrefslogtreecommitdiffhomepage
path: root/Kernel/KernelKit
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/KernelKit')
-rw-r--r--Kernel/KernelKit/MP.hxx (renamed from Kernel/KernelKit/MPManager.hpp)29
-rw-r--r--Kernel/KernelKit/PE.hxx73
-rw-r--r--Kernel/KernelKit/User.hxx14
3 files changed, 63 insertions, 53 deletions
diff --git a/Kernel/KernelKit/MPManager.hpp b/Kernel/KernelKit/MP.hxx
index c54f0aaf..325e399c 100644
--- a/Kernel/KernelKit/MPManager.hpp
+++ b/Kernel/KernelKit/MP.hxx
@@ -12,13 +12,14 @@
#include <NewKit/Ref.hxx>
/// @note Last Rev Sun 28 Jul CET 2024
+/// @note Last Rev Thu, Aug 1, 2024 9:07:38 AM
-#define kMaxHarts 8
+#define cMaxHWThreads (8U)
namespace Kernel
{
class HardwareThread;
- class MPManager;
+ class MPCoreScheduler;
using ThreadID = UInt32;
@@ -38,7 +39,7 @@ namespace Kernel
///
/// \name HardwareThread
- /// @brief CPU Hardware Thread (POWER, x64, or 64x0)
+ /// \brief Abstraction over the CPU's core, used to run processes or threads.
///
class HardwareThread final
@@ -76,22 +77,22 @@ namespace Kernel
bool fBusy{false};
private:
- friend class MPManager;
+ friend class MPCoreScheduler;
};
///
- /// \name MPManager
- /// @brief Multi processor manager to manage other cores and dispatch tasks.
+ /// \name MPCoreScheduler
+ /// \brief Class to manage the thread scheduling.
///
- class MPManager final
+ class MPCoreScheduler final
{
private:
- explicit MPManager();
+ explicit MPCoreScheduler();
public:
- ~MPManager();
- NEWOS_COPY_DEFAULT(MPManager);
+ ~MPCoreScheduler();
+ NEWOS_COPY_DEFAULT(MPCoreScheduler);
public:
bool Switch(HAL::StackFramePtr the);
@@ -103,9 +104,9 @@ namespace Kernel
operator bool() noexcept;
public:
- /// @brief Shared instance of the SMP Manager.
- /// @return the reference to the smp manager.
- static Ref<MPManager> The();
+ /// @brief Shared instance of the MP Manager.
+ /// @return the reference to the mp manager class.
+ static Ref<MPCoreScheduler> The();
public:
/// @brief Returns the amount of threads present in the system.
@@ -113,7 +114,7 @@ namespace Kernel
SizeT Count() noexcept;
private:
- Array<HardwareThread, kMaxHarts> fThreadList;
+ Array<HardwareThread, cMaxHWThreads> fThreadList;
ThreadID fCurrentThread{0};
};
diff --git a/Kernel/KernelKit/PE.hxx b/Kernel/KernelKit/PE.hxx
index debd6aba..0788cd2d 100644
--- a/Kernel/KernelKit/PE.hxx
+++ b/Kernel/KernelKit/PE.hxx
@@ -26,7 +26,6 @@
typedef struct ExecHeader final
{
- Kernel::UInt32 mMagic; // PE\0\0 or 0x00004550
Kernel::UInt16 mMachine;
Kernel::UInt16 mNumberOfSections;
Kernel::UInt32 mTimeDateStamp;
@@ -38,40 +37,41 @@ typedef struct ExecHeader final
typedef struct ExecOptionalHeader final
{
- Kernel::UInt16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit)
- Kernel::UChar mMajorLinkerVersion;
- Kernel::UChar mMinorLinkerVersion;
- Kernel::UIntPtr mSizeOfCode;
- Kernel::UIntPtr mSizeOfInitializedData;
- Kernel::UIntPtr mSizeOfUninitializedData;
- Kernel::UInt32 mAddressOfEntryPoint;
- Kernel::UInt32 mBaseOfCode;
- Kernel::UIntPtr mImageBase;
- Kernel::UInt32 mSectionAlignment;
- Kernel::UInt32 mFileAlignment;
- Kernel::UInt16 mMajorOperatingSystemVersion;
- Kernel::UInt16 mMinorOperatingSystemVersion;
- Kernel::UInt16 mMajorImageVersion;
- Kernel::UInt16 mMinorImageVersion;
- Kernel::UInt16 mMajorSubsystemVersion;
- Kernel::UInt16 mMinorSubsystemVersion;
- Kernel::UInt32 mWin32VersionValue;
- Kernel::UIntPtr mSizeOfImage;
- Kernel::UIntPtr mSizeOfHeaders;
- Kernel::UInt32 mCheckSum;
- Kernel::UInt16 mSubsystem;
- Kernel::UInt16 mDllCharacteristics;
- Kernel::UIntPtr mSizeOfStackReserve;
- Kernel::UIntPtr mSizeOfStackCommit;
- Kernel::UIntPtr mSizeOfHeapReserve;
- Kernel::UIntPtr mSizeOfHeapCommit;
- Kernel::UInt32 mLoaderFlags;
- Kernel::UInt32 mNumberOfRvaAndSizes;
+ Kernel::UInt16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit)
+ Kernel::UInt8 mMajorLinkerVersion;
+ Kernel::UInt8 mMinorLinkerVersion;
+ Kernel::UInt32 mSizeOfCode;
+ Kernel::UInt32 mSizeOfInitializedData;
+ Kernel::UInt32 mSizeOfUninitializedData;
+ Kernel::UInt32 mAddressOfEntryPoint;
+ Kernel::UInt32 mBaseOfCode;
+ Kernel::UInt32 mBaseOfData;
+ Kernel::UInt32 mImageBase;
+ Kernel::UInt32 mSectionAlignment;
+ Kernel::UInt32 mFileAlignment;
+ Kernel::UInt16 mMajorOperatingSystemVersion;
+ Kernel::UInt16 mMinorOperatingSystemVersion;
+ Kernel::UInt16 mMajorImageVersion;
+ Kernel::UInt16 mMinorImageVersion;
+ Kernel::UInt16 mMajorSubsystemVersion;
+ Kernel::UInt16 mMinorSubsystemVersion;
+ Kernel::UInt32 mWin32VersionValue;
+ Kernel::UInt32 mSizeOfImage;
+ Kernel::UInt32 mSizeOfHeaders;
+ Kernel::UInt32 mCheckSum;
+ Kernel::UInt16 mSubsystem;
+ Kernel::UInt16 mDllCharacteristics;
+ Kernel::UInt32 mSizeOfStackReserve;
+ Kernel::UInt32 mSizeOfStackCommit;
+ Kernel::UInt32 mSizeOfHeapReserve;
+ Kernel::UInt32 mSizeOfHeapCommit;
+ Kernel::UInt32 mLoaderFlags;
+ Kernel::UInt32 mNumberOfRvaAndSizes;
} PACKED ExecOptionalHeader, *ExecOptionalHeaderPtr;
typedef struct ExecSectionHeader final
{
- Kernel::UChar mName[8];
+ Kernel::Char mName[8];
Kernel::UInt32 mVirtualSize;
Kernel::UInt32 mVirtualAddress;
Kernel::UInt32 mSizeOfRawData;
@@ -118,6 +118,15 @@ typedef struct ExecImportDirectory
Kernel::UInt32 mThunkTableRva;
} PACKED ExecImportDirectory, *ExecImportDirectoryPtr;
-#define kPeStart "__ImageStart"
+typedef struct ExecDataDirectory {
+ Kernel::UInt32 VirtualAddress;
+ Kernel::UInt32 Size;
+} ExecDataDirectory, *ExecDataDirectoryPtr;
+
+typedef struct ExecImageHeader {
+ Kernel::UInt32 mSignature;
+ ExecHeader mHeader;
+ ExecOptionalHeader mOptHdr;
+} ExecImageHeader, *ExecImageHeaderPtr;
#endif /* ifndef __KERNELKIT_INC_PE_HXX__ */
diff --git a/Kernel/KernelKit/User.hxx b/Kernel/KernelKit/User.hxx
index 64bb44a7..3f78047c 100644
--- a/Kernel/KernelKit/User.hxx
+++ b/Kernel/KernelKit/User.hxx
@@ -27,7 +27,7 @@
namespace Kernel
{
class User;
- class UserView;
+ class UserManager;
enum class RingKind
{
@@ -72,13 +72,13 @@ namespace Kernel
StringView fUserName;
VoidPtr fUserToken{nullptr};
- friend UserView;
+ friend UserManager;
};
- class UserView final
+ class UserManager final
{
- UserView() = default;
- ~UserView() = default;
+ UserManager() = default;
+ ~UserManager() = default;
User* fCurrentUser = nullptr;
User* fLastLoggedOffUser = nullptr;
@@ -87,9 +87,9 @@ namespace Kernel
User* fRootUser = nullptr;
public:
- NEWOS_COPY_DELETE(UserView);
+ NEWOS_COPY_DELETE(UserManager);
- STATIC UserView* The() noexcept;
+ STATIC UserManager* The() noexcept;
Bool LogIn(User* user, const Char* password) noexcept;
User* Current() noexcept;
Void LogOff() noexcept;