我正在考虑将我的产品从RTOS迁移到嵌入式Linux。我没有很多实时要求,而我有几个RT要求大约是10毫秒。
有人可以给我指出一个参考,该参考可以告诉我当前版本的Linux如何实时吗?
从转向商业RTOS到Linux还有其他陷阱吗?
您可以从Real Time Linux
Wiki和FAQ中获得大部分答案。
库存的2.6 linux内核的实时功能是什么?
传统上,Linux内核仅在某些情况下才允许一个进程抢占另一个进程:
- 当CPU运行用户模式代码时
- 当内核代码从系统调用或中断返回到用户空间时
- 当内核代码在互斥锁上阻塞或显式地将控制权交给另一个进程时
如果发生某个事件时需要执行高优先级线程才能开始执行的内核代码正在执行,则该高优先级线程无法抢占正在运行的内核代码,直到内核代码明确地产生控制权为止。在最坏的情况下,延迟可能会达到数百毫秒或更长。
Linux
2.6配置选项CONFIG_PREEMPT_VOLUNTARY引入了对长延迟最常见原因的检查,以便内核可以自动将控制权交给等待执行的更高优先级的任务。这可能会有所帮助,但是虽然它减少了长时间延迟(几百毫秒到可能的秒数或更多)的发生,但并不能消除它们。但是,与CONFIG_PREEMPT(在下面讨论)不同,CONFIG_PREEMPT_VOLUNTARY对系统的总体吞吐量的影响要小得多。(与往常一样,在吞吐量(系统的整体效率)和延迟之间存在经典的权衡。随着现代系统CPU速度的提高,通常需要权衡吞吐量以降低延迟,2.6
Linux内核还有一个额外的配置选项CONFIG_PREEMPT,它使自旋锁保护区域和中断处理程序之外的所有内核代码都可以通过更高优先级的内核线程进行非自愿的抢占。使用此选项,尽管某些设备驱动程序可以使用中断处理程序,但最坏的情况下的延迟降至(大约)个数毫秒,这将使延迟更差。如果实时Linux应用程序要求的延迟小于一位数毫秒,则强烈建议使用CONFIG_PREEMPT_RT补丁。
它们还具有您在FAQ中称为“ Gotcha”的列表。
在编写实时应用程序时要记住哪些重要的事情?
在初始启动阶段请注意以下事项:
- 请尽快从main()调用mlockall()。
- 在应用程序启动时创建所有线程,并触摸每个线程整个堆栈的每个页面。切勿在RT放映期间动态启动线程,否则将破坏RT行为。
- 切勿使用已知会产生页面错误的系统调用,例如fopen()。(打开文件会执行mmap()系统调用,这会生成页面错误)。
- 如果使用“编译时全局变量”和/或“编译时全局数组”,请使用mlockall()防止在访问它们时出现页面错误。
详细信息:如何:构建RT应用程序
他们还有一个大型出版物页面,您可能想结帐。
问题内容: (这是一个Q /A风格的问题,是提出类似问题的人们的首选资源。很多人似乎迷失了最佳方法,因为他们不知道所有选择许多答案将特定于ASP.NET,但是AJAX和其他技术在其他框架中确实具有等效功能,例如socket.io和SignalR。) 我有一个在ASP.NET中实现的数据表。我想在页面上实时或接近实时显示对此基础数据的更改。我该怎么办? 我的模特: 代替此示例的实际数据库,我将把数据
问题内容: 我看过几个网站,这些网站向您显示数据库中正在发生的事情的实时更新。一个例子可能是 股票行情实时显示股票价格的网站 显示诸如“其他用户当前正在搜索的内容”之类的数据。 我认为这将涉及某种轮询机制,该机制每隔几秒钟会查询一次数据库并将其呈现在网页上。但是,从性能角度考虑时,这种想法使我感到恐惧。 在我正在处理的应用程序中,我需要显示用户提交的操作的实时状态。用户等待该过程完成。当操作完成时
问题内容: 我在同一HTML页面上同时使用了javascript和jquery代码。由于某种原因,jQuery库正在阻止我的本机javascript代码正常工作。 我找到了此页面:jQuery No Conflict,它表明您可以使用jquery.noConflict将$释放回javascript。但是,我不确定该怎么做? 具体来说,我不确定如何正确执行此操作?Jquery代码在哪里,JS代码在哪
问题内容: 我已经开发Web应用程序已有一段时间了,但是最近使用Comet服务器端推送技术对其进行了介绍,而我对该技术的理解还很不成熟。虽然链接http://www.zeitoun.net/articles/comet_and_php/start提供了两个使用PHP中无限循环的简单示例实现,但我想进一步了解上述方法的用途以及是否适合生产。专用彗星服务器如Meteor(http://meteorse
异步读取 新建一个 ExcelModelListener 监听类出来,并且 继承 AnalysisEventListener 类 package com.zh.oukele.listener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListen
我正在编写一个新的板条箱,我希望它能与一个特征的任何实现(在另一个板条箱中定义)一起使用。该特性看起来如下所示: 我有自己的类型,但有时我只想不加修改地转发底层错误。我的本能是这样定义一个类型: 我看过其他几个crate,它们似乎通过使其(或等价物)泛型于错误类型本身,而不是特性实现来处理这一问题。当然,这是可行的,但是: 除非我们有了固有的关联类型,否则它要冗长得多。我的实际上实现了多个特性,每