注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

记录创意的火花

天天学习,好好向上

 
 
 

日志

 
 

RTlinux性能简介  

2009-12-10 14:15:08|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这是由美国墨西哥理工学院开发的嵌入式Linux操作系统。到目前为止,RT-Linux已经成功地应用于航天飞机的空间数据采集、科学仪器测控和电影特技图像处理等广泛领域。RT-Linux开发者并没有针对实时操作系统的特性而重写Linux的内核,因为这样做的工作量非常大,而且要保证兼容性也非常困难。为此,RT-Linux提出了精巧的内核,并把标准的Linux核心作为实时核心的一个进程,同用户的实时进程一起调度。这样对Linux内核的改动非常小,并且充分利用了Linux下现有的丰富的软件资源。

RT-LINUX原理及应用

1、引言

在RT-LINUX出现之前,在为实时应用选择系统平台的时候,人们大抵只有两种选择,要么使用DOS并自己编写所有必要的驱动程序,要么就得购买专用的实时系统。前者不仅费时费力,其性能也难以令人满意。而后者性能虽佳,其价格却高得让人难以接受。

RT-LINUX的出现解决了这一问题,它为实时应用领域的研究与开发提供了一个物美价廉的完备的操作系统平台。凭着自身的技术特色,借助于LINUX的强大功能,RT-LINUX下开发出的实时应用有着不俗的表现。

RT-LINUX是在LINUX基础上改写的具有硬实时处理能力的实时操作系统。该系统主要是由美国新墨西哥州的矿业技术学院于1996年研究开发出来的。最初这个项目的目的有两个,一是设计出一个非私有的可以用来操控科学仪器和机器人的工具;二是利用RT-LINUX来进行实时和非实时操作系统设计的研究工作。

在RT-LINUX中,实时任务的运行和中断的处理都与原LINUX并存于同一台计算机上,它们可以在任何需要的时候获得处理机,而不必理会当时LINUX正在做什么。它所建立的是一个直接面对处理器的小内核,此内核独立于原LINUX的标准内核,并且拥有自己的调度程序。原LINUX内核在这个小内核的基础上以最低的优先权与其它实时任务分享处理器。

在一台普通的x86计算机上,RT-LINUX的最坏响应时间可达15毫秒以下,而周期性实时任务的周期可以达到在25毫秒以内。这些性能指标是与硬件的性能相关的,也就是说,如果升级硬件,RT-LINUX的性能也会随之提升。

这里需要说明的是,标准LINUX也为实时任务提供毫秒级的调度精度,但这是一种软实时,因为标准LINUX的设计初衷并未考虑提供亚毫秒级的精度以及可靠的时限保证

2、RT-LINUX的原理

RT-LINUX把LINUX的系统内核当作在一个小的实时系统上运行的一个任务来对待。事实上,LINUX被当作实时系统的空闲任务,也就是说,只有当系统中没有任何实时任务需要运行的时候,才来运行它。LINUX的任务再也不能够通过封锁中断来避免被抢占。实现这一目的的技术关键就在于对中断控制硬件的软件仿真。当LINUX通知特定硬件机构禁止中断的时候,实时内核将截获这一请求,将其记录然后返回给LINUX。LINUX等于被"欺骗"了,这样LINUX就不能真正地禁止硬件中断。所以不管当前LINUX处于什么状态,它都不能延长实时系统的中断响应时间。

当一个中断产生时,RT-LINUX将首先截获它并决定该如何处理。如果该中断有相应的实时处理程序,该程序就被调用。如果没有或者该程序表示与LINUX共同处理此中断,中断就被挂起。然后在LINUX请求开放中断时,挂起的中断就被仿真,软件中断送到LINUX后,LINUX的响应中断处理程序就被调用,同时硬件中断被重新开放。

不论LINUX处于何种状态,核心态也好,用户态也罢,或者当LINUX正在封锁中断或正在开放中断,或者陷于死锁状态,实时系统都能够响应外界的中断。

RT-LINUX自带一个完全抢占、静态优先数的缺省调度程序,它把LINUX的任务设为最低的优先数。如果实时任务消耗掉全部的处理器时间,LINUX的任务就得不到一点CPU时间来运行,系统看起来就好像挂起。

 

3、RT-LINUX的实现

3-1、中断仿真

在中断控制硬件与LINUX核心之间放置一个软件仿真层。具体做法是,在LINUX源码中出现cli、sti和iret的所有地方都用仿真宏:S_CLI、S_STI和S_IRET来替换。所有的硬件中断就都被仿真器所截获。

当需要关中断时,就将仿真器中的一个变量置0。不论何时若有中断发生,仿真器就检查这个变量。如果是1(LINUX已开中断),就立即调用LINUX的中断处理程序;否则,LINUX中断被禁止,中断处理程序不会被调用,而是在保存着所有挂起中断的信息的变量的相应位置1。当LINUX重新开中断,所有挂起中断的处理程序都会被执行。这种仿真方式可以称之为"软中断"。

3-2、实时任务

实时任务是在一个由核心控制的调度程序的调度下执行的用户定义的程序。

RT-LINUX最初将实时任务设计成ELF格式的目标文件。这一设计方案的最大缺点就是性能比较差。原因在于,第一,486的缓存是虚拟的。所以每当页表目录的基址寄存器改变时,TLB(转换后备缓冲器)就会失效。由于实时任务的上下文转换频繁,所以TLB的频繁失效就导致系统性能的严重下降。第二,486的保护级别变换耗时不少。比如,陷入更高级别时需要71个循环,而其它指令一般少于10个循环。

解决的办法就是使用可加载模组技术,所有的实时任务都同处于一个地址空间-内核地址空间,不仅避免了频繁的TLB失效,同时也消除了变换保护级别的消耗,而且任务转换也变得相当容易。

3-3、进程调度

实时系统的进程调度的主要任务就是满足实时任务在时间上的要求。调度算法的种类很多,没有一个策略是放之四海而皆准的,因此采用哪种算法要取决于具体应用。

RT-LINUX采用的方法是允许用户编写自己的调度程序,并可以编译成模组的形式。这样就可以方便地试验不同的策略和算法对于某一特定应用的适合性,从中选出最优。

RT-LINUX自带的是一个基于优先数的抢占式调度程序。此调度程序将LINUX当作具有最低优先数的实时任务。因此,LINUX只在实时系统无任何实时任务是才运行。在从LINUX切换到实时任务时,系统记下软中断的状态并禁止软中断。在切换回来实,再恢复软中断的状态。

3-4、时钟

调度程序需要精确的时钟才能准确操作。调度通常是在特定的时刻进行任务切换。时钟的偏差会引起预定调度的偏差,导致产生被称为任务发布抖动的现象。这是一种应该尽量避免的不良现象。

RT-LINUX的解决办法是,将IBM PC兼容机中的时钟芯片Intel 8254设置为中断开启终端计数模式。在这种模式下,精度可以达到1毫秒。这样在降低中断处理的影响的同时,获得了较高的时钟精度。

3-5、IPC

由于标准LINUX核心可以被实时任务在任意时刻抢占,所以实时任务无法安全地调用LINUX的程序。但是总要有一个信息交换的机制。

在RT-LINUX中所用的信息交换方式是RT-FIFO(实时队列)。它与UNIX的管道非常相似,都是一个无结构的数据流。通过RT-FIFO,LINUX的进程之间,实时进程之间,以及LINUX的核心与实时进程之间可以交换信息。

对于一个普通的进程来说,RT-FIFO就是一个特殊的字符文件。这些文件必须自建:

# for i in 0 1 2 3;  do mknod /dev/rtf$i c 63 $i; done

4、RT-LINUX的应用

4-1、应用程序结构

编制基于RT-LINUX的实时应用程序有一个基本宗旨,那就是,编制出的实时应用程序最好是实现硬实时的部分要尽量小且简洁,只包括与时间直接相关的代码,因为这一部分通常包含与实时硬件的底层交流,对于时间要求苛刻。

鉴于这样的想法,一般把应用程序分成两块,一块是硬实时部分,以模组方式实现,运行时作为实时任务,具有比LINUX高的优先权,负责从硬件设备将实时应用中产生的或是需要处理的信息和数据取出,然后送入RT-FIFO中。另一块是用户部分,因其运行于用户空间而得名。这一部分编程的比重较大,使用通常的编程方式实现,运行时作为LINUX下的一个普通进程,负责从RT-FIFO的另一端取出信息和数据进行处理,分析、显示以及与其它LINUX进程交互。

............

5、结束语

RT-LINUX不仅仅是将分时系统改写为一个具有硬实时能力的实时操作系统的成功尝试,更具有学术价值的是,它提出了一种新的架构操作系统内核的方法,可以应用于以后的操作系统的设计中。

  评论这张
 
阅读(1246)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017