SimpleKernel 1.17.0
Loading...
Searching...
No Matches
idle_scheduler.hpp
Go to the documentation of this file.
1
5#pragma once
6
7#include "scheduler_base.hpp"
9
20 public:
25 auto Enqueue(TaskControlBlock* task) -> void override {
26 idle_task_ = task;
28 }
29
34 auto Dequeue(TaskControlBlock* task) -> void override {
35 if (idle_task_ == task) {
36 idle_task_ = nullptr;
38 }
39 }
40
45 [[nodiscard]] auto PickNext() -> TaskControlBlock* override {
46 if (idle_task_) {
48 }
49 // 注意:idle 任务不从队列中移除,因为它应该一直保持可用
50 return idle_task_;
51 }
52
57 [[nodiscard]] auto GetQueueSize() const -> size_t override {
58 return idle_task_ ? 1 : 0;
59 }
60
65 [[nodiscard]] auto IsEmpty() const -> bool override {
66 return idle_task_ == nullptr;
67 }
68
74 [[nodiscard]] auto OnTick([[maybe_unused]] TaskControlBlock* current)
75 -> bool override {
76 return false;
77 }
78
84 [[nodiscard]] auto OnTimeSliceExpired([[maybe_unused]] TaskControlBlock* task)
85 -> bool override {
86 return false;
87 }
88
93 auto OnPreempted([[maybe_unused]] TaskControlBlock* task) -> void override {
95 // Idle 任务被抢占时不需要做任何事,它会一直保持在队列中
96 }
97
102 auto OnScheduled([[maybe_unused]] TaskControlBlock* task) -> void override {
103 // Idle 任务被调度时不需要做任何事
104 }
105
108 IdleScheduler() { name = "Idle"; }
109 IdleScheduler(const IdleScheduler&) = delete;
111 auto operator=(const IdleScheduler&) -> IdleScheduler& = delete;
113 ~IdleScheduler() override = default;
115
116 private:
119};
Idle 调度器
auto Dequeue(TaskControlBlock *task) -> void override
从队列中移除任务
auto Enqueue(TaskControlBlock *task) -> void override
将 idle 任务加入队列
auto GetQueueSize() const -> size_t override
获取队列大小
~IdleScheduler() override=default
auto OnTimeSliceExpired(TaskControlBlock *task) -> bool override
时间片耗尽处理(idle 任务不使用时间片)
auto operator=(const IdleScheduler &) -> IdleScheduler &=delete
auto OnTick(TaskControlBlock *current) -> bool override
Tick 更新(idle 任务不需要时间片管理)
auto IsEmpty() const -> bool override
判断队列是否为空
auto PickNext() -> TaskControlBlock *override
选择下一个要运行的任务(返回 idle 任务)
auto OnScheduled(TaskControlBlock *task) -> void override
任务被调度时的处理(idle 任务不需要特殊处理)
TaskControlBlock * idle_task_
Idle 任务指针(通常只有一个)
IdleScheduler(const IdleScheduler &)=delete
auto OnPreempted(TaskControlBlock *task) -> void override
任务被抢占时的处理(idle 任务不需要特殊处理)
auto operator=(IdleScheduler &&) -> IdleScheduler &=delete
IdleScheduler(IdleScheduler &&)=delete
调度器基类接口
const char * name
调度器名称
size_t total_dequeues
总出队次数
size_t total_preemptions
总抢占次数
size_t total_picks
总选择次数
size_t total_enqueues
总入队次数
任务控制块,管理进程/线程的核心数据结构