实时扩展

与任何通用操作系统一样,linux内核主要是为吞吐量进行优化的,因为这是此类系统最重要的设计目标。这意味着在默认情况下,未修改的Linux系统将经常经历在实时系统中无法接受的显著的无限延迟。但是,可以将缺失的实时功能添加到Linux内核中去。这样,操作系统可以在提供广泛的系统服务和可接受的实时性能之间达到最佳平衡。

通常,有两种不同的方法来实现实时功能,要么通过实现基于协同内核的系统,要么通过在主线内核中打补丁,如实时Linux系统的不同体系结构所示。在第一个选项中,Linux内核在一个单独的实时调度器下作为一个正常进程运行。当这个调度程序还处理实时任务和系统事件时,实时部分可以很容易地与系统的其他部分分离出来。第二种选择是不影响底层的内核体系结构,而是对内核本身引入一组更改。在此配置中,Linux内核负责同时调度在系统内执行的正常任务和实时任务。

在协核系统中,Linux内核在某种程度上与实时任务隔离。

1. 实时Linux系统的不同体系结构

(A)协同内核 (Xenomai) (B)补丁(PREEMPT_RT)

这种系统有一个非常典型的例子:xenomai项目,它利用了硬件和Linux内核之间的中间层,有效地充当了中断调度程序和调度器。它基本上处理的是系统事件,以便处理总是为最高优先级的实时任务的优先级,以保证指定的时间要求。另一个可行的替代方案是打了PREEMPT_RT补丁的Linux,即实时Linux内核。在这种方法中,底层架构与以前保持完全相同。以前,PREEMPT_RT对内核引入了大量的更改,但现在,这些特性许多已经合并到主线内核中。这项工作仍在进行中,但最终整个PREEMPT_RT补丁会合并到主线内核。

在这两种体系结构之间进行选择是取决于应用程序的。通常,利用协内核的方法可以实现略低的延迟。但另一方面,系统的复杂性增加了,需要专门为所使用的实时内核精心制作实时任务。这与PREEMPT_RT补丁的Linux内核相反,因为体系结构更简单,实时任务几乎可以像任何其他常规应用程序一样编写。此外,打补丁的Linux的整体性能平均比协同内核所能实现的更好。