1

Xenomai 的 Posix skin API 中,我发现以下内容:

POSIX 皮肤。
时钟和计时器服务。
条件变量服务。
中断管理服务。
消息队列服务。
互斥服务。
信号量服务。
共享内存服务。
信号服务。
线程管理服务。
线程取消。
线程调度服务。
线程创建属性。
线程特定的数据。

我看不到有关文件处理套接字编程的任何内容,所以我猜也许文件处理和套接字不是实时处理的?猜错了吗?

请指导。

4

2 回答 2

4

Xenomai 及其起源 RTAI 都控制您的调度程序,将 linux 内核本身作为非实时线程处理。

他们提供了许多服务,如您所见,其中大部分与不调用 Linux API(在内核空间中)或系统调用(在用户空间中)的线程和同步有关。如您所知,实时就是“保证期限”,调用 Linux 违反了它(因为 Linux 不保证任何事情)。

由于驱动程序在实时系统中也很重要,因此他们实现了实时驱动程序模型或 RTDM,它有助于在实时上下文中实现和使用设备驱动程序。

内核中的文件处理被强烈反对。如果您谈论的是用户空间实时应用程序,那么您可以访问在 RTDM 中实现的任何驱动程序。如果您没有找到用于文件处理或套接字的工具,那么您就不能使用它们。请注意,即使 aprintf使用 Linux 系统调用,也是被禁止的。

请注意,如果您确实使用它们,不会有任何中断,您只会失去实时性!我个人确实使用文件进行日志记录,但只有在出现错误时才调用它们,这意味着实时已经被破坏了。

我不知道 Xenomai,但至少在 RTAI 中,如果您调用 Linux 系统调用,那么您会在内核日志中收到类似“RTAI: LXRT changed mode: syscall ...”的警告。

于 2012-04-05T09:29:19.293 回答
1

实时性是整个系统的属性。为了在系统中实现实时特性,其所有组件(包括硬件、操作系统、驱动程序、库和应用程序)的设计都应考虑应用于实时系统的要求。此类组件(如 RTOS)可用于构建实时系统。但它们的使用并不自动意味着最终系统将是一个实时系统。实际上,如果您的系统中至少有一个组件不支持实时系统的要求,那么您的整个系统就不会是实时的!

实时系统的资源通常大大超过实时任务的平均需求。未消耗的资源可用于执行有用但非关键的后台任务,例如日志记录、系统状态监控、统计信息收集和分析等。将执行此任务的应用程序可以设计为在顶部运行的非实时组件实时组件。如果您确定参与实时任务的所有组件都支持实时要求,则此设计是安全的。由于对您的问题的直接回答:

它完全取决于应用程序。一般来说,所有不用于处理实时任务的代码都可以写成非实时的。所有用于处理实时任务的代码都必须是实时编写的。

Xenomai 所做的是隔离非实时 Linux 及其用于在特殊容器中处理非实时任务的活动,该容器在 RTOS 内核之上运行并与基于 RTOS 的实时任务并行. 要在 Xenomai 基础上构建实时系统,您的应用程序应该只依赖于 Xenomai API 以及其他已知并被证明是实时的库和 API。所有有用但完全不重要的后台活动都可以编写为有序的 Linux 应用程序。

存储和网络服务等系统和服务通常不用于实时任务,因为常用的硬件具有很大的不确定性,因此不太适合实时概念。很难说通过网络发送五个数据包或将文件写入硬盘需要多少时间。因此,此类系统的接口并不常见。但同样,应用程序决定了它需要什么实时服务。我可以想象实时任务,其中涉及存储和网络操作。在此类任务的情况下,设计师被迫寻找此类系统组件,这些组件将提供实时存储和网络服务。如您所见,Xenomai 不是候选人。

于 2016-11-18T09:17:19.863 回答