第 34 章 应用程序调整和部署
以下小节提供有关增强和开发 RHEL for Real Time 应用程序的提示。
注意
通常,尝试使用由 POSIX
(可扩展操作系统接口)定义的 API。RHEL for Real Time 符合 POSIX 标准。RHEL for Real Time 内核的降低延迟也基于 POSIX。
34.1. 实时应用程序中的信号处理
传统的 UNIX
和 POSIX
信号具有其用途,特别是针对错误处理,但它们不适用于实时应用程序中的事件交付机制。这是因为当前 Linux 内核信号处理代码非常复杂,主要是因为旧的行为和需要支持的许多 API。这种复杂性意味着,在提供信号时所需的代码路径并非是最佳状态,应用程序可能会遇到长时间的延迟。
UNIX 信号背后的原始动机是不同"线程"不同的"线程"之间的多路控制线程(进程)。信号的行为方式类似于操作系统中断。也就是说,当向应用程序发送信号时,应用程序的上下文会被保存,并开始执行之前注册的信号处理程序。信号处理程序完成后,应用将返回到执行在信号发送时所处的位置。这种做法会变得复杂。
在实时应用程序中,无法信任信号。更好的选择是使用 POSIX Threads(pthreads)来分布工作负载并在不同组件间通信。您可以使用 mutexes、condition 变量和障碍的 pthreads 机制协调线程组。通过这些相对新结构的代码路径比信号的传统处理代码更为清晰。