diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-10-24 12:05:40 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-10-24 12:05:40 +0200 |
| commit | 744e9aba579a51dcab8f78009cbc091ce3cd8503 (patch) | |
| tree | fd7d3d79f9a313f7311ae56f809aff1605e98297 /dev/kernel | |
| parent | e1b8ba28465ac52638d849fb4179eceb55e257ab (diff) | |
feat: scheduler: process scheduler improvements and wip subsystem.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel')
| -rw-r--r-- | dev/kernel/src/IPEFDylibObject.cc | 4 | ||||
| -rw-r--r-- | dev/kernel/src/KernelTaskScheduler.cc | 15 | ||||
| -rw-r--r-- | dev/kernel/src/UserProcessScheduler.cc | 10 |
3 files changed, 21 insertions, 8 deletions
diff --git a/dev/kernel/src/IPEFDylibObject.cc b/dev/kernel/src/IPEFDylibObject.cc index a24fba72..91f8c88a 100644 --- a/dev/kernel/src/IPEFDylibObject.cc +++ b/dev/kernel/src/IPEFDylibObject.cc @@ -90,6 +90,10 @@ EXTERN_C IDylibRef rtl_init_dylib_pef(USER_PROCESS& process) { EXTERN_C Void rtl_fini_dylib_pef(USER_PROCESS& process, IDylibRef dll_obj, BOOL* successful) { MUST_PASS(successful); + if (!successful) { + return; + } + // sanity check (will also trigger a bug check if this fails) if (dll_obj == nullptr) { *successful = false; diff --git a/dev/kernel/src/KernelTaskScheduler.cc b/dev/kernel/src/KernelTaskScheduler.cc index 1997c175..8bbe5601 100644 --- a/dev/kernel/src/KernelTaskScheduler.cc +++ b/dev/kernel/src/KernelTaskScheduler.cc @@ -15,4 +15,17 @@ /// @author Amlal El Mahrouss (amlal@nekernel.org) /***********************************************************************************/ -namespace Kernel {} // namespace Kernel
\ No newline at end of file +namespace Kernel { +EXTERN_C Void hal_switch_kernel_task(HAL::StackFramePtr frame, ProcessID kid); + +Bool KernelTaskHelper::Switch(HAL::StackFramePtr frame_ptr, ProcessID new_kid) { + NE_UNUSED(frame_ptr); + NE_UNUSED(new_kid); + + return NO; +} + +Bool KernelTaskHelper::CanBeScheduled(const KERNEL_TASK& task) { + return task.Kid > 0 && task.Image.HasCode(); +} +} // namespace Kernel
\ No newline at end of file diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc index 2306d3e4..ac25c3d8 100644 --- a/dev/kernel/src/UserProcessScheduler.cc +++ b/dev/kernel/src/UserProcessScheduler.cc @@ -581,17 +581,13 @@ ErrorOr<ProcessID> UserProcessHelper::TheCurrentPID() { /// @retval true can be schedulded. /// @retval false cannot be schedulded. Bool UserProcessHelper::CanBeScheduled(const USER_PROCESS& process) { + if (process.Affinity == AffinityKind::kRealTime) return Yes; + if (process.Status != ProcessStatusKind::kRunning) return No; if (process.Affinity == AffinityKind::kInvalid) return No; if (process.StackSize > kSchedMaxStackSz) return No; if (!process.Name[0]) return No; - - // real time processes shouldn't wait that much. - if (process.Affinity == AffinityKind::kRealTime) return Yes; - - if (process.Signal.SignalID == sig_generate_unique<SIGTRAP>()) { - return No; - } + if (process.Signal.SignalID == sig_generate_unique<SIGTRAP>()) return No; return process.PTime < 1; } |
