linux 实时操作系统简介

时间:2022-05-20 20:23:00

原文地址:http://blog.csdn.net/baishuwei/article/details/3906597


在没有介绍我们的主角之前,我们先来看看什么是实时系统和Linux系统。这里的实时系统指的是实时操作系统,通常情况下,操作系统从实时性能上被分为三种,硬实时操作系统,软实时系统以及非实时系统。通常情况下,硬实时操作系统对时间要求严格,任何硬实时任务的失败都可能导致无法估测的损失和伤害,这种操作系统通常被用在航空,国防,控制等领域。软实时系统的任务失败较之硬实时系统的危害性要小许多,通常我们用到的多媒体播放器就需要软实时性能。非实时操作系统任务的失败,是影响最小的,一般的个人电脑是使用的操作系统就是非实时操作系统,例如Linux,Windows,MacOS,等等。
     这里的Linux系统是指Linux内核系统,并非我们平时用到的Redhat,Ubuntu,Slackware等Linux发行版系统。1991年10月,Linux创始人Linus Torvalds 发布Linux第一个版本,同年九月,第二个版本发布。从此,通过互联网上众多的Linux*着的努力,到本文写作时,Linux-2.6.22已经发布。Linux系统是支持GNU/GPL协议的,也就是说任何个人,组织都可以完全*的获得其源代码,修改源代码,使用源代码,而你要做的就是将你的相应劳动供献给大家。
     早期的Linux系统没有实时能力,就连基本的内核态任务抢占也没有。对于这样一个流行操作系统,不提供实时功能确实是比较悲哀的。1996年,RTLinux发布,它是Linux实时系统的鼻祖,RTLinux系统的发布也标志着Linux支持实时任务。自打RTLinux发布以后,其它相应的实时Linux发行版相继出现。到目前为止,互联网上大约有十几中实时Linux系统,出于文章篇幅的考虑,本文中我只介绍RTLinux,RTAI,L4/Fiasco,XtratuM,KURT这几种典型的实时Linux系统。
     如果谈论Real-Time Linux系统,首先要谈论RTLinux,原因很简单,RTLinux是第一个实时Linux系统,并且现在比较流行。RTLinux最早由新墨西哥科技大学研发的,由Victor Yodaiken和他的学生Michael Barabanov所完成。该系统的设计概念就是架空Linux Kernel,从而使实时任务可以尽快的被执行。我们知道,Linux是一个很大的通用操作系统,它早期的版本中连内核态抢占都不支持,更无法满足实时的需求了。也就是说,单个任务的请求要花费10ms(Linux 在X86上的调度频率是100HZ)以上,这显然无法满足工业控制等实时场景的需求。所以RTLinux采用一个比较简单的方法,将原来的整个Linux与实时任务分离,而将实时任务单独处理。具体来说就是RTLinux实现了新的中断和时钟管理机制,还有调度器。调度器可以调度实时线程或实时任务以及Linux系统。此时的Linux是按照一个最低优先级的任务被调度。当系统中没有实时任务时,或者说CPU对实时任务空转运行时,Linux系统才得以运行。由于RTLinux出现的早,并且符合自动控制的需求,使用者非常的多,并且多半是在自动控制的领域使用。当前RTLinux极有商业版本RTLinux-pro由FMSlabs公司开发,另一个是RTLinux的开源版本RTLinux-GPL 版本,由RTLinux开源社区维护。
     RTAI是Real-Time Appication Interface 的缩写。从名称中可以看出RTAI是一套用户可以使用的实时任务调用接口。RTAI实际上是RTLinux的变种,由于RTLinux在移植时比较困难,因此RTLinux的一部分开发人员建立了RTAI系统。RTAI也采用了架空Linux内核的机制。为了提供方便的移植结构,RTAI非常小心的在Linux上定义了一组RTHAL(Real-Time Hardware Abstraction Layer)。RTHAL将RTAI需要在Linux中修改的部分定义成一组函数接口,RTAI只使用这组接口和Linux沟通。这样可以使以后的移植工作中对Linux内核的代码修改量达到最低。RTAI是完全开源的实时系统,它的源代码可以从RTAI官方网站免费获取。现在RTAI的使用范围比RTLinux广泛的多。
     L4/Fiasco系统是完全不同与RTLinux和RTAI机制的实时系统,它可以支持软实时任务调度。L4最先由Jochen Liedtke开发的第二代微内核。目前,它已经变成了第二代微内核的一个标准,基于这个标准,有很多L4 API的实现。其中一个实现就是Fiasco,它是在德国德累斯顿大学开发的。为了强调Fiasco跟L4之间的这种关系,我们把Fiasco一般称L4/Fiasco。L4/Fiasco与其它L4的实现不同的是L4/Fiasco是一个具有实时特性的微内核,L4/Fiasco是DROPS项目的一个核心子项目,它同时提供了很多软件包,以方便基于L4/Fiasco的程序设计。因为L4/Fiasco是具有实时功能的微内核,而在实时程序的设计中,一般可以分为实时任务和非实时任务。对于使在L4/Fiasco上运行非实时任务的程序可以兼容Linux程序,设计者们修改了Linux内核,使得整个Linux可以运行在L4/Fiasco之上。目前L4Linux的最新版本是基于Linux-2.6.18的。
     XtratuM是我们介绍的Real-Time Linux系统中最年轻的一个,2003年XtratuM-0.1版本的发布标志者XtratuM的诞生,到现在为止,XtratuM共发布了三个版本XtratuM-0.1,XtratuM-0.3和刚刚发布的XtratuM-1.0。XtratuM与上面列举的real-time linux系统的最大不同之处是XtratuM采用超微内核设计理念,它从影响实时系统性能最重要的两个方面中断和定时器着手,建立一个超微的系统内核,实现对中断和定时器的虚拟。从而使上层系统,例如Linux,RTLinux系统以域(domain)的方式运行。内存分离的保护机制提高了系统的安全性,Linux做为最低优先级的域只有在无实时任务的时候调用。域和域之间可以通过FIFO或者SHM(Share Memory)通信。从另一个角度看,XtratuM是一个实时虚拟机,它可以直接运行在底层硬件上,并且向上层系统提供标准的中断、时钟接口。从而提高了上层系统的可移植性。当前RTLinux社区正在将RTLInux移植到XtratuM上面。
     前面四中实时Linux系统虽然实现实时性能的机制不同,但是它们都有一个共同点就是实现了一个实时的微内核,都由该微内核进行任务调度。与它们不同另外一种策略就是KURT系统,它直接对Linux内核修改,增加Linux的抢占机制(Linux抢占机制最早是在linux 2.6版本中)以及改变Linux调度策略。前期的时候,Linux的时钟调度中断频率是100HZ,也就是说任务的请求调度延迟是10ms,这也就是Linux为什么不支持实时调度的原因。在KURT中,Linux采用了新的更灵活的调度机制,它不在受100HZ的限制,可以根据任务的优先级,中断的优先级任务而调用实时任务。KURT是支持软实时任务调度的。
     real-time Linux系统并不仅仅是这些,还有其余一些版本,例如QNX,LynxOS等商业版本,LXRT,RED-Linux等开源版本,这里就不仔细介绍了。以上几种实时Linux系统由于设计的目标不一样,因此对于它们的优劣情况这里就不仔细介绍了。文中不当之处,请读者予以指出。如果想了解更多的关于以上系统的细节,可以参考引用网站。
References:
RTLinux: http://www.rtlinux.org
RTAI: http://www.rtai.org
XtratuM: http://www.xtratum.org
L4/Fiasco: http://os.inf.tu-dresden.de/L4
KURT: http://www.ittc.ku.edu/kurt/