summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-12-27 12:10:40 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-12-27 12:10:40 +0100
commit97d65565f4ab1814ea76aafc66e2bae848071a7c (patch)
treee007378f4c0f23ee8e6cd9acfec022c1020e75d5
parent205605bd8eabe7cdb5ee4cb1b974d613705337a2 (diff)
Kernel: Fixes and improvements to scheduler.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
-rw-r--r--dev/Kernel/KernelKit/UserProcessScheduler.h6
-rw-r--r--dev/Kernel/KernelKit/UserProcessScheduler.inl2
-rw-r--r--dev/Kernel/src/User.cc11
-rw-r--r--dev/Kernel/src/UserProcessScheduler.cc12
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;