列表5给出了安装实时中断处理程序的过程。RTLinux在执行实时中断处理程序时将禁止IRQ。应注意,该代码须在退出实时中断处理程序前调用rtl_hard_enable_irq()才能重新使能中断。
有两个问题影响直接从实时中断处理程序调用Linux内核功能:内核禁止所有中断及不定义执行内容。还应注意的是,这里也不能执行浮点操作。利用实时中断处理程序来控制线程执行是避免出现这些问题的好办法。本例采用pthread_wakeup_np()功能来唤醒一个实时线程。中断处理程序可处理即时的工作,余下的由该线程解决。
SMP结构的优点
实时Linux都支持多处理器架构。对称多处理器(SMP)结构采用了高级可编程中断控制器(APIC),奔腾级处理器都有片上本地APIC,可为本地处理器传送中断。SMP(甚至单处理器母板)都有I/O APIC,可收集来自外设的中断请求,并将它们传送给本地APIC。旧的8259 PIC速度很慢,所处理的中断向量数不充分,迫使设备共享中断,使得中断处理更慢。但是,APIC可解决这些问题。通过为每个设备请求设置一个特定的IRQ,系统可减少中断延迟,APIC还可加速同步代码。
实时Linux可充分利用APIC。在SMP系统中,实时调度程序利用APIC,而不是采用过时的8254芯片来完成时序分配。由于PC的兼容性,8254位于每一个ISA总线上,而且每一个再编程设备的调用都要占用处理器周期。一个千兆赫CPU要浪费数百个处理器周期来等待8MHz定时器(大约2.5μs)。APIC工作在总线频率,而且可立即执行所有的定时器操作,这意味着必须利用本地APIC时钟在AMP机器上获取更高的周期性频率(双P-III-500 CPU可在100kHz运行周期性实时线程,而无明显的性能损失)。
实时Linux能很好地执行多处理任务,它为每个CPU实施单独的进程。调用pthread_create()可创建一个在现有CPU上运行的线程。还可用pthread_attr_setcpu_np()将该线程分配给一个特定的CPU,以改变线程属性。在调用这一功能之前,必须首先初始化线程属性。
RTLinux v. 3包括reserve_cpu功能,可预留SMP平台上的一个CPU,专供RTLinux使用。它可运行于2.4x内核,RTAI也具有几乎同样的功能。
如果想将任务分给某一特定的CPU,请留意“pset”方案(http://isunix.it.ilstu.edu/thockin/pset/)。利用该内核可将一个SMP处理器专门分配给一个用户应用程序,甚至可从Linux处理器组中调用一个处理器专用于实时任务。
同步基元
早期的实时Linux没有同步基元。现在,POSIX型的旗语、互斥和信号在最新的实时Linux版本中都已出现。虽然在实时设计中采用这些同步基元还存在问题,但同步或用信号表示实时任务和用户应用程序很有意义,然而,这要求软件开发者具有高超的技能,这一问题已超出本文的讨论范围。
快速学习pthread_mutex_init()、pthread_mutex_lock()、pthread_mutex_trylock()、pthread_mutex_unlock()和pthread_mutex_destroy()等同步功能的最好方法是查看。/examples/mutex/mutex.c。特别要提醒的是。/examples/mutex/sema_Test.c文件是学习旗语的很好起点。
实时Linux发展方向
实时Linux与Linux一样仍然处于不断发展之中。每一个新的版本都添加了更多的特性和功能。实时Linux正朝着更好的POSIX 1003.x实现方向发展,最新的特性包括用户空间进程的实时支持、互斥、信号、旗语、实时存储器管理和扩展的SMP支持等。如果还未确定下一个项目采用哪个实时系统,可下载一种实时Linux版本了解一下。其实,Linux已经是一种成熟的OS,而且具备实时扩展版本,它是嵌入式应用的最佳选择之一。
RTLinux的特点
在Linux 操作系统中,调度算法(其于最大吞吐量准则)、设备驱动、不可中断的系统调用、中断屏蔽以及虚拟内存的使用等因素,都会导致系统在时间上的不可预测性,决定了Linux操作系统不能处理硬实时任务。RTLinux为避免这些问题,在Linux内核与硬件之间增加了一个虚拟层(通常称作虚拟机),构筑了一个小的、时间上可预测的、与Linux内核分开的实时内核,使得在其中运行的实时进程满足硬实时性。并且RTLinux和Linux构成一个完备的整体,能够完成既包括实时部分又包括非实时部分的复杂任务。
软实时的实现
RTLinux通过一个高效的、可抢先的实时调度核心来全面接管中断,并把Linux作为此实时核心的一个优先级最低的进程运行。当有实时任务需要处理时,RTLinux运行实时任务;无实时任务时,RTLinux运行Linux的非实时进程。在Linux进程和硬件中断之间,本来由Linux内核完全控制,现在在Linux内核和硬件中断的地方加上了一个RTLinux内核的控制。Linux的控制信号都要先交给RTLinux内核进行处理。在RTLinux内核中实现了一个虚拟中断机制,Linux本身永远不能屏蔽中断,它发出的中断屏蔽信号和打开中断信号都修改成向RTLinux发送一个信号。如在Linux里面使用“SI”和“CLI”宏指令,让RTLinux里面的某些标记做了修改。也就是说将所有的中断分成Linux中断和实时中断两类。如果RTLinux内核接收到的中断信号是普通Linux中断,那就设置一个标志位;如果是实时中断,就继续向硬件发出中断。在RTLinux中执行STI将中断打开之后,那些设置了标志位表示的Linux中断就继续执行,因此,CLI并不能禁止RTLinux内核的运行,却可以用来中断Linux。Linux不能中断自己,而RTLinux可以。
RTLinux在默认的情况下采用优先级的调度策略,即系统调度器根据各个实时任务的优先级来确定执行的先后次序。优先级高的先执行,优先级低的后执行,这样就保证了实时进程的迅速调度。同时RTLinux也支持其它的调度策略,如最短时限最先调度、确定周期调度。RTLinux将任务调度器本身设计成一个可装载的内核模块,用户可以根据自己的实际需要,编写适合自己的调度算法。
对于一个操作系统而言,精确的定时机制虽然可以提高任务调度器的效率,但会增加CPU处理定时中断的时间开销。RTLinux对时间精度和时钟中断处理的时间开销进行了折中考虑。不是像Linux那样将8254定时器设计成10ms产生一次定时中断的固定模式,而是将定时器芯片设置为终端计时中断方式。根据最近的进程的时间需要,不断调整定时器的定时间隔。这样不仅可以获得高定时精度,同时中断处理的开销又最小。
硬实时的实现
硬件实时部分被作为实时任务来执行,并从外部设备拷贝数据到一个叫做实时有名管道(RTFIFO)的特殊I/O端口;程序主要部分作为标准Linux进程来执行。它将从RTFIFO中读取数据,然后显示并存储到文件中,实时部分将被写入内核。设计实时有名管道是为了使实时任务在读和写数据时不被阻塞。
RTLinux将标准Linux内核作为简单实时操作系统(RTOS)里优先权最低的线程来运行,从而避开了Linux内核性能的问题。 从图3可以看出,RTLinux拥有两个内核。这就意味着有两组单独的API,一个用于Linux环境,另一个用于实时环境。此外,为保证实时进程与非实时Linux进程不顺序进行数据交换,RTLinux引入了RT-FIFO队列。RT-FIFO被Linux视为字符设备,最多可达150个,分别命名为/der/rtf0、/dev/rtf1……/dev/rtf63。最大的RT-FIFO数量在系统内核编译时设定。
RTLinux程序运行于用户空间和内核态两个空间。RTLinux提供了应用程序接口。借助这些API函数将实时处理部分编写成内核模块,并装载到RTLinux内核中,运行于RTLinux的内核态。非实时部分的应用程序则在Linux下的用户空间中执行。这样可以发挥Linux对网络和数据库的强大支持功能。
Alex Ivchenko博士是联合电子实业公司的研发工程经理,也是该公司PowerDAQ II系列PCI数据采集板的主要开发者之一。最近,他正为该系列卡编写Linux驱动程序。可通过电子邮件aivchenko@ueidaq.com与他联系。
讲了这么大段,不知道大家有没对RTLinux进一步了解,或许在不久的将来,你也会深深的爱上她,我们来总结下:上面我们一共讨论了她的日常生活(运作),她的与众不同,当然她的外貌也是挥之不去的,下面为了乡亲们的幸福,我特地请教了谷歌大哥RTLinux的出生背景和她的生日哦!大家努力研读吧!幸福在向我们招手!
RTLinux大扫盲:
RTLinux(AReal-Time Linux,亦称作实时Linux)是Linux中的一种实时操作系统。它由新墨西哥矿业及科技学院的V. Yodaiken开发。目前,RTLinux有一个由社区支持的免费版本,称为RTLinux Free,以及一个来自FSMLabs的商业版本,称作RTLinux Pro。
RTLinux是由美国新墨西哥州的fsmlabs(finite state machine labs, 有限状态机实验室)公司开发的、利用linux开发的面向实时和嵌入式应用的操作系统。在rtlinux宣言中,这样描述rtlinux : rtlinux is the hard realtime variant of linux that makes it possible to control robots, data acquisition systEMS, manufacturing plants, and other time-sensitive instruments and machines。
到目前为止,RT-Linux已经成功地应用于航天飞机的空间数据采集、科学仪器测控和电影特技图像处理等广泛领域,在电信、工业自动化和航空航天等实时领域也有成熟应用。随着信息技术的飞速发展,实时系统已经渗透到日常生活的各个层面,包括传统的数控领域、军事、制造业和通信业,甚至连潜力巨大的信息家电、媒体广播系统和数字影像设备都对实时性提出了愈来愈高的要求。
RT-Linux开发者并没有针对实时操作系统的特性而重写Linux的内核,因为这样做的工作量非常大,而且要保证兼容性也非常困难。将linux的内核代码做一些修改,将linux本身的任务以及linux内核本身作为一个优先级很低的任务,而实时任务作为优先级最高的任务。即在实时任务存在的情况下运行实时任务,否则才运行linux本身的任务。TRLinux能够创建精确运行的符合POSIX.1b标准的实时进程;并且作为一种遵循GPL v2协议的开放软件,可以达GPL v2协议许可范围内自由地、免费地使用、修改和再发生。
它是Linux在实时性方面的扩展,采用已获得专利的双核技术:一个微型的RTLinux内核把原始的Linux内核作为它在空闲时的一个线程来运行。这开启了在两个不同的内核层面上――实时的RTLinux内核和常用的,非实时的Linux内核――运行不同程序的新方式。原始的Linux内核通过RTLinux内核访问硬件。这样,所有硬件实际上都是由RTLinux来进行管理的。目前,有两种不同的RTLinux版本:RTLinux/Free(或者RTLinux/Open)和RTLinux/Pro. RTLinux/Pro是一个由FSMLabs开发的完全商业版本的实时linux。RTLinux/Free是一个由社区开发的开源版本。