一、实时系统基本概念
什么是实时系统,POSIX作了这样的定义:指能够在限定的响应时间内提供所需水平服务的系统。另个一被Donald Gillies提出定义为:一个实时系统是指计算的正确性不仅取决于程序的逻辑正确性,也取决于结果产生的时间,如果系统的时间约束条件得不到满足,将会发生系统出错。实时系统对响应时间有严格要求。
实时操作系统(RTOS,RealTime Operation System)是指能够在给定的截止时间前对内部或者外部的异常事件做出正确响应的操作系统。在实时操作系统中,进程的执行结果的正确与否不仅与逻辑运算或数学计算结果的正确性相关,还与进程运行结束得出结果的时间有关,也就是说,如果一个进程的运算结果是正确的,但是由于它完成时间已经超出了系统给定的最后期限,在实时系统中,这个结果就是毫无意义的。
根据系统对响应时间约束条件的强弱可将实时操作系统分为两大类:硬实时系统(HRT,HardReal-Time System)和软实时系统(SRT,SoftReal-Time System)。
软实时操作系统:软实时操作系统对时间的限制不是十分苛刻,响应的时间可以相对延迟,即未超过最后规定时间太多的范围内,其结果都是可以接受的,不会产生严重的后果。
硬实时操作系统:对于硬实时操作系统而言,不仅要求各个任务能够运行得到正确的结果,同时还必须在限定的时间内完成,这个时间是由系统本身确定的,这比软实时操作系统的时间约束条件严格了许多。例如,在航天领域的嵌入式实时操作系统中,如果在规定的时间内未能得出所希望的运算结果,其产生的后果将是十分严重的。
二、Linux操作系统实时性
1、Linux系统框架
宏观上,Linux的框架如图1:
图1 Linux框架图
为了更加直观,更加便于理解,Linux框架图1,可以抽象成下图2。
图2
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实时性的典型代表。