在 Google 和 Stackoverflow 上有很多关于优先级抢占式调度的材料,但我仍然对优先级抢占式调度内核中无限循环任务的调度感到困惑。让我们考虑以下情况:
一个 RTOS 启动两个任务T1
,并分别T2
具有优先级50
和100
。这两个任务看起来像:
void T1()
{
while(1)
{
perform_some_task1();
usleep(100);
}
}
和
void T2()
{
while(1)
{
perform_some_task2();
usleep(100);
}
}
据我了解,内核将T2
因其较高的优先级而调度,并T1
因其较低的优先级而暂停。现在因为T2
是一个无限循环,它永远不会放弃 CPU,T1
直到其他一些高优先级任务抢占T2
。
但是,我的理解似乎不正确,因为我已经在 RTOS 中测试了上述案例,并且我在两个任务打印的控制台上都得到了输出。
有人可以评论我对此事的理解以及在上述情况下 RTOS 的实际行为吗?