diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-24 15:52:36 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-24 15:52:36 +0200 |
| commit | 7faa5e2fcf41c4fbb2241b605e8f2a11738fc4d9 (patch) | |
| tree | 4395820c8cab023c8e794e44e93eabefc26ac9b6 /dev/kernel/HALKit/AMD64/HalKernelMain.cc | |
| parent | de88c44c68f3941e003ddaf13042875370f10978 (diff) | |
dev, kernel: scheduler, timer: hw timer and scheduler improvements.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/HALKit/AMD64/HalKernelMain.cc')
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalKernelMain.cc | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalKernelMain.cc b/dev/kernel/HALKit/AMD64/HalKernelMain.cc index d59e9e86..0c680f97 100644 --- a/dev/kernel/HALKit/AMD64/HalKernelMain.cc +++ b/dev/kernel/HALKit/AMD64/HalKernelMain.cc @@ -19,8 +19,6 @@ EXTERN_C Kernel::VoidPtr kInterruptVectorTable[]; -STATIC Kernel::Array<UserProcessTeam, kSchedTeamCount> kTeams; - STATIC Kernel::Void hal_pre_init_scheduler() noexcept { for (Kernel::SizeT i = 0U; i < Kernel::UserProcessScheduler::The().CurrentTeam().AsArray().Count(); ++i) @@ -98,11 +96,13 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept idt_loader.Load(idt_reg); - /// after the scheduler runs, we must look over teams, every 200ms in order to schedule every process according to their affinity fairly. + /// after the scheduler runs, we must look over teams, every 5000s in order to schedule every process according to their affinity fairly. + + auto constexpr kSchedTeamSwitchMS = 5U; /// @brief Team switch time in milliseconds. - auto constexpr kSchedTeamSwitchMS = 200U; /// @brief Team switch time in milliseconds. + Kernel::HardwareTimer timer(rtl_milliseconds(kSchedTeamSwitchMS)); - Kernel::HardwareTimer timer(rtl_ms(kSchedTeamSwitchMS)); + STATIC Kernel::Array<UserProcessTeam, kSchedTeamCount> kTeams; SizeT team_index = 0U; @@ -110,15 +110,16 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept /// @details Not even round-robin, just a simple loop in this boot core we're at. while (YES) { - timer.Wait(); - - UserProcessScheduler::The().SwitchTeam(kTeams[team_index]); - - ++team_index; - - if (team_index > kSchedTeamCount) + if (team_index > (kSchedTeamCount - 1)) { team_index = 0U; } + + while (!UserProcessScheduler::The().SwitchTeam(kTeams[team_index])) + ; + + timer.Wait(); + + ++team_index; } } |
