diff options
| author | Amlal <amlal@nekernel.org> | 2025-05-01 12:07:58 +0200 |
|---|---|---|
| committer | Amlal <amlal@nekernel.org> | 2025-05-01 12:07:58 +0200 |
| commit | dc6c85c9344732a12f5e8f74e4cfc374b8bd391f (patch) | |
| tree | 7a9f3b2a272111dce29c28a5922b968311d086c8 /dev | |
| parent | f3345dfebdc9b1668611e80f30cb5bac69db4a49 (diff) | |
kernel: scheduler and pef code mgr improvements.
Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalKernelMain.cc | 2 | ||||
| -rw-r--r-- | dev/kernel/src/PEFCodeMgr.cc | 7 | ||||
| -rw-r--r-- | dev/kernel/src/UserProcessScheduler.cc | 18 |
3 files changed, 22 insertions, 5 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalKernelMain.cc b/dev/kernel/HALKit/AMD64/HalKernelMain.cc index 29244add..5de1b8e4 100644 --- a/dev/kernel/HALKit/AMD64/HalKernelMain.cc +++ b/dev/kernel/HALKit/AMD64/HalKernelMain.cc @@ -144,6 +144,8 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept { team_index = 0U; } + kTeams[team_index].Id() = team_index; + while (!UserProcessScheduler::The().SwitchTeam(kTeams[team_index])); timer.Wait(); diff --git a/dev/kernel/src/PEFCodeMgr.cc b/dev/kernel/src/PEFCodeMgr.cc index 632d5baa..40a0cff9 100644 --- a/dev/kernel/src/PEFCodeMgr.cc +++ b/dev/kernel/src/PEFCodeMgr.cc @@ -12,6 +12,7 @@ #include <NewKit/KString.h> #include <NewKit/KernelPanic.h> #include <NewKit/OwnPtr.h> +#include "KernelKit/UserProcessScheduler.h" /// @brief PEF stack size symbol. #define kPefStackSizeSymbol "__PEFSizeOfReserveStack" @@ -242,7 +243,11 @@ namespace Utils { auto stacksym = exec.FindSymbol(kPefStackSizeSymbol, kPefData); if (!symname) { - stacksym = ErrorOr<VoidPtr>{(VoidPtr) new UIntPtr(mib_cast(16))}; + stacksym = ErrorOr<VoidPtr>{(VoidPtr) new UIntPtr(kSchedMaxStackSz)}; + } + + if ((*(volatile UIntPtr*)stacksym.Leak().Leak()) > kSchedMaxStackSz) { + *(volatile UIntPtr*)stacksym.Leak().Leak() = kSchedMaxStackSz; } UserProcessScheduler::The().CurrentTeam().AsArray()[id].Kind = process_kind; diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc index 23ab22fa..5012e8a3 100644 --- a/dev/kernel/src/UserProcessScheduler.cc +++ b/dev/kernel/src/UserProcessScheduler.cc @@ -486,20 +486,30 @@ Bool UserProcessScheduler::HasMP() { /***********************************************************************************/ SizeT UserProcessScheduler::Run() noexcept { - SizeT process_index = 0UL; //! we store this guy to tell the scheduler how many - //! things we have scheduled. - if (mTeam.mProcessCount < 1) { return 0UL; } + if (kCurrentlySwitching) + return 0UL; + kCurrentlySwitching = Yes; + SizeT process_index = 0UL; //! we store this guy to tell the scheduler how many + //! things we have scheduled. + for (; process_index < mTeam.AsArray().Capacity(); ++process_index) { auto& process = mTeam.AsArray()[process_index]; - //! check if the process needs to be run. + //! Check if the process needs to be run. if (UserProcessHelper::CanBeScheduled(process)) { + + if (process.StackSize > kSchedMaxStackSz) { + kout << "The process: " << process.Name << ", has not a valid stack size! Crashing it...\r"; + process.Crash(); + continue; + } + // Set current process header. this->CurrentProcess() = process; |
