Scheduling Engine

饥饿现象演示(Starvation Demo)

本实验用于演示调度系统中的任务饥饿问题:当高优先级任务持续占用CPU资源时, 低优先级任务可能长期无法获得执行机会,从而导致系统响应不公平。

机制定义

Starvation = 高优先级长期运行 + 低优先级持续等待 + CPU资源竞争失衡

调度器核心模型

Scheduler = Ready队列管理 + 优先级选择 + 时间片控制 + 抢占机制

HRTOS调度系统统一由调度器控制,不同调度策略(优先级 / RR / 实时)本质上只是调度器决策规则不同。

触发条件

任务饥饿通常由以下情况导致:

高优先级任务死循环

高优先级任务持续运行且不主动让出CPU。

缺少时间片轮转

系统未启用公平调度策略。

资源竞争过度

低优先级任务始终无法获取共享资源。

调度策略偏置

系统过度偏向实时任务。

执行流程

1. 创建高低优先级任务

初始化多个竞争任务。

2. 高优先级任务持续运行

CPU始终被高优先级任务占用。

3. 低优先级任务等待

任务处于Ready但无法调度。

4. 统计等待时间

记录任务被延迟的执行周期。

5. 验证饥饿结果

观察低优先级任务长期未执行现象。

演示代码


// HRTOS Starvation Demo
#include <HRTOS.H>
#include <HRTOS_KERNEL.H>

void high_task(void)
{
    while(1)
    {
        os_nop();
    }
}

void low_task(void)
{
    while(1)
    {
        os_wait1(10);
    }
}

void main(void)
{
    os_scheduling(1);

    os_task((unsigned int)high_task, 0, 5, 0);
    os_task((unsigned int)low_task, 1, 1, 0);

    os_task_release(0);

    while(1)
    {
        os_nop();
    }
}
    

系统意义

饥饿问题揭示了实时调度系统中公平性与实时性之间的平衡关系。 在HRTOS中,可通过时间片调度、优先级继承和任务让出机制降低饥饿风险。

相关导航

调度器 API

Scheduler API

调度器核心模型

Scheduler Core Model

中断机制

Interrupt Flow

任务生命周期

Task Lifecycle