summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/src
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-05-15 23:50:06 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-05-15 23:50:59 +0200
commitb55f22d6a4f85751e0054dbf17eefe438a21b048 (patch)
treedeca3167de5d4cc146ebbfb97b8007a22575c3cc /dev/kernel/src
parent2e7e91648ac419086686910e4b8b124041e14edf (diff)
feat(kernel/sched): fixes and improvements on the scheduler's
implementation. why? - The previous one wasn't entierly correct on some parts. Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/src')
-rw-r--r--dev/kernel/src/HardwareThreadScheduler.cc2
-rw-r--r--dev/kernel/src/UserProcessScheduler.cc18
2 files changed, 13 insertions, 7 deletions
diff --git a/dev/kernel/src/HardwareThreadScheduler.cc b/dev/kernel/src/HardwareThreadScheduler.cc
index 1df5ad7a..6cb83b3d 100644
--- a/dev/kernel/src/HardwareThreadScheduler.cc
+++ b/dev/kernel/src/HardwareThreadScheduler.cc
@@ -105,6 +105,8 @@ Void HardwareThread::Wake(const bool wakeup) noexcept {
/// @retval false stack is invalid, previous code is running.
/***********************************************************************************/
Bool HardwareThread::Switch(HAL::StackFramePtr frame, const ThreadID& pid) {
+ if (this->IsBusy()) return NO;
+
this->fStack = frame;
this->fPID = pid;
diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc
index 24869d63..fe1a95ae 100644
--- a/dev/kernel/src/UserProcessScheduler.cc
+++ b/dev/kernel/src/UserProcessScheduler.cc
@@ -491,7 +491,7 @@ SizeT UserProcessScheduler::Run() noexcept {
continue;
}
- kout << process.Name << " is being scheduled to run...\r";
+ kout << ((*process.Name) ? process.Name : "USER_PROCESS") << " will be scheduled...\r";
this->CurrentProcess() = process;
@@ -499,17 +499,21 @@ SizeT UserProcessScheduler::Run() noexcept {
if (process.PTime < process.RTime) {
if (process.RTime < (Int32) AffinityKind::kVeryHigh)
- process.PTime = (Int32) AffinityKind::kLowUsage;
+ process.RTime = (Int32) AffinityKind::kLowUsage;
else if (process.RTime < (Int32) AffinityKind::kHigh)
- process.PTime = (Int32) AffinityKind::kStandard;
+ process.RTime = (Int32) AffinityKind::kStandard;
else if (process.RTime < (Int32) AffinityKind::kStandard)
- process.PTime = (Int32) AffinityKind::kHigh;
+ process.RTime = (Int32) AffinityKind::kHigh;
+
+ process.PTime += process.RTime;
process.RTime = 0UL;
- } else {
- ++process.RTime;
+ }
+
+ if (!UserProcessHelper::Switch(process.StackFrame, process.ProcessId)) {
+ continue;
}
} else {
- kout << process.Name << " won't be scheduled to run...\r";
+ ++process.RTime;
--process.PTime;
}
}