![使用 QNX 或 VxWorks 等 RTOS 代替 Linux 的优势是什么?](https://linux22.com/image/16160/%E4%BD%BF%E7%94%A8%20QNX%20%E6%88%96%20VxWorks%20%E7%AD%89%20RTOS%20%E4%BB%A3%E6%9B%BF%20Linux%20%E7%9A%84%E4%BC%98%E5%8A%BF%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
当开发需要实时操作系统的解决方案时,QNX或VxWorks等操作系统相对于Linux有什么优势?
或者换句话说,由于这些操作系统是专门为实时、嵌入式使用而设计的 - 与 Linux 不同,Linux 是一个更通用的系统,可以针对实时使用进行定制 - 你什么时候会需要使用这些操作系统之一而不是 Linux?
答案1
一些嵌入式系统(a)需要满足困难的实时要求,但(b)硬件非常有限(这使得满足这些要求变得更加困难)。
如果您无法更改硬件,那么在某些情况下您将被迫排除 Linux 并使用其他硬件:
- 也许CPU连MMU都没有,这就导致无法运行Linux(uClinux除外,据我所知uClinux不是实时的)。
- 也许CPU相对较慢,Linux中的最坏情况中断延迟无法满足某些硬性要求,而其他一些针对极低最坏情况中断延迟进行调整的RTOS可以满足要求。
- 也许系统的 RAM 很少。几年前,最小的 Linux 设置需要大约 2 MB 的 RAM;最小的 eCos 设置(带有一个兼容层,可以运行一些最初设计为在 Linux 上运行的应用程序)需要大约 20 kB RAM。
- 也许您的硬件没有 Linux 移植,并且在您需要启动(双关语!)系统之前没有足够的时间移植 Linux。许多更简单的 RTOS 移植到新硬件所需的时间比 Linux 少得多。
答案2
我根本没有做过任何实时工作,所以对此持保留态度......
有人告诉我“实时”有两类:硬实时和软实时。
“软实时”非正式地意思是“尽快完成”。我认为现代 CPU 上的 Linux 适合这类事情。
“硬实时”非正式地意味着“在要求的时间窗口内完成它”。窗口可以非常小,几毫秒之类的。巡航导弹或卫星运载火箭的飞行控制系统似乎就是典型的例子。工业过程控制系统可能也需要这个。 Stuxnet 蠕虫病毒似乎干扰了进行此类控制的系统。
在后一种情况下您可以使用 RTOS。 RTOS 通常保证在少于这么多指令或时钟周期或其他什么的情况下传送中断。
另一个考虑因素可能是 RTOS 被设计、测试和/或“证明”不会无限制地消耗堆栈空间。它可以存在于一定的最小内存量内,并且像“OOM Killer”这样的东西不存在,因为它们被证明永远不需要。早期 FORTRAN 的一些愚蠢的特性就来自于这种类型的需求。当您编译 FORTRAN II 程序时,您确切地知道它需要多少堆栈和多少堆,因为您无法递归,并且无法动态分配任何内容。
实际上,在某些安全关键型应用中,第二个考虑因素(保证最大内存消耗)可能比“保证 0.001 秒的中断延迟”更重要。
我还可以想象,如果去掉支持冗长的遮羞布的选择过程,您会发现工程师选择 RTOS 是因为“需求说”。