2012-04-05 65 views
1

Xenomai's API of Posix skin中,我找到以下内容:什么样的代码不应该写成实时代码?

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

我什么都看不到关于文件处理套接字编程,所以我猜测,也许是文件处理和插座不要在实时处理?猜测错了吗?

请指导。

回答

4

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

他们提供了许多服务,其中大部分服务与线程和同步化有关,不会调用Linux API(在内核空间中)或系统调用(在用户空间中)。如你所知,实时是关于“保证最后期限”,并称Linux违反了它(因为Linux不保证任何内容)。

由于驱动程序也是实时系统重要的是,他们已经实现了实时驱动程序模型,或RTDM有助于在实时情况下都实现和使用的设备驱动程序。

在内核中的文件处理是强烈的不满。如果您正在讨论用户空间实时应用程序,那么您可以访问在RTDM中实现的任何驱动程序。如果你没有找到一个文件处理或套接字,那么你不能使用它们。请注意,即使是printf也使用Linux系统调用并且被禁止。

请注意,如果您确实使用它们,则没有任何问题,您只是失去了实时性!我个人确实使用文件进行日志记录,但是只有在出现错误时才打电话给他们,这意味着实时服务已经被破坏了。

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

+0

这非常有帮助。谢谢。除了Xenomai说什么之外,你能指点我一个实时谈论做什么和不该做什么的链接吗? – 2012-04-05 09:31:07

+0

@AnishaKaul,让我搜索。不幸的是,互联网上没有太多的实时应用程序/用户可以获得广泛的信息。 – Shahbaz 2012-04-05 09:32:29

+0

是的,这是问题。请在这里找到链接。谢谢。 – 2012-04-05 09:33:55

1

实时是整个系统的性能。要在系统中的所有组件(包括硬件,操作系统,驱动程序,库和应用程序)的设计应考虑到适用于实时系统的要求实现的实时性。这些组件(如RTOS)可用于构建实时系统。但是它们的使用并不意味着最终系统将成为实时系统。其实,如果你的系统的组件的至少一个不支持实时系统的要求,整个系统将无法实时!

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

它完全取决于应用程序。通常,所有未用于处理实时任务的代码都可以写成非实时代码。用于处理实时任务的所有代码必须写为实时。

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

像存储和网络服务这样的系统和服务通常不用于实时任务,因为常用硬件非常不确定,因此不适合实时概念。很难说通过网络发送五个数据包或将文件写入HDD需要多少时间。由于这个原因,这种系统的接口并不常见。但是,应用程序再一次指出了它需要的实时服务。我可以想象实时任务,涉及存储和网络操作。在这种任务的情况下,设计者被迫寻找这样的系统组件,其将提供实时存储和网络服务。正如你所看到的,Xenomai不是候选人。

相关问题