Kernel Behavior

优先级反转(Priority Inversion)

当高优先级任务被低优先级任务间接阻塞时,会发生优先级反转问题, 该现象是RTOS调度设计中的关键异常场景之一。

机制定义

高优先级任务等待低优先级任务释放资源,而中优先级任务持续抢占CPU → 导致高优先级任务被“反向延迟”

内核调度API入口

os_schedule_enter() → 进入调度上下文
os_context_save() → 保存任务上下文
os_scheduler_run() → 执行调度决策
os_context_restore() → 恢复目标任务
os_schedule_exit() → 退出调度流程

触发条件

共享资源竞争

低优先级任务持有互斥资源。

高优先级任务阻塞

高优先级任务等待同一资源。

中优先级抢占

中优先级任务持续占用CPU,阻止低优先级运行。

系统影响

优先级反转会导致实时系统响应时间不可预测,严重时可能破坏实时性约束。

解决机制

优先级继承

低优先级任务临时继承高优先级任务优先级。

优先级天花板

资源绑定最高优先级限制,避免中断抢占。

演示代码


// HRTOS Priority Inversion Demo
// 说明:模拟资源竞争导致的优先级反转

#include 
#include 

#define TASK_HIGH  0
#define TASK_MID   1
#define TASK_LOW   2

void low_task(void)
{
    os_mutex_lock(0);

    while(1)
    {
        os_nop(); // 持有资源
    }
}

void high_task(void)
{
    while(1)
    {
        os_mutex_lock(0); // 等待低优先级释放
        os_mutex_unlock(0);
    }
}

void mid_task(void)
{
    while(1)
    {
        os_nop(); // 抢占CPU
    }
}

void system_init(void)
{
    os_mutex_init(0);

    os_task((unsigned int)low_task, TASK_LOW, 1, 0);
    os_task((unsigned int)mid_task, TASK_MID, 2, 0);
    os_task((unsigned int)high_task, TASK_HIGH, 3, 0);
}
      

系统意义

优先级反转是RTOS调度设计中必须解决的核心问题之一, 直接影响系统确定性与实时性边界。

核心API映射

中断触发 → os_interrupt_enter()
调度决策 → os_scheduler_run()
上下文切换 → os_context_switch()
任务恢复 → os_context_restore()

相关导航

任务执行模型

Task Execution

调度系统

Scheduling Engine

中断机制

Interrupt Flow

任务生命周期

Task Lifecycle