第 34 章 应用程序调整和部署

以下小节提供有关增强和开发 RHEL for Real Time 应用程序的提示。

注意

通常,尝试使用由 POSIX (可扩展操作系统接口)定义的 API。RHEL for Real Time 符合 POSIX 标准。RHEL for Real Time 内核的降低延迟也基于 POSIX。

34.1. 实时应用程序中的信号处理

传统的 UNIXPOSIX 信号具有其用途,特别是针对错误处理,但它们不适用于实时应用程序中的事件交付机制。这是因为当前 Linux 内核信号处理代码非常复杂,主要是因为旧的行为和需要支持的许多 API。这种复杂性意味着,在提供信号时所需的代码路径并非是最佳状态,应用程序可能会遇到长时间的延迟。

UNIX 信号背后的原始动机是不同"线程"不同的"线程"之间的多路控制线程(进程)。信号的行为方式类似于操作系统中断。也就是说,当向应用程序发送信号时,应用程序的上下文会被保存,并开始执行之前注册的信号处理程序。信号处理程序完成后,应用将返回到执行在信号发送时所处的位置。这种做法会变得复杂。

在实时应用程序中,无法信任信号。更好的选择是使用 POSIX Threads(pthreads)来分布工作负载并在不同组件间通信。您可以使用 mutexes、condition 变量和障碍的 pthreads 机制协调线程组。通过这些相对新结构的代码路径比信号的传统处理代码更为清晰。