在 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 的实际行为吗?