RTAI(Real-Time Application Interface)是由意大利米兰理工学院航天工程系发起开发的遵循GPL的开源项目。RTAI是对Linux内核的硬实时扩展,它遵循自由软件规范。它可以提供工业级的RTOS功能,而且其所有的功能都可无缝的通过GNU/Linux环境访问。RTAI支持的CPU类型包括I386,PPC和ARM。
1.RTAILinux提供的功能
RTAI为开发硬实时系统提供了丰富的功能。首先、提供多种对实时任务的调度方式,它的调度器分为UP(Uniprocessor),SMP(Symmetric Multiple Processor)和MUP(Multi-Uniprocessor)三类。其中,UP调度器用于单处理器的系统;SMP调度器用于对称的多处理器的系统,所有的CPU使用相同的时钟中断源,也就是说,任务在所有的CPU上都是以相同的模式运行;而MUP调度器也是用于多处理器系统,只不过每个CPU有自己独立的时钟中断源,所以,在不同的CPU上运行的任务可以以不同的时钟模式运行。在这三类调度方式中,时钟运行的模式都有两种,单触发模式(one-shot mode)和周期模式(periodic mode)。另外,它提供了丰富的任务间的通信方法,主要包括邮箱机制(Mailboxe),消息和过程调用机制(Message and RPC),信号量机制(Semaphore),管道机制(FIFO),共享内存机制(Shared memory)。其中的管道机制和共享内存机制可用于RTAI的实时任务和Linux进程之间的通信。此外,RTAI还提供了LXRT机制,使得可以在Linux的用户空间创建软实时进程,满足软实时应用的要求。RTAI还在不断发展之中,而且它在实时环境中的应用也越来越多,它将来的主要发展方向包括实现更多硬件平台上的移植、为RTAI提供C++开发环境、实时文件系统、对基于Flash的文件系统的支持、高级的实时内存管理机制等。
2.RTHAL与RTAILinux
RTAI在Linux上定义了一组实时硬件抽象层RTHAL(Real Time Hardware Abstraction Layer),RTHAL将所有需要的Linux内部数据和函数的指针集合到一个RTHAL的结构中。RTHAL结构用于截取Linux硬件操作,在双内核结构工作时,它们可以被RTAI重定向,以取代Linux中原有的函数;同时RTAI只是用此程序界面与Linux进行沟通。通过这种方法就可以把对Linux内核源码的改动程度降到最低,可以避免RTLinux方案对Linux内核源码改动过大的问题,便于在不同Linux版本之间的移植。在RTHAL架构下,RTAI以独立实时内核的形式运行于硬件和Linux之间,它将Linux视为优先级最低的任务。
基于RTHAL的RTAI实时化方案的技术思想是构造一个简单的硬实时内核,应用的实时部分作为实时进程直接运行在这个硬实时内核之上;原来的Linux内核作为一个优先级最低的任务,也为这个实时内核所调度,应用的非实时部分作为非实时进程运行在Linux内核从而可以获得Linux内核所提供的一切服务。RTAI当初设计的目的是为了解决RTLinux在不同Linux版本之间难于移植的问题,为此,RTAI在Linux内核与硬件之间定义了一个实时硬件抽象层RTHAL,实时任务通过这个抽象层提供的接口和Linux系统进行交互,这样给Linux内核增加实时支持时可以尽可能少地修改Linux内核源代码,同时减少跟踪移植到新版Linux的工作量。(www.xing528.com)
RTAI修改了内核中与体系结构相关的代码而形成了RTHAL层,RTHAL通过接管硬件中断,建立软件模拟中断机制,将Linux内核与中断隔离。RTAI引入一个实时调度器(schedule)来保证其实时性,将Linux内核当成一个任务模块来执行,调度那些与实时应用紧密相关的内核函数指针集中组织到RTHAL结构中,当系统要转入实时处理时,这些指针可以被RTAI动态转换。通常情况下,这些指针变量指向嵌入式Linux中的函数,此时系统相当于工作在嵌入式Linux下,RTHAL不过增加了一个中间环节而已;当有实时要求时,即加载RTAI主模块后,该主模块的初始代码将这些指针变量修改为指向RTAI主模块中同名的函数,此时所有硬件中断都将被实时硬件抽象层接收,由相应函数来处理。当原有Linux试图屏蔽中断时,系统实际上并没有真正屏蔽中断,而只是设置了RTHAL中的某个结构,实时内核仍可处理中断。当发生中断时,RTAI不会马上调用嵌入式Linux的中断处理程序,而是分两步进行处理:首先接受中断请求,判断RTAI中是否存在对应的中断服务程序,若存在则转至该服务程序,否则由实时内核的中断服务程序处理该中断;然后查看RTHAL中的软件模拟中断控制器,如果Linux允许中断,则将中断交给Linux中断服务程序,如果不允许中断则返回。
3.Adeos与RTAILinux
Adeos的全称是Adaptive Domain Environment for Operating System,它的目标是为操作系统提供了一个灵活的、可扩展的自适应环境,在这个环境下,多个相同或不同的操作系统可以共存,共享硬件资源;随着历史的发展,目前已经存在了不少优秀的操作系统,正是因为这些操作系统的共同存在发展,而产生了以下的问题:一方面,对于那些面向相同的用户,具有相似设计理念和功能的操作系统来说,它们之间是不兼容或不完全兼容的,例如,在Windows操作系统上的应用程序是不能直接在Linux上运行的;这就将用户(包括程序设计者和系统管理员)限制在了一个固定的软件环境下,用户在应用的选择上缺少灵活性。另一方面,由于最初的应用环境和面向的用户的不同,有些操作系统在设计理念和功能上完全不同;但是,随着计算机技术的发展,现在的一个计算机系统往往具有以前多个系统的功能,各种计算机系统之间的界限越来越模糊。例如,现在的终端电子设备对实时性的要求越来越高(如智能手机),而某些实时系统也对人机界面的交互有了更高的要求,这就会促使这两种应用环境下的操作系统相互融合。目前,主要存在两类方法使多个操作系统运行在同一个系统上;第一类方法是模拟,例如,VMWare,Plex86和VirtualPC等;它们都是在已有的操作系统上提供一个虚拟的硬件环境,在这个虚拟硬件环境下可以运行另外操作系统。这样,用户就可以充分的利用两个或多个系统所提供的功能和软件;但这种方法最大的缺点就是会极大地降低系统的性能,因为它包含三个软件层次:主机操作系统(Host Operating System)->虚拟硬件环境->客户操作系统(Guest Operating System)。第二类方法,是在硬件上实现一个所谓的超微内核(nano-kernel),通过这个超微内核实现硬件的共享,然后再在这个内核上构建实用的操作系统,例如,SPACE、Cache kernel和Exokernel等,但这些方法都没有考虑当前已经存在的操作系统和用户。
而Adeos是在已有的操作系统下插入一个软件层,通过向上层多个操作系统提供某些原语和机制而实现硬件共享。但是Adeos并不对硬件的使用强加任何的限制,上层的操作系统仍然可以自由的操作硬件,而不会因为Adeos的存在而有任何的约束(实际上,上层的操作系统可以完全不知道有Adeos的存在)。Adeos除了可以实现操作系统对系统资源的共享之外,还可以用于新的操作系统的开发、操作系统内核的调试、跟踪等。目前,Adeos是基于Linux内核实现的,主要的应用是在Linux的实时化方面,使基于Linux的系统能满足硬实时的要求。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。