Scheduling Behavior

饥饿现象演示(Starvation)

饥饿现象是调度系统在缺乏公平性机制时产生的典型行为: 高优先级任务长期占用CPU,导致低优先级任务无法获得执行机会。

机制定义

Starvation = 高优先级持续运行 + Ready队列长期被覆盖 + 低优先级无法调度

相关API(API_V2): os_switch · os_dispatch_id · os_task_yield · os_delay

调度器模型

Scheduler = Ready队列选择 + 优先级决策 + 抢占机制 + 时间片策略(若启用)

饥饿现象不是错误,而是调度策略在“无公平补偿机制”条件下的自然结果。

触发条件

高优先级任务持续运行

任务进入循环执行且频繁占用CPU。

缺乏时间片轮转机制

调度器始终优先选择高优先级任务。

低优先级任务长期Ready

任务被唤醒但无法获得执行窗口。

无公平调度补偿

系统未引入RR或aging机制。

执行流程

1. 创建任务

初始化高优先级与低优先级任务。

2. 高优先级占用CPU

任务持续运行,形成调度主导。

3. 低优先级进入Ready

任务等待调度器分配CPU时间。

4. 调度长期偏置

Ready队列不断被高优先级任务抢占。

5. 饥饿现象出现

低优先级任务执行机会极低或消失。

演示代码


#include <hrtos.h>

sbit LED_HIGH = P1^0;
sbit LED_LOW  = P1^1;

void task_high(void)
{
    while(1)
    {
        LED_HIGH = ~LED_HIGH;
        os_task_yield();

        u16 i = 20000;
        while(i--);
    }
}

void task_low(void)
{
    while(1)
    {
        LED_LOW = 1;

        os_delay(10);

        LED_LOW = 0;

        os_delay(10);
    }
}

void hrtos_main(void)
{
    os_task_create((unsigned int)task_high, 1, 4, 5);
    os_task_create((unsigned int)task_low,  2, 1, 5);
}

系统意义

饥饿现象揭示了调度公平性与实时性之间的冲突。 工程中通常通过时间片轮转(RR)、优先级继承或aging机制进行缓解。

相关导航

Scheduler API

进入

Scheduling Engine

进入

Task Module

进入