2、标准Linux内核制约实时性的因素

  ● Linux中有大量不可抢占的区域

  在Linux2.6中,内核己经可以抢占,因而实时性得到了加强"但是内核中仍有大量的不可抢占区域,如由自旋锁(SPinlock)保护的临界区。

  ● 时钟粒度粗糙

  Linux2.6内核虽然把时钟频率提高到1000 赫兹,定时精度达到了1ms,但远不能满足实时系统要求的微秒级定时精度,如数控系统要求50us 的定时精度。

  ● 关闭中断

  系统调用和中断服务程序中,为了保护临界区资源,Linux会长时间关闭中断"有些系统调用和中断服务程序的时间还很长,这样会加大中断延迟时间。

  ● 缺乏有效的实时任务调度机制和调度算法

  Linux系统是按照分时系统的目标设计的,以达到系统较好的平均性能,强调平衡各进程之间的响应时间来保证公平的CPU时间占用。通常采用固定时间片的分时调度算法,内核不能抢占,而实时系统的行为更多的取决于复杂的不可预知的情况。这些原则不能满足实时系统短的响应时间和确定的执行行为的要求。

  ● 优先级反转的问题

  当一个低优先级的进程占用了某种资源,导致同样需要这个资源的高级进程无法运行,并且此时有一个优先级在他们之间的绪进程获得了CPU 的控制权,这样使得高级别的任务需要等待比他优先级别低的任务,这种现象叫做优先级反转。在Linux中,由于资源是不可抢占的,并且不支持优先级继承等策略,所以优先级反转现象可能会发生,这影响了系统的实时性能。

  3、改进Linux实时性的方案

  从前文可以看出,标准Linux内核有许多制约实时性的因素,要将Linux系统用于实时环境,必须对其进行改进。目前改进Linux实时性的方案有两种:直接修改内核法、双内核法。

  直接修改内核法,通过对Linux 原理与源代码的分析,通过对内核的进程调度、中断服务程序等代码进行修改与优化,提高系统的实时性能,并且为了保证系统的通用性,需要按照POSIX

  的相关标准来进行改动。利用这种方法可以获得较好的性能提升,并且因为与标准的Linux 内核使用相同的应用程序接口,所以有良好的兼容性。目前,采用修改内核方法改进Linux 实时性的产品很多,如 Kurt-Linux、TimesysLinux 和 Ingo's RT patch 等。

  双内核法,通过在Linux 内核与硬件中断之间增加一个可抢先的实时内核,把标准的Linux 内核作为该实时内核的一个优先级低的进程来调度,它可以被实时进程抢断,正常的

  Linux 进程仍可以在 Linux 内核上运行,这样既可以使用标准分时操作系统即Linux 的各种服务,又能提供低延时的实时环境。RT-Linux 是采用双内核法改造Linux 实时性的典型代表。