summaryrefslogtreecommitdiffhomepage
path: root/Kernel/KernelKit
diff options
context:
space:
mode:
authorAmlal <amlalelmahrouss@icloud.com>2024-06-19 07:59:04 +0000
committerAmlal <amlalelmahrouss@icloud.com>2024-06-19 07:59:04 +0000
commitb820eb6a5a7948597d81998137b05ddc0eb0dbad (patch)
treedb4eaea0b6863076c4f1476f361e2317823a663a /Kernel/KernelKit
parent36ff25861676cd1f5fb94b901fa59b015c614bc5 (diff)
parent6735570c44516661260546dadb81f0f5c238d1db (diff)
Merged in MHR-31 (pull request #16)
MHR-31: Round robin scheduler.
Diffstat (limited to 'Kernel/KernelKit')
-rw-r--r--Kernel/KernelKit/DriveManager.hxx6
-rw-r--r--Kernel/KernelKit/FileManager.hpp2
-rw-r--r--Kernel/KernelKit/Framebuffer.hpp2
-rw-r--r--Kernel/KernelKit/KernelHeap.hpp8
-rw-r--r--Kernel/KernelKit/PEF.hpp1
-rw-r--r--Kernel/KernelKit/ProcessScheduler.hxx41
-rw-r--r--Kernel/KernelKit/SMPManager.hpp10
-rw-r--r--Kernel/KernelKit/ThreadLocalStorage.hxx34
-rw-r--r--Kernel/KernelKit/ThreadLocalStorage.inl8
-rw-r--r--Kernel/KernelKit/XCOFF.hxx11
10 files changed, 56 insertions, 67 deletions
diff --git a/Kernel/KernelKit/DriveManager.hxx b/Kernel/KernelKit/DriveManager.hxx
index e78c350e..df7d5f28 100644
--- a/Kernel/KernelKit/DriveManager.hxx
+++ b/Kernel/KernelKit/DriveManager.hxx
@@ -14,10 +14,10 @@
#include <NewKit/Defines.hpp>
#include <NewKit/String.hpp>
-#define kDriveManagerCount (4U)
+#define kDriveManagerCount (4U)
-#define kDriveInvalidID (-1)
-#define kDriveNameLen (32)
+#define kDriveInvalidID (-1)
+#define kDriveNameLen (32)
namespace NewOS
{
diff --git a/Kernel/KernelKit/FileManager.hpp b/Kernel/KernelKit/FileManager.hpp
index 71f3cfd0..b06b926e 100644
--- a/Kernel/KernelKit/FileManager.hpp
+++ b/Kernel/KernelKit/FileManager.hpp
@@ -134,7 +134,7 @@ namespace NewOS
void SetDataFork(const char* forkName);
/// @brief Get internal parser.
- /// @return
+ /// @return
NewFSParser* GetParser() noexcept;
private:
diff --git a/Kernel/KernelKit/Framebuffer.hpp b/Kernel/KernelKit/Framebuffer.hpp
index 3437fed1..ebe983c8 100644
--- a/Kernel/KernelKit/Framebuffer.hpp
+++ b/Kernel/KernelKit/Framebuffer.hpp
@@ -39,7 +39,7 @@ namespace NewOS
: fFrameBufferAddr(addr)
{
}
-
+
~Framebuffer()
{
}
diff --git a/Kernel/KernelKit/KernelHeap.hpp b/Kernel/KernelKit/KernelHeap.hpp
index 7b8cbc7c..6be94a63 100644
--- a/Kernel/KernelKit/KernelHeap.hpp
+++ b/Kernel/KernelKit/KernelHeap.hpp
@@ -37,8 +37,8 @@ namespace NewOS
/// @return if it valid: point has crc now., otherwise fail.
Boolean ke_protect_ke_heap(VoidPtr heapPtr);
- /// @brief Makes a kernel heap page.
- /// @param heapPtr
- /// @return
- Int32 ke_make_ke_page(VoidPtr heapPtr);
+ /// @brief Makes a kernel heap page.
+ /// @param heapPtr
+ /// @return
+ Int32 ke_make_ke_page(VoidPtr heapPtr);
} // namespace NewOS
diff --git a/Kernel/KernelKit/PEF.hpp b/Kernel/KernelKit/PEF.hpp
index 0713e7c5..005c7673 100644
--- a/Kernel/KernelKit/PEF.hpp
+++ b/Kernel/KernelKit/PEF.hpp
@@ -36,6 +36,7 @@ namespace NewOS
kPefArch64x0, /* 64x0. ISA */
kPefArch32x0, /* 32x0. ISA */
kPefArchPowerPC,
+ kPefArchARM64,
kPefArchCount = (kPefArchPowerPC - kPefArchIntel86S) + 1,
kPefArchInvalid = 0xFF,
};
diff --git a/Kernel/KernelKit/ProcessScheduler.hxx b/Kernel/KernelKit/ProcessScheduler.hxx
index c6e090e4..8c470bb4 100644
--- a/Kernel/KernelKit/ProcessScheduler.hxx
+++ b/Kernel/KernelKit/ProcessScheduler.hxx
@@ -4,8 +4,8 @@
------------------------------------------- */
-#ifndef __PROCESS_SCHEDULER__
-#define __PROCESS_SCHEDULER__
+#ifndef _INC_PROCESS_SCHEDULER_HXX_
+#define _INC_PROCESS_SCHEDULER_HXX_
#include <ArchKit/ArchKit.hpp>
#include <KernelKit/FileManager.hpp>
@@ -17,7 +17,7 @@
#define kSchedMinMicroTime (AffinityKind::kHartStandard)
#define kSchedInvalidPID (-1)
-#define kSchedProcessLimitPerTeam (100U)
+#define kSchedProcessLimitPerTeam (16U)
////////////////////////////////////////////////////
@@ -134,7 +134,6 @@ namespace NewOS
explicit ProcessHeader(VoidPtr startImage = nullptr)
: Image(startImage)
{
- MUST_PASS(startImage);
}
~ProcessHeader() = default;
@@ -145,7 +144,7 @@ namespace NewOS
void SetEntrypoint(UIntPtr& imageStart) noexcept;
public:
- Char Name[kProcessLen] = {"NewOS Process"};
+ Char Name[kProcessLen] = {"Process"};
ProcessSubsystem SubSystem{ProcessSubsystem::eProcessSubsystemInvalid};
ProcessSelector Selector{ProcessSelector::kRingUser};
HAL::StackFramePtr StackFrame{nullptr};
@@ -163,21 +162,13 @@ namespace NewOS
enum
{
- kAppKind = 1,
- kShLibKind = 2,
- kDriverKind = 3,
+ kAppKind = 1,
+ kShLibKind = 2,
kKindCount,
};
- enum
- {
- kRingUserKind = 3,
- kRingDriverKind = 0,
- };
-
ProcessTime PTime;
PID ProcessId{kSchedInvalidPID};
- Int32 Ring{kRingDriverKind};
Int32 Kind{kAppKind};
public:
@@ -240,7 +231,6 @@ namespace NewOS
/// The main class which you call to schedule an app.
class ProcessScheduler final
{
- private:
explicit ProcessScheduler() = default;
public:
@@ -248,15 +238,8 @@ namespace NewOS
NEWOS_COPY_DEFAULT(ProcessScheduler)
- operator bool()
- {
- return mTeam.AsArray().Count() > 0;
- }
-
- bool operator!()
- {
- return mTeam.AsArray().Count() == 0;
- }
+ operator bool();
+ bool operator!();
public:
ProcessTeam& CurrentTeam();
@@ -266,7 +249,7 @@ namespace NewOS
bool Remove(SizeT headerIndex);
public:
- Ref<ProcessHeader>& GetCurrent();
+ Ref<ProcessHeader>& TheCurrent();
SizeT Run() noexcept;
public:
@@ -285,8 +268,8 @@ namespace NewOS
public:
static bool Switch(HAL::StackFrame* newStack, const PID& newPid);
static bool CanBeScheduled(Ref<ProcessHeader>& process);
- static PID& GetCurrentPID();
- static bool StartScheduling();
+ static PID& TheCurrentPID();
+ static SizeT StartScheduling();
};
const Int32& rt_get_exit_code() noexcept;
@@ -300,4 +283,4 @@ namespace NewOS
////////////////////////////////////////////////////
-#endif /* ifndef __PROCESS_SCHEDULER__ */
+#endif /* ifndef _INC_PROCESS_SCHEDULER_HXX_ */
diff --git a/Kernel/KernelKit/SMPManager.hpp b/Kernel/KernelKit/SMPManager.hpp
index 985050f1..1840dd20 100644
--- a/Kernel/KernelKit/SMPManager.hpp
+++ b/Kernel/KernelKit/SMPManager.hpp
@@ -94,13 +94,13 @@ namespace NewOS
NEWOS_COPY_DEFAULT(SMPManager);
public:
- bool Switch(HAL::StackFrame* the);
- HAL::StackFramePtr GetStackFrame() noexcept;
+ bool Switch(HAL::StackFramePtr the);
+ HAL::StackFramePtr Leak() noexcept;
public:
- Ref<HardwareThread> operator[](const SizeT& idx);
- bool operator!() noexcept;
- operator bool() noexcept;
+ Ref<HardwareThread*> operator[](const SizeT& idx);
+ bool operator!() noexcept;
+ operator bool() noexcept;
public:
/// @brief Shared instance of the SMP Manager.
diff --git a/Kernel/KernelKit/ThreadLocalStorage.hxx b/Kernel/KernelKit/ThreadLocalStorage.hxx
index eaae7991..75d29ced 100644
--- a/Kernel/KernelKit/ThreadLocalStorage.hxx
+++ b/Kernel/KernelKit/ThreadLocalStorage.hxx
@@ -15,19 +15,10 @@
#define kCookieMag1 'C'
#define kCookieMag2 'R'
-template <typename T>
-T* tls_new_ptr(void);
-
-template <typename T>
-bool tls_delete_ptr(T* ptr);
-
-template <typename T, typename... Args>
-T* tls_new_class(Args&&... args);
-
-#define kTLSCookieLen 3
+#define kTLSCookieLen (3U)
/// @brief Thread Information Block for Local Storage.
-/// Located in GS on AMD64, Virtual Address 0x10000 (64x0, 32x0, ARM64)
+/// Located in GS on AMD64, other architectures have their own stuff. (64x0, 32x0, ARM64)
struct PACKED ThreadInformationBlock final
{
NewOS::Char Cookie[kTLSCookieLen];
@@ -37,14 +28,27 @@ struct PACKED ThreadInformationBlock final
NewOS::Int32 ThreadID; // Thread execution ID.
};
-/// @brief TLS install TIB and PIB.
-EXTERN_C void rt_install_tib(ThreadInformationBlock* TIB, NewOS::VoidPtr PIB);
+typedef struct ThreadInformationBlock ProcessInformationBlock;
///! @brief Cookie Sanity check.
NewOS::Boolean tls_check_tib(ThreadInformationBlock* Ptr);
-/// @brief TLS check system call
-EXTERN_C NewOS::Void tls_check_syscall_impl(NewOS::HAL::StackFramePtr StackPtr) noexcept;
+///! @brief new ptr syscall.
+template <typename T>
+T* tls_new_ptr(void);
+
+///! @brief delete ptr syscall.
+template <typename T>
+bool tls_delete_ptr(T* ptr);
+
+template <typename T, typename... Args>
+T* tls_new_class(Args&&... args);
+
+/// @brief TLS install TIB and PIB. (syscall)
+EXTERN_C void rt_install_tib(ThreadInformationBlock* TIB, ThreadInformationBlock* PIB);
+
+/// @brief TLS check (syscall)
+EXTERN_C NewOS::Void tls_check_syscall_impl(NewOS::VoidPtr TIB) noexcept;
#include <KernelKit/ThreadLocalStorage.inl>
diff --git a/Kernel/KernelKit/ThreadLocalStorage.inl b/Kernel/KernelKit/ThreadLocalStorage.inl
index 1df825a3..6dbff3a1 100644
--- a/Kernel/KernelKit/ThreadLocalStorage.inl
+++ b/Kernel/KernelKit/ThreadLocalStorage.inl
@@ -15,9 +15,9 @@ inline T* tls_new_ptr(void)
{
using namespace NewOS;
- MUST_PASS(ProcessScheduler::The().Leak().GetCurrent());
+ MUST_PASS(ProcessScheduler::The().Leak().TheCurrent());
- auto ref_process = ProcessScheduler::The().Leak().GetCurrent();
+ auto ref_process = ProcessScheduler::The().Leak().TheCurrent();
T* pointer = (T*)ref_process.Leak().New(sizeof(T));
return pointer;
@@ -32,9 +32,9 @@ inline bool tls_delete_ptr(T* ptr)
using namespace NewOS;
- MUST_PASS(ProcessScheduler::The().Leak().GetCurrent());
+ MUST_PASS(ProcessScheduler::The().Leak().TheCurrent());
- auto ref_process = ProcessScheduler::The().Leak().GetCurrent();
+ auto ref_process = ProcessScheduler::The().Leak().TheCurrent();
return ref_process.Leak().Delete(ptr, sizeof(T));
}
diff --git a/Kernel/KernelKit/XCOFF.hxx b/Kernel/KernelKit/XCOFF.hxx
index 4574fcf7..0d74b3ef 100644
--- a/Kernel/KernelKit/XCOFF.hxx
+++ b/Kernel/KernelKit/XCOFF.hxx
@@ -16,7 +16,7 @@
#include <NewKit/Defines.hpp>
-#define cXCOFF64Magic (0x01F7)
+#define cXCOFF64Magic (0x01F7)
#define cXCOFFRelFlg (0x0001)
#define cXCOFFExecutable (0x0002)
@@ -41,10 +41,11 @@ typedef struct XCoffFileHeader
#define cForkNameLen (255)
/// @brief This the executable manifest fork.
-typedef struct XCoffForkHeader {
- NewOS::Char fPropertiesXMLFork[cForkNameLen];
- NewOS::Char fDynamicLoaderFork[cForkNameLen];
- NewOS::Char fCodeSignFork[cForkNameLen];
+typedef struct XCoffForkHeader
+{
+ NewOS::Char fPropertiesXMLFork[cForkNameLen];
+ NewOS::Char fDynamicLoaderFork[cForkNameLen];
+ NewOS::Char fCodeSignFork[cForkNameLen];
} XCoffForkHeader;
#endif // ifndef __XCOFF__