饥饿现象演示(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中,可通过时间片调度、优先级继承和任务让出机制降低饥饿风险。