SimpleKernel 1.17.0
Loading...
Searching...
No Matches
IdleScheduler Class Reference

Idle 调度器 More...

#include <idle_scheduler.hpp>

Inheritance diagram for IdleScheduler:
Inheritance graph
Collaboration diagram for IdleScheduler:
Collaboration graph

Public Member Functions

auto Enqueue (TaskControlBlock *task) -> void override
 将 idle 任务加入队列
 
auto Dequeue (TaskControlBlock *task) -> void override
 从队列中移除任务
 
auto PickNext () -> TaskControlBlock *override
 选择下一个要运行的任务(返回 idle 任务)
 
auto GetQueueSize () const -> size_t override
 获取队列大小
 
auto IsEmpty () const -> bool override
 判断队列是否为空
 
auto OnTick (TaskControlBlock *current) -> bool override
 Tick 更新(idle 任务不需要时间片管理)
 
auto OnTimeSliceExpired (TaskControlBlock *task) -> bool override
 时间片耗尽处理(idle 任务不使用时间片)
 
auto OnPreempted (TaskControlBlock *task) -> void override
 任务被抢占时的处理(idle 任务不需要特殊处理)
 
auto OnScheduled (TaskControlBlock *task) -> void override
 任务被调度时的处理(idle 任务不需要特殊处理)
 
构造/析构函数
 IdleScheduler ()
 
 IdleScheduler (const IdleScheduler &)=delete
 
 IdleScheduler (IdleScheduler &&)=delete
 
auto operator= (const IdleScheduler &) -> IdleScheduler &=delete
 
auto operator= (IdleScheduler &&) -> IdleScheduler &=delete
 
 ~IdleScheduler () override=default
 
- Public Member Functions inherited from SchedulerBase
virtual auto BoostPriority (TaskControlBlock *task, int new_priority) -> void
 优先级提升:当任务持有资源时被更高优先级任务等待,提升其优先级
 
virtual auto RestorePriority (TaskControlBlock *task) -> void
 优先级恢复:当任务释放资源后,恢复其原始优先级
 
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
 

Private Attributes

TaskControlBlockidle_task_ {nullptr}
 Idle 任务指针(通常只有一个)
 

Additional Inherited Members

- Public Attributes inherited from SchedulerBase
const char * name {"Unnamed Scheduler"}
 调度器名称
 
- Protected Attributes inherited from SchedulerBase
Stats stats_ {}
 

Detailed Description

Idle 调度器

Idle 调度器特点:

  • 只管理 idle 任务,通常只有一个 idle 任务
  • 当没有其他任务可运行时,调度 idle 任务
  • 最低优先级,只有在所有其他调度器都为空时才会被选中
  • O(1) 时间复杂度

Definition at line 19 of file idle_scheduler.hpp.

Constructor & Destructor Documentation

◆ IdleScheduler() [1/3]

IdleScheduler::IdleScheduler ( )
inline

Definition at line 108 of file idle_scheduler.hpp.

108{ name = "Idle"; }
const char * name
调度器名称

◆ IdleScheduler() [2/3]

IdleScheduler::IdleScheduler ( const IdleScheduler )
delete

◆ IdleScheduler() [3/3]

IdleScheduler::IdleScheduler ( IdleScheduler &&  )
delete

◆ ~IdleScheduler()

IdleScheduler::~IdleScheduler ( )
overridedefault

Member Function Documentation

◆ Dequeue()

auto IdleScheduler::Dequeue ( TaskControlBlock task) -> void
inlineoverridevirtual

从队列中移除任务

Parameters
task要移除的任务

Implements SchedulerBase.

Definition at line 34 of file idle_scheduler.hpp.

34 {
35 if (idle_task_ == task) {
36 idle_task_ = nullptr;
38 }
39 }
TaskControlBlock * idle_task_
Idle 任务指针(通常只有一个)
size_t total_dequeues
总出队次数

◆ Enqueue()

auto IdleScheduler::Enqueue ( TaskControlBlock task) -> void
inlineoverridevirtual

将 idle 任务加入队列

Parameters
task要加入的任务(通常只有一个 idle 任务)

Implements SchedulerBase.

Definition at line 25 of file idle_scheduler.hpp.

25 {
26 idle_task_ = task;
28 }
size_t total_enqueues
总入队次数

◆ GetQueueSize()

auto IdleScheduler::GetQueueSize ( ) const -> size_t
inlineoverridevirtual

获取队列大小

Returns
队列大小(0 或 1)

Implements SchedulerBase.

Definition at line 57 of file idle_scheduler.hpp.

57 {
58 return idle_task_ ? 1 : 0;
59 }

◆ IsEmpty()

auto IdleScheduler::IsEmpty ( ) const -> bool
inlineoverridevirtual

判断队列是否为空

Returns
如果没有 idle 任务则返回 true

Implements SchedulerBase.

Definition at line 65 of file idle_scheduler.hpp.

65 {
66 return idle_task_ == nullptr;
67 }

◆ OnPreempted()

auto IdleScheduler::OnPreempted ( TaskControlBlock task) -> void
inlineoverridevirtual

任务被抢占时的处理(idle 任务不需要特殊处理)

Parameters
task被抢占的任务

Reimplemented from SchedulerBase.

Definition at line 93 of file idle_scheduler.hpp.

93 {
95 // Idle 任务被抢占时不需要做任何事,它会一直保持在队列中
96 }
size_t total_preemptions
总抢占次数

◆ OnScheduled()

auto IdleScheduler::OnScheduled ( TaskControlBlock task) -> void
inlineoverridevirtual

任务被调度时的处理(idle 任务不需要特殊处理)

Parameters
task被调度的任务

Reimplemented from SchedulerBase.

Definition at line 102 of file idle_scheduler.hpp.

102 {
103 // Idle 任务被调度时不需要做任何事
104 }

◆ OnTick()

auto IdleScheduler::OnTick ( TaskControlBlock current) -> bool
inlineoverridevirtual

Tick 更新(idle 任务不需要时间片管理)

Parameters
current当前任务
Returns
始终返回 false(不需要重新调度)

Reimplemented from SchedulerBase.

Definition at line 74 of file idle_scheduler.hpp.

75 {
76 return false;
77 }

◆ OnTimeSliceExpired()

auto IdleScheduler::OnTimeSliceExpired ( TaskControlBlock task) -> bool
inlineoverridevirtual

时间片耗尽处理(idle 任务不使用时间片)

Parameters
task任务
Returns
始终返回 false(不需要重新入队)

Reimplemented from SchedulerBase.

Definition at line 84 of file idle_scheduler.hpp.

85 {
86 return false;
87 }

◆ operator=() [1/2]

auto IdleScheduler::operator= ( const IdleScheduler ) -> IdleScheduler &=delete
delete

◆ operator=() [2/2]

auto IdleScheduler::operator= ( IdleScheduler &&  ) -> IdleScheduler &=delete
delete

◆ PickNext()

auto IdleScheduler::PickNext ( ) -> TaskControlBlock*
inlineoverridevirtual

选择下一个要运行的任务(返回 idle 任务)

Returns
idle 任务,如果没有则返回 nullptr

Implements SchedulerBase.

Definition at line 45 of file idle_scheduler.hpp.

45 {
46 if (idle_task_) {
48 }
49 // 注意:idle 任务不从队列中移除,因为它应该一直保持可用
50 return idle_task_;
51 }
size_t total_picks
总选择次数

Member Data Documentation

◆ idle_task_

TaskControlBlock* IdleScheduler::idle_task_ {nullptr}
private

Idle 任务指针(通常只有一个)

Definition at line 118 of file idle_scheduler.hpp.

118{nullptr};

The documentation for this class was generated from the following file: