【发布时间】:2011-03-27 20:53:37
【问题描述】:
我只听说过关于 RTOS 的好消息——它们让程序员可以更好地控制调度程序,例如:避免优先级倒置,他们的时序更一致,更好的多任务处理。但是所有标准桌面设置都使用非实时操作系统。所以使用 RTOS 必须有一些权衡,它们是什么?
【问题讨论】:
标签: operating-system real-time real-time-systems
我只听说过关于 RTOS 的好消息——它们让程序员可以更好地控制调度程序,例如:避免优先级倒置,他们的时序更一致,更好的多任务处理。但是所有标准桌面设置都使用非实时操作系统。所以使用 RTOS 必须有一些权衡,它们是什么?
【问题讨论】:
标签: operating-system real-time real-time-systems
RTOS 通常以吞吐量性能和功能换取可预测性和可处理性。人们通常对“实时”的定义是“确定性的”。不付出代价就无法拥有确定性。
在通用操作系统中,我们受到“常见情况”行为的激励——我们想要非常好的平均性能和很大的灵活性。在 RTOS 中,我们希望为“最坏情况”行为设置一个可靠的上限,并且我们为吞吐量或常见情况行为付出了(通常是高昂的代价)。
是的,可以创建混合体,例如 Windows 甚至 Linux 实时线程。但是在某个地方,您通常会付出代价,因为最终只有有限的可用资源集(CPU、IO 带宽等)并且消费者操作系统和 RTOS 围绕不同的标准进行优化。一些 RT Linux 方法通过分区明确地处理这个问题。在每个分区中针对不同的假设和不同的最优性标准进行了优化。
交易了哪些功能?我无法提供准确的列表——更重要的是通用操作系统往往有无数的驱动程序,并且能够跟上流失的速度新设备; RTOS 倾向于专注于更小的集合,对于这些集合,及时性可以很好理解,也可以明确避免干扰其他活动。您可能不会在普通 RTOS 上选择相同的驱动程序,因为通常实施它们是不合理的。
吞吐量记住“实时”!=“真正快速”。当系统是实时的时,这意味着活动的完成时间是其正确性的一部分。在某些情况下,这意味着非常快速地处理许多活动(高吞吐量);在其他情况下,它可能在相对缓慢但非常可预测的时期进行处理。 RTOS 中的结构可能具有高吞吐量,但通常无法达到等效 RTOS 的吞吐量,因为用于公平实现该吞吐量的技术(缓存、花哨的交互驱动调度方法、“公平”排队和锁争用)会影响反对任何单个任务的及时性的可预测性。
【讨论】:
我不确定这是否是一个很大的原因,但我相信处理器中存在像 System Management Mode 这样的非实时功能并不能真正实现实时操作系统,因为 SMM 可以任意采用只要它想响应 SMI,操作系统能做的最好的事情就是在它重新获得控制权时超时并崩溃——如果它会及时重新获得控制权。因此,您还需要 BIOS 是实时的,这并不像只有一家像微软这样的公司使其操作系统成为实时的那么容易(无论如何这本身并不容易)。
无论如何,对于普通用户来说可能不会有太多收益。
【讨论】:
有助于桌面应用程序开发的功能在需要实时操作系统的应用程序中并不重要。因此,RTOS 供应商倾向于将他们的工程时间集中在对客户很重要的事情上,例如快速启动和错误恢复。
在快速应用程序开发和实时之间存在重叠市场之前,您不太可能看到操作系统供应商在两者之间分配其资源。快速开发和安全关键不能同时使用。
随着 Blackberry Playbook 迁移到 QNX,我们可能会第一次看到一个友好的 RTOS 开发环境(库和工具)。
【讨论】:
这与“为什么不是每个人都用 C 编写 webapps?”的原因基本相同。它的速度要快得多,但是要困难得多。大型系统上的 RTOS 变得笨拙,因为很多控制权都交给了应用程序程序员。
【讨论】: