RTOS 中的空闲时间
Idle time in RTOS
由于空闲任务一般是用来安全消耗CPU其他软件不需要的时间,如果没有空闲任务会怎样? RTOS 会自动创建一个吗?另外,空闲任务除了消耗时间还有什么其他用途?
what would happen if there was no idle task? Would the RTOS just automatically create one?
我怀疑是否有任何 RTOS 可以做到这一点。如果没有空闲任务,那么 运行nable 任务列表将是空的,调度程序可能会崩溃。一般来说,空闲线程存在的一个最重要的原因是制作 运行 可用任务列表 "never empty"。这样就简化了scheduler的代码。
Also, what other purpose do idle tasks serve other than consuming time?
在某些系统中,空闲任务可以执行一些低优先级的活动(例如一些垃圾收集)。它还可以将内核切换到 low-power 模式,尤其是在嵌入式设备上。在这种情况下,当空闲任务为 运行 时,这意味着没有更多事情可做,因此可以停止内核并等待下一个事件(硬件中断或超时),而无需使用太多功率。当下一个事件到达时,内核被硬件唤醒并处理该事件。一些 "normal" 线程将启动 运行ning,或者 - 如果仍然无事可做 - 空闲线程将恢复并再次切换到 low-power 模式。
如果CPU时钟是运行,必须执行指令;如果没有空闲任务,那么你的 OS 就坏了。空闲循环是RTOS的固有部分,不是用户任务,所以RTOS不需要"create one automatically"。
永不放弃的低优先级用户任务将阻止空闲循环运行;这不一定是好事。这样的任务与idle loop不是一回事。一方面,RTOS 支持的任何 CPU 使用工具将一直报告 100% 使用率,如果这样的任务被执行 - 不包括空闲循环的执行是 CPU 使用率,因为CPU 在空闲时始终准备好响应任何中断事件 - 循环不会导致任何就绪任务延迟。
空闲任务,或“空闲循环”通常就是这样,当没有其他事情可做时程序计数器设置为空循环。在某些架构中,循环可能包含 "wait-for-interrupt" 指令,该指令停止内核执行(停止为内核提供时钟)以降低功耗。由于任何上下文切换都必然需要中断发生,如果支持 WFI,处理器可以在此循环中停止。
部分RTOS支持空闲循环的用户挂钩; low-priority run-to-completion 可以在空闲循环上下文中在后台运行的函数。
空闲任务除了消耗时间还有什么其他用途?
最常见的是,它会做两件事:
1.垃圾(资源)收集或清理
2. 启动降低功耗的措施
由于空闲任务一般是用来安全消耗CPU其他软件不需要的时间,如果没有空闲任务会怎样? RTOS 会自动创建一个吗?另外,空闲任务除了消耗时间还有什么其他用途?
what would happen if there was no idle task? Would the RTOS just automatically create one?
我怀疑是否有任何 RTOS 可以做到这一点。如果没有空闲任务,那么 运行nable 任务列表将是空的,调度程序可能会崩溃。一般来说,空闲线程存在的一个最重要的原因是制作 运行 可用任务列表 "never empty"。这样就简化了scheduler的代码。
Also, what other purpose do idle tasks serve other than consuming time?
在某些系统中,空闲任务可以执行一些低优先级的活动(例如一些垃圾收集)。它还可以将内核切换到 low-power 模式,尤其是在嵌入式设备上。在这种情况下,当空闲任务为 运行 时,这意味着没有更多事情可做,因此可以停止内核并等待下一个事件(硬件中断或超时),而无需使用太多功率。当下一个事件到达时,内核被硬件唤醒并处理该事件。一些 "normal" 线程将启动 运行ning,或者 - 如果仍然无事可做 - 空闲线程将恢复并再次切换到 low-power 模式。
如果CPU时钟是运行,必须执行指令;如果没有空闲任务,那么你的 OS 就坏了。空闲循环是RTOS的固有部分,不是用户任务,所以RTOS不需要"create one automatically"。
永不放弃的低优先级用户任务将阻止空闲循环运行;这不一定是好事。这样的任务与idle loop不是一回事。一方面,RTOS 支持的任何 CPU 使用工具将一直报告 100% 使用率,如果这样的任务被执行 - 不包括空闲循环的执行是 CPU 使用率,因为CPU 在空闲时始终准备好响应任何中断事件 - 循环不会导致任何就绪任务延迟。
空闲任务,或“空闲循环”通常就是这样,当没有其他事情可做时程序计数器设置为空循环。在某些架构中,循环可能包含 "wait-for-interrupt" 指令,该指令停止内核执行(停止为内核提供时钟)以降低功耗。由于任何上下文切换都必然需要中断发生,如果支持 WFI,处理器可以在此循环中停止。
部分RTOS支持空闲循环的用户挂钩; low-priority run-to-completion 可以在空闲循环上下文中在后台运行的函数。
空闲任务除了消耗时间还有什么其他用途?
最常见的是,它会做两件事:
1.垃圾(资源)收集或清理
2. 启动降低功耗的措施