|
SimpleKernel 1.17.0
|
CFS (Completely Fair Scheduler) 调度器 More...
#include <cfs_scheduler.hpp>


Classes | |
| struct | VruntimeCompare |
| vruntime 比较器 (用于 multiset 红黑树) More... | |
Public Member Functions | |
| auto | Enqueue (TaskControlBlock *task) -> void override |
| 将任务加入就绪队列 | |
| auto | Dequeue (TaskControlBlock *task) -> void override |
| 从就绪队列中移除指定任务 | |
| auto | PickNext () -> TaskControlBlock *override |
| 选择下一个要运行的任务 | |
| auto | GetQueueSize () const -> size_t override |
| 获取就绪队列大小 | |
| auto | IsEmpty () const -> bool override |
| 判断队列是否为空 | |
| auto | OnTick (TaskControlBlock *current) -> bool override |
| 每个 tick 更新任务的 vruntime | |
| auto | OnPreempted (TaskControlBlock *task) -> void override |
| 任务被抢占时调用 | |
| auto | GetMinVruntime () const -> uint64_t |
| 获取当前 min_vruntime | |
构造/析构函数 | |
| CfsScheduler ()=default | |
| CfsScheduler (const CfsScheduler &)=delete | |
| CfsScheduler (CfsScheduler &&)=delete | |
| auto | operator= (const CfsScheduler &) -> CfsScheduler &=delete |
| auto | operator= (CfsScheduler &&) -> CfsScheduler &=delete |
| ~CfsScheduler () override=default | |
Public Member Functions inherited from SchedulerBase | |
| virtual auto | OnTimeSliceExpired (TaskControlBlock *task) -> bool |
| 时间片耗尽处理:当任务时间片用完时调用 | |
| virtual auto | BoostPriority (TaskControlBlock *task, int new_priority) -> void |
| 优先级提升:当任务持有资源时被更高优先级任务等待,提升其优先级 | |
| virtual auto | RestorePriority (TaskControlBlock *task) -> void |
| 优先级恢复:当任务释放资源后,恢复其原始优先级 | |
| virtual auto | OnScheduled (TaskControlBlock *task) -> void |
| 任务开始运行时调用 (从 Ready 变为 Running) | |
| virtual auto | GetStats () const -> const Stats & |
| 获取调度器统计信息 | |
| virtual auto | ResetStats () -> void |
| 重置统计信息 | |
| SchedulerBase ()=default | |
| SchedulerBase (const SchedulerBase &)=default | |
| SchedulerBase (SchedulerBase &&)=default | |
| auto | operator= (const SchedulerBase &) -> SchedulerBase &=default |
| auto | operator= (SchedulerBase &&) -> SchedulerBase &=default |
| virtual | ~SchedulerBase ()=default |
Static Public Attributes | |
| static constexpr uint32_t | kDefaultWeight = 1024 |
| 默认权重 (对应 nice 值为 0) | |
| static constexpr uint64_t | kMinGranularity = 10 |
| vruntime 粒度 (用于计算抢占阈值) | |
Private Attributes | |
| etl::multiset< TaskControlBlock *, kernel::config::kMaxReadyTasks, VruntimeCompare > | ready_queue_ |
| 就绪队列 (红黑树,按 vruntime 升序排序,begin() = 最小 vruntime) | |
| uint64_t | min_vruntime_ {0} |
| 当前最小 vruntime (用于新任务初始化) | |
Additional Inherited Members | |
Public Attributes inherited from SchedulerBase | |
| const char * | name {"Unnamed Scheduler"} |
| 调度器名称 | |
Protected Attributes inherited from SchedulerBase | |
| Stats | stats_ {} |
CFS (Completely Fair Scheduler) 调度器
基于虚拟运行时间 (vruntime) 的完全公平调度器。 每个任务根据其权重累积 vruntime,调度器总是选择 vruntime 最小的任务。
特点:
Definition at line 29 of file cfs_scheduler.hpp.
|
default |
|
delete |
|
delete |
|
overridedefault |
|
inlineoverridevirtual |
从就绪队列中移除指定任务
| task | 要移除的任务控制块指针 |
Implements SchedulerBase.
Definition at line 85 of file cfs_scheduler.hpp.

|
inlineoverridevirtual |
将任务加入就绪队列
| task | 任务控制块指针 |
新加入的任务的 vruntime 设置为当前 min_vruntime,防止饥饿。
Implements SchedulerBase.
Definition at line 58 of file cfs_scheduler.hpp.


|
inline |
获取当前 min_vruntime
Definition at line 187 of file cfs_scheduler.hpp.

|
inlineoverridevirtual |
获取就绪队列大小
Implements SchedulerBase.
Definition at line 126 of file cfs_scheduler.hpp.

|
inlineoverridevirtual |
判断队列是否为空
Implements SchedulerBase.
Definition at line 134 of file cfs_scheduler.hpp.

|
inlineoverridevirtual |
任务被抢占时调用
| task | 被抢占的任务 |
被抢占的任务需要重新入队,保持其 vruntime。
Reimplemented from SchedulerBase.
Definition at line 176 of file cfs_scheduler.hpp.

|
inlineoverridevirtual |
每个 tick 更新任务的 vruntime
| current | 当前运行的任务 |
CFS 核心逻辑:
Reimplemented from SchedulerBase.
Definition at line 147 of file cfs_scheduler.hpp.

|
delete |
|
delete |
|
inlineoverridevirtual |
选择下一个要运行的任务
选择 vruntime 最小的任务,实现完全公平调度。
Implements SchedulerBase.
Definition at line 103 of file cfs_scheduler.hpp.

|
staticconstexpr |
默认权重 (对应 nice 值为 0)
Definition at line 32 of file cfs_scheduler.hpp.
|
staticconstexpr |
vruntime 粒度 (用于计算抢占阈值)
Definition at line 35 of file cfs_scheduler.hpp.
|
private |
|
private |
就绪队列 (红黑树,按 vruntime 升序排序,begin() = 最小 vruntime)
Definition at line 205 of file cfs_scheduler.hpp.