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

先来先服务 (FIFO) 调度器 More...

#include <fifo_scheduler.hpp>

Inheritance diagram for FifoScheduler:
Inheritance graph
Collaboration diagram for FifoScheduler:
Collaboration graph

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 OnPreempted (TaskControlBlock *task) -> void override
 任务被抢占时调用
 
构造/析构函数
 FifoScheduler ()
 
 FifoScheduler (const FifoScheduler &)=delete
 
 FifoScheduler (FifoScheduler &&)=delete
 
auto operator= (const FifoScheduler &) -> FifoScheduler &=delete
 
auto operator= (FifoScheduler &&) -> FifoScheduler &=delete
 
 ~FifoScheduler () override=default
 
- Public Member Functions inherited from SchedulerBase
virtual auto OnTick (TaskControlBlock *current) -> bool
 Tick 更新:每个时钟中断时调用,用于更新调度器状态
 
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
 

Private Attributes

etl::list< TaskControlBlock *, kernel::config::kMaxReadyTasksready_queue_
 就绪队列 (先进先出,固定容量)
 

Additional Inherited Members

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

Detailed Description

先来先服务 (FIFO) 调度器

FIFO 调度器特点:

  • 先进先出,适合对延迟敏感的实时任务
  • 不可抢占,任务运行直到主动让出 CPU
  • O(1) 时间复杂度

Definition at line 22 of file fifo_scheduler.hpp.

Constructor & Destructor Documentation

◆ FifoScheduler() [1/3]

FifoScheduler::FifoScheduler ( )
inline

Definition at line 89 of file fifo_scheduler.hpp.

89{ name = "FIFO"; }
const char * name
调度器名称

◆ FifoScheduler() [2/3]

FifoScheduler::FifoScheduler ( const FifoScheduler )
delete

◆ FifoScheduler() [3/3]

FifoScheduler::FifoScheduler ( FifoScheduler &&  )
delete

◆ ~FifoScheduler()

FifoScheduler::~FifoScheduler ( )
overridedefault

Member Function Documentation

◆ Dequeue()

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

从就绪队列中移除指定任务

Parameters
task要移除的任务

Implements SchedulerBase.

Definition at line 41 of file fifo_scheduler.hpp.

41 {
42 ready_queue_.remove(task);
44 }
etl::list< TaskControlBlock *, kernel::config::kMaxReadyTasks > ready_queue_
就绪队列 (先进先出,固定容量)
size_t total_dequeues
总出队次数
Here is the caller graph for this function:

◆ Enqueue()

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

将任务加入就绪队列尾部

Parameters
task要加入的任务

Implements SchedulerBase.

Definition at line 28 of file fifo_scheduler.hpp.

28 {
29 if (ready_queue_.full()) {
30 klog::Err("FifoScheduler::Enqueue: ready_queue full, dropping task");
31 return;
32 }
33 ready_queue_.push_back(task);
35 }
auto Err(etl::format_string< Args... > fmt, Args &&... args) -> void
以 ERROR 级别记录日志
size_t total_enqueues
总入队次数
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetQueueSize()

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

获取就绪队列大小

Returns
队列中的任务数量

Implements SchedulerBase.

Definition at line 64 of file fifo_scheduler.hpp.

64 {
65 return ready_queue_.size();
66 }
Here is the caller graph for this function:

◆ IsEmpty()

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

判断队列是否为空

Returns
队列为空返回 true,否则返回 false

Implements SchedulerBase.

Definition at line 72 of file fifo_scheduler.hpp.

72 {
73 return ready_queue_.empty();
74 }
Here is the caller graph for this function:

◆ OnPreempted()

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

任务被抢占时调用

FIFO 是不可抢占调度器,但如果外部强制抢占,则需要统计

Parameters
task被抢占的任务

Reimplemented from SchedulerBase.

Definition at line 83 of file fifo_scheduler.hpp.

83 {
85 }
size_t total_preemptions
总抢占次数
Here is the caller graph for this function:

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

◆ PickNext()

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

选择下一个要运行的任务(队列头部)

Returns
下一个任务,如果队列为空则返回 nullptr

Implements SchedulerBase.

Definition at line 50 of file fifo_scheduler.hpp.

50 {
51 if (ready_queue_.empty()) {
52 return nullptr;
53 }
54 TaskControlBlock* next = ready_queue_.front();
55 ready_queue_.pop_front();
57 return next;
58 }
size_t total_picks
总选择次数
任务控制块,管理进程/线程的核心数据结构
Here is the caller graph for this function:

Member Data Documentation

◆ ready_queue_

etl::list<TaskControlBlock*, kernel::config::kMaxReadyTasks> FifoScheduler::ready_queue_
private

就绪队列 (先进先出,固定容量)

Definition at line 99 of file fifo_scheduler.hpp.


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