SimpleKernel 1.17.0
Loading...
Searching...
No Matches
scheduler_base.hpp
Go to the documentation of this file.
1
5#pragma once
6
7#include <cstddef>
8#include <cstdint>
9
11
19 public:
21 const char* name{"Unnamed Scheduler"};
22
26 struct Stats {
28 size_t total_enqueues{0};
30 size_t total_dequeues{0};
32 size_t total_picks{0};
35 };
36
41 virtual auto Enqueue(TaskControlBlock* task) -> void = 0;
42
47 virtual auto Dequeue(TaskControlBlock* task) -> void = 0;
48
53 [[nodiscard]] virtual auto PickNext() -> TaskControlBlock* = 0;
54
59 [[nodiscard]] virtual auto GetQueueSize() const -> size_t = 0;
60
65 [[nodiscard]] virtual auto IsEmpty() const -> bool = 0;
66
74 [[nodiscard]] virtual auto OnTick([[maybe_unused]] TaskControlBlock* current)
75 -> bool {
76 return false;
77 }
78
88 [[nodiscard]] virtual auto OnTimeSliceExpired(
89 [[maybe_unused]] TaskControlBlock* task) -> bool {
90 return true;
91 }
92
101 virtual auto BoostPriority([[maybe_unused]] TaskControlBlock* task,
102 [[maybe_unused]] int new_priority) -> void {}
103
109 virtual auto RestorePriority([[maybe_unused]] TaskControlBlock* task)
110 -> void {}
111
119 virtual auto OnPreempted([[maybe_unused]] TaskControlBlock* task) -> void {}
120
126 virtual auto OnScheduled([[maybe_unused]] TaskControlBlock* task) -> void {}
127
132 [[nodiscard]] virtual auto GetStats() const -> const Stats& { return stats_; }
133
137 virtual auto ResetStats() -> void { stats_ = {}; }
138
141 SchedulerBase() = default;
142 SchedulerBase(const SchedulerBase&) = default;
144 auto operator=(const SchedulerBase&) -> SchedulerBase& = default;
145 auto operator=(SchedulerBase&&) -> SchedulerBase& = default;
146 virtual ~SchedulerBase() = default;
148
149 protected:
151};
调度器基类接口
virtual auto OnTick(TaskControlBlock *current) -> bool
Tick 更新:每个时钟中断时调用,用于更新调度器状态
virtual auto PickNext() -> TaskControlBlock *=0
选择下一个要运行的任务 (不会从队列中移除)
virtual auto BoostPriority(TaskControlBlock *task, int new_priority) -> void
优先级提升:当任务持有资源时被更高优先级任务等待,提升其优先级
auto operator=(const SchedulerBase &) -> SchedulerBase &=default
virtual ~SchedulerBase()=default
virtual auto OnPreempted(TaskControlBlock *task) -> void
任务被抢占时调用 (从 Running 变为 Ready)
virtual auto Enqueue(TaskControlBlock *task) -> void=0
将任务加入就绪队列
auto operator=(SchedulerBase &&) -> SchedulerBase &=default
virtual auto GetQueueSize() const -> size_t=0
获取就绪队列中的任务数量 (用于负载均衡)
virtual auto RestorePriority(TaskControlBlock *task) -> void
优先级恢复:当任务释放资源后,恢复其原始优先级
virtual auto IsEmpty() const -> bool=0
判断队列是否为空
virtual auto Dequeue(TaskControlBlock *task) -> void=0
从就绪队列移除指定任务 (用于任务阻塞/退出)
virtual auto GetStats() const -> const Stats &
获取调度器统计信息
SchedulerBase()=default
SchedulerBase(SchedulerBase &&)=default
const char * name
调度器名称
virtual auto OnScheduled(TaskControlBlock *task) -> void
任务开始运行时调用 (从 Ready 变为 Running)
virtual auto ResetStats() -> void
重置统计信息
virtual auto OnTimeSliceExpired(TaskControlBlock *task) -> bool
时间片耗尽处理:当任务时间片用完时调用
SchedulerBase(const SchedulerBase &)=default
调度器统计信息
size_t total_dequeues
总出队次数
size_t total_preemptions
总抢占次数
size_t total_picks
总选择次数
size_t total_enqueues
总入队次数
任务控制块,管理进程/线程的核心数据结构