"实时"如何是Linux 2.6?

Rob*_*ert 29 linux embedded real-time

我正在考虑将我的产品从RTOS迁移到嵌入式Linux.我没有很多实时要求,我所拥有的少量RT要求大约为10毫秒.

有人可以给我一个参考,告诉我当前版本的Linux是如何实时的吗?

从商业RTOS迁移到Linux还有其他问题吗?

Bri*_*aro 36

您可以从Real Time Linux wikiFAQ获得大部分答案

什么是股票2.6 linux内核的实时功能?

传统上,Linux内核只允许一个进程在某些情况下抢占另一个进程:

  • 当CPU运行用户模式代码时
  • 当内核代码从系统调用或中断返回到用户空间时
  • 当内核代码代码在互斥锁上阻塞时,或者明确地将控制权交给另一个进程

如果在发生需要高优先级线程开始执行的某个事件时执行内核代码,则高优先级线程不能抢占正在运行的内核代码,直到内核代码明确产生控制.在最坏的情况下,延迟可能是几百毫秒或更长.

Linux 2.6配置选项CONFIG_PREEMPT_VOLUNTARY引入了对长延迟的最常见原因的检查,以便内核可以自动控制等待执行的更高优先级的任务.这可能会有所帮助,但是虽然它可以减少长延迟(几百毫秒到几秒或更长)的出现,但它并没有消除它们.但是,与CONFIG_PREEMPT(下面讨论)不同,CONFIG_PREEMPT_VOLUNTARY对系统的总吞吐量的影响要小得多.(一如往常,有延迟吞吐量之间的权衡古典---该系统的整体效率和---随着现代系统的更快的CPU的,它通常是有意义的权衡吞吐量较低的延迟,但服务器不需要最小延迟保证的类系统可能选择使用CONFIG_PREEMPT_VOLUNTARY,或者坚持使用传统的不可抢占的内核设计.)

2.6 Linux内核有一个额外的配置选项,CONFIG_PREEMPT,这导致所有内核代码自旋锁保护区以外和中断处理程序有资格非自愿抢占更高优先级的内核线程.使用此选项,最坏情况延迟降至(大约)单位数毫秒,尽管某些设备驱动程序可能具有中断处理程序,这将导致延迟比这更糟糕.如果实时Linux应用程序要求延迟小于一位数毫秒,强烈建议使用CONFIG_PREEMPT_RT补丁.

他们还在常见问题解答中列出了"Gotcha's"列表.

在编写实时应用程序时要记住哪些重要事项?

在初始启动阶段注意以下事项:

  • 尽快从main()调用mlockall().
  • 在应用程序启动时创建所有线程,并触摸每个线程的整个堆栈的每个页面.在RT显示时间内不要动态启动线程,这会破坏RT行为.
  • 切勿使用已知会产生页面错误的系统调用,例如fopen().(打开文件会执行mmap()系统调用,从而生成页面错误).
  • 如果使用'compile time global variables'和/或'compile time global arrays',那么在访问它们时使用mlockall()来防止页面错误.

更多信息:HOWTO:构建RT应用程序

他们还有一个您可能想要结帐的大型出版物页面.


Jer*_*ner 5

你有没看过Xenomai?它将允许您在Linux上运行"硬实时"进程,同时仍允许您访问常规Linux API以满足所有非实时需求.