Chinaunix首页 | 论坛 | 博客
  • 博客访问: 150990
  • 博文数量: 38
  • 博客积分: 687
  • 博客等级: 上士
  • 技术积分: 426
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-09 10:48
文章分类

全部博文(38)

文章存档

2019年(1)

2016年(1)

2014年(5)

2013年(1)

2012年(8)

2011年(17)

2010年(2)

2009年(3)

我的朋友

分类: LINUX

2012-02-25 20:14:44

首先看一下linux的实时性的发展。
linux2.4的时候,用户空间可以被抢占,内核空间不能被抢占,因此实时性很差。
到2.6以后,内核中多了一个CONFIG_PREEMPT的配置。它使得大部分的内核代码可以被抢占,而spinlock保护的代码和中断处理函数不能被高优先级的内核线程抢占。这样实时性有了一定的提高,可以达到几个毫秒量级。
在主流之外,由Ingo Molnar和Thomas Gleixner维护的patch:CONFIG_PREEMPT_RT进一步提高了linux的实时性,达到了<100us的程度。它所做的修改是:
1,重新实现了rtmutex,使得spinlock可以被抢占,使被spinlock保护的代码可以被抢占。
2,把中断处理函数线程化。
3,对spinlock和semaphore实现了优先级继承。
4,使用了高精度的时钟。
因此,内核成为full preemptible

而上面这些在vxWorks中都早已实现。另外,
1,不考虑RTP, vxWorks不支持用户态任务。因此上下文切换时间较小。
2,linux的某些函数没有确定的最大执行时间。如内存分配函数。VxWorks当然不能有这种函数。
3,驱动要精心设计,不能随意关中断。
4,某些协议栈,如PCI和usb,在linux上没有对实时性进行优化过。而VXWorks作为老牌的rtos,所做的任何修改都会考虑到实时性。

参考资料
embedded_linux_realtime.pdf
阅读(4526) | 评论(0) | 转发(0) |
0

上一篇:使用git,创建工程

下一篇:semaphore

给主人留下些什么吧!~~