HRTOS Scheduler

时间片轮转调度(Round Robin)

基于时间片的公平调度机制,在同优先级任务之间轮转执行, 同时支持实时/通用双调度模式切换。

概述

Round Robin(RR)通过固定时间片在同优先级任务之间轮转执行, 避免单任务长期占用CPU。

在 HRTOS 中,RR 通常与优先级调度结合形成混合调度模型, 用于提升系统公平性与吞吐能力。

工作原理

系统维护循环就绪队列,任务按顺序执行,每次分配固定时间片。

时间片耗尽或任务主动让出CPU时触发调度切换。

Tick中断递减时间片计数器,当归零后任务进入队列尾部, 调度器选择下一个任务执行。

调度模式(Scheduler Mode)

extern char os_scheduler_mode_switch(unsigned char id); // 1:实时模式(优先级调度) // 高优先级就绪立即抢占,不执行低优先级任务 // 0:通用模式(时间片轮转) // 同优先级按时间片轮转执行,保证公平性 // 优先级越高时间片越多(priority + 1),最低优先级也至少1片
extern char os_set_scheduler(unsigned char id); // 1:HRTOS默认实时调度模式 // 0:MYOS用户策略模式(允许自定义调度行为)

实时模式用于强时间约束场景;通用模式用于吞吐与公平性场景。

关键接口 / 结构

extern char os_tick_config(u8 slice_count, u16 tick_value); // 设置系统Tick配置:时间片数量 + Tick粒度 // 系统调度核心初始化接口(必须) extern void os_tick_get(u16 *high, u16 *low); // 获取当前系统Tick计数(高低32位扩展) // 用于调度分析 / 时间统计 / 性能测量 extern u32 os_uptime_ms(); // 获取系统开机运行时间(毫秒) // 用于系统运行监控 / 健康检测

RR通过时间片与队列管理实现调度控制,并依赖Tick中断驱动运行。

运行流程

task enqueue ↓ dispatch ↓ execute ↓ tick decrement ↓ timeslice expire ↓ move to tail ↓ next task

调度在Tick或yield触发时发生,保证轮转公平性。

扩展说明

RR通常用于同优先级任务调度,与优先级调度组合构成混合模型。

在实时模式下RR被优先级调度覆盖,在通用模式下RR成为主调度策略。