【发布时间】:2017-02-08 04:26:22
【问题描述】:
由于空闲任务一般用于安全消耗其他软件不需要的CPU时间,如果没有空闲任务会怎样? RTOS 会自动创建一个吗?另外,空闲任务除了消耗时间还有什么其他用途?
【问题讨论】:
标签: rtos
由于空闲任务一般用于安全消耗其他软件不需要的CPU时间,如果没有空闲任务会怎样? RTOS 会自动创建一个吗?另外,空闲任务除了消耗时间还有什么其他用途?
【问题讨论】:
标签: rtos
如果没有空闲任务会发生什么? RTOS 会自动创建一个吗?
我怀疑是否有任何 RTOS 可以做到这一点。如果没有空闲任务,则可运行任务列表将为空,调度程序可能会崩溃。通常,空闲线程存在的一个最重要的原因是使可运行任务列表“永不为空”。这样就简化了调度器的代码。
另外,空闲任务除了消耗时间还有什么其他用途?
在某些系统中,空闲任务可以执行一些低优先级的活动(例如一些垃圾收集)。它还可以将内核切换到低功耗模式,尤其是在嵌入式设备上。在这种情况下,当空闲任务运行时,意味着没有什么可做的,因此可以停止内核并等待下一个事件(硬件中断或超时),而无需使用太多功率。当下一个事件到达时,内核被硬件唤醒并处理该事件。一些“正常”线程将开始运行,或者 - 如果仍然无事可做 - 空闲线程将恢复并再次切换到低功耗模式。
【讨论】:
如果 CPU 时钟正在运行,则必须执行指令;如果没有空闲任务,那么你的操作系统就坏了。空闲循环是 RTOS 的固有部分,而不是用户任务,因此 RTOS 不需要“自动创建”。
永不让步的低优先级用户任务将阻止空闲循环运行;这不一定是一件好事。这样的任务与空闲循环不同。一方面,RTOS 支持的任何 CPU 使用工具都会报告 100% 的使用率,如果这样的任务被取消 - 不包括空闲循环的执行是 CPU 使用率,因为 CPU 总是准备好在空闲时响应任何中断事件 -循环不会导致任何就绪任务延迟。
空闲任务或“空闲循环”通常就是这样,当没有其他事情可做时程序计数器设置为空循环。在某些架构中,循环可能包括停止内核执行(停止为内核计时)以降低功耗的“等待中断”指令。由于任何上下文切换都必须发生中断,因此如果支持 WFI,处理器可以在此循环中停止。
一些 RTOS 支持空闲循环的用户挂钩;可以在空闲循环上下文中在后台运行的低优先级运行到完成函数。
【讨论】:
空闲任务除了消耗时间还有什么其他用途?
最常见的是,它做了两件事:
1. 垃圾(资源)收集或清理
2. 采取措施降低功耗
【讨论】: