diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-12-27 12:10:40 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-12-27 12:10:40 +0100 |
| commit | 97d65565f4ab1814ea76aafc66e2bae848071a7c (patch) | |
| tree | e007378f4c0f23ee8e6cd9acfec022c1020e75d5 /dev | |
| parent | 205605bd8eabe7cdb5ee4cb1b974d613705337a2 (diff) | |
Kernel: Fixes and improvements to scheduler.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/Kernel/KernelKit/UserProcessScheduler.h | 6 | ||||
| -rw-r--r-- | dev/Kernel/KernelKit/UserProcessScheduler.inl | 2 | ||||
| -rw-r--r-- | dev/Kernel/src/User.cc | 11 | ||||
| -rw-r--r-- | dev/Kernel/src/UserProcessScheduler.cc | 12 |
4 files changed, 25 insertions, 6 deletions
diff --git a/dev/Kernel/KernelKit/UserProcessScheduler.h b/dev/Kernel/KernelKit/UserProcessScheduler.h index cb1fc5a0..983a1d81 100644 --- a/dev/Kernel/KernelKit/UserProcessScheduler.h +++ b/dev/Kernel/KernelKit/UserProcessScheduler.h @@ -7,6 +7,7 @@ #ifndef INC_PROCESS_SCHEDULER_H #define INC_PROCESS_SCHEDULER_H +#include "NewKit/Defines.h" #include <ArchKit/ArchKit.h> #include <KernelKit/LockDelegate.h> #include <KernelKit/User.h> @@ -30,8 +31,8 @@ namespace Kernel { //! @note Forward class declarations. - class UserProcess; class IDLLObject; + class UserProcess; class UserProcessTeam; class UserProcessScheduler; class UserProcessHelper; @@ -164,8 +165,9 @@ namespace Kernel UserProcessImage Image; SizeT StackSize{kSchedMaxStackSz}; IDLLObject* DylibDelegate{nullptr}; - SizeT MemoryCursor{0}; + SizeT MemoryCursor{0UL}; SizeT MemoryLimit{kSchedMaxMemoryLimit}; + SizeT UsedMemory{0UL}; struct ProcessMemoryHeapList final { diff --git a/dev/Kernel/KernelKit/UserProcessScheduler.inl b/dev/Kernel/KernelKit/UserProcessScheduler.inl index 595ba71e..86150a06 100644 --- a/dev/Kernel/KernelKit/UserProcessScheduler.inl +++ b/dev/Kernel/KernelKit/UserProcessScheduler.inl @@ -17,6 +17,8 @@ namespace Kernel { if (entry->MemoryEntry == ptr.Leak().Leak()) { + this->UsedMemory -= entry->MemoryEntrySize; + #ifdef __ZKA_AMD64__ auto pd = hal_read_cr3(); hal_write_cr3(this->VMRegister); diff --git a/dev/Kernel/src/User.cc b/dev/Kernel/src/User.cc index 8d1bcac9..88d14b2f 100644 --- a/dev/Kernel/src/User.cc +++ b/dev/Kernel/src/User.cc @@ -27,9 +27,11 @@ namespace Kernel { namespace Detail { + //////////////////////////////////////////////////////////// /// \brief Constructs a password by hashing the password. /// \param password password to hash. /// \return the hashed password + //////////////////////////////////////////////////////////// const Int32 cred_construct_token(Char* password, const Char* in_password, User* user, SizeT length) { if (!password || !user) @@ -53,7 +55,9 @@ namespace Kernel } } // namespace Detail + //////////////////////////////////////////////////////////// /// @brief User ring constructor. + //////////////////////////////////////////////////////////// User::User(const Int32& sel, const Char* userName) : mUserRing((UserRingKind)sel) { @@ -61,14 +65,18 @@ namespace Kernel rt_copy_memory((VoidPtr)userName, this->mUserName, rt_string_len(userName)); } + //////////////////////////////////////////////////////////// /// @brief User ring constructor. + //////////////////////////////////////////////////////////// User::User(const UserRingKind& ringKind, const Char* userName) : mUserRing(ringKind) { rt_copy_memory((VoidPtr)userName, this->mUserName, rt_string_len(userName)); } + //////////////////////////////////////////////////////////// /// @brief User destructor class. + //////////////////////////////////////////////////////////// User::~User() = default; Bool User::Save(const usr_public_key_kind password_to_fill) noexcept @@ -159,8 +167,11 @@ namespace Kernel return this->mUserName; } + //////////////////////////////////////////////////////////// /// @brief Returns the user's ring. /// @return The king of ring the user is attached to. + //////////////////////////////////////////////////////////// + const UserRingKind& User::Ring() noexcept { return this->mUserRing; diff --git a/dev/Kernel/src/UserProcessScheduler.cc b/dev/Kernel/src/UserProcessScheduler.cc index 3904c222..941ca46e 100644 --- a/dev/Kernel/src/UserProcessScheduler.cc +++ b/dev/Kernel/src/UserProcessScheduler.cc @@ -128,12 +128,10 @@ namespace Kernel this->ProcessMemoryHeap->MemoryPrev = nullptr; this->ProcessMemoryHeap->MemoryNext = nullptr; - - return ErrorOr<VoidPtr>(ptr); } else { - ProcessMemoryHeapList* entry = this->ProcessMemoryHeap; + ProcessMemoryHeapList* entry = this->ProcessMemoryHeap; ProcessMemoryHeapList* prev_entry = nullptr; while (!entry) @@ -152,7 +150,9 @@ namespace Kernel entry->MemoryNext->MemoryNext = nullptr; } - return ErrorOr<VoidPtr>(nullptr); + this->UsedMemory += sz; + + return ErrorOr<VoidPtr>(ptr); } /***********************************************************************************/ @@ -566,13 +566,17 @@ namespace Kernel return false; } + //////////////////////////////////////////////////////////// /// @brief this checks if any process is on the team. + //////////////////////////////////////////////////////////// UserProcessScheduler::operator bool() { return mTeam.AsArray().Count() > 0; } + //////////////////////////////////////////////////////////// /// @brief this checks if no process is on the team. + //////////////////////////////////////////////////////////// bool UserProcessScheduler::operator!() { return mTeam.AsArray().Count() == 0; |
