[转帖]RTLinux的介绍

摘自: http://blog.21ic.com/user1/4132/archives/2009/61579.html

)

作者:王珊珊,
十堰见嵌入式高校
讲师。

  1. RTLinux

  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是一个由社区支付的开源版本。

2.标准Linux影响实时性的编制

幸存的Linux是一个通用的操作系统,即便它接纳了成百上千技巧来拉长系统的运作和反馈速
度,但它实质上不是一个实时操作系统,应用于嵌入式环境中还留存很多的贫乏。具体表现如下:

1.关暂停问题

   
在系统调用中,为了掩护临界区资源,Linux处于根本临界区时,中断会被系统屏蔽,那就意味着如若当前进程正处在临界区,即便它的事先级较低,也会推迟
高优先级的中断请求。在实时应用中,那是一个这一个严重的题材。

2.进程调度问题

   
Linux采取规范的UNIX技术驱动内核是不行抢占的。采取基于固定时间片的可变优先级调度,不论进度的事先级多么低,Linux总会在某个时候分给该
进度一个年华片运行,即便同时有能够运行的高优先级进度,它也非得等待低优先级进度的年月片用完,那对一些必要高优先级进度立即抢占CPU的实时应用是不能满意要求的。

3.时钟问题

Linux为了增强系统的平分吞吐率,将时钟中断的微乎其微间隔设置为10ms,那对于一个
周期性的实时义务,间隔必要小于10ms时,就无法满足实时任务的须求。固然要把时钟
的区间改小以满足周期性的实时义务的内需,由于Linux的进度切换比较费时,时钟中断越频仍,而花在暂停处理上的时光就越来越多,系统的大部光阴是调用进程调度程序举行进程调度而无法拓展正规的拍卖。

3.RTLinux的特点

在Linux
操作系统中,调度算法(其于最大吞吐量准则)、设备驱动、不可中断的系统调用、中断屏蔽以及虚拟内存的应用等要素,都会导致系统在时光上的不足预测性,决
定了Linux操作系统不可能处理硬实时职责。RTLinux为幸免这么些问题,在Linux内核与硬件之间增添了一个虚拟层(平常称作虚拟机),构筑了一个
小的、时间上可预测的、与Linux内核分开的实时内核,使得在里面运行的实时进程知足硬实时性。并且RTLinux和Linux构成一个完备的完全,能够完毕既包涵实时部分又席卷非实时部分的复杂职分。

4.RTLinux的兑现机理

RT-Linux对Linux内核举办改造,将Linux内核工作环境做了部分转移,如
图1所示:

图片 1

图1 RTLinux对Linux内核改变

RTLinux有二种中断:硬中断和软中断。软中断是常规Linux内核中断。它的独到之处在于可无限制地使用
Linux内核调用。硬中断是设置实时Linux的前提。看重于不一样的种类,实时Linux下硬中断的推迟是15μs。

它在Linux内核的下层达成了一个简约的实时内核,而Linux本身作为这几个实时内核
的优先级最低的任务,所有的实时职责的优先级都高于Linux系统本身的以及Linux系统下的貌似义务。RTLinux的系统布局如图2所示。

图片 2

图2 RTLinux的种类布局

RTLinux的筹划思想是:应用硬件的实时约束将实时程序分割成短小简单的有些,较大片段承担较复杂的职责。按照这一标准,将应用程序分为硬实时和软实时(即程序)2个部分。

年轻力壮时的贯彻:

硬件实时部分被看成实时职务来实施,并从外部设备拷贝数据到一个叫做实时出名管道(RTFIFO)的特种I/O端
口;程序紧要部分作为标准Linux进度来施行。它将从RTFIFO中读取数据,然后突显并蕴藏到文件中,实时部分将被写入内核。设计实时有名管道是为着
使实时任务在读和写多少时不被打断。图3所示的是RTFIFO结构图。

 

图片 3

图3 RT-FIFO结构图

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对网络和数据库的雄强支撑成效。
 软实时的已毕:

RTLinux通过一个高效的、可超过的实时调度主题来完善接管中断,并把Linux作
为此实时基本的一个优先级最低的经过运行。当有实时义务急需处理时,RTLinux运行实时职分;无实时职务时,RTLinux运行Linux的非实时进程。其系统结构见图1。

 

图片 4

图4 RTLinux系统结构图

在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也支撑任何的调度策略,如最短时限
伊始调度(EDP)、确定周期调度(RM)(周期段的实时任务具有高的优先级)。RTLinux将职分调度器本身设计成一个可装载的内核模块,用户可以根据自己的实际上必要,编写适合自己的调度算法。

   对于一个操作系统而言,精确的定时机制尽管可以增强职务调度器的成效,但会增多
CPU处理定时中断的光阴支出。RTLinux对时间精度和时钟中断处理的年华支出举行了折中考虑。不是像Linux那样将8254定时器设计成10ms
爆发一回定时中断的定位形式,而是将定时器芯片安装为极端计时中断格局。依照如今的经过的时日须要,不断调整定时器的定时间隔。那样不光可以赢得高定时精
度,同时暂停处理的开销又不大。

5.RTLinux的首要性作用

RTLinux提供了一整套对康泰时经过的支撑函数集。在此,对在嵌入式系统中的已毕加以演说。

a.中断仿真

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

当要求关中断时,就将仿真器中的一个变量置0。不论曾几何时若有暂停暴发,仿真器就反省这一个变量。纵然是1(LINUX
已开中断),就马上调用LINUX的中止处理程序;否则,LINUX中断被明令禁止,中断处理程序不会被调用,而是在保留着富有挂起暂停的音信的变量的附和地点1。当LINUX重新开中断,所有挂起暂停的处理程序都会被实践。那种虚伪艺术得以称之为”软中断”。

b.实时职责

实时职务是在一个由中央控制的调度程序的调度下实施的用户定义的顺序。

RT-LINUX最初将实时职责规划成ELF格式的靶子文件。这一设计方案的最大弱点就是性质相比差。原因在于,第
一,486的缓存是虚拟的。所以每当页表目录的基址寄存器改变时,TLB(转换后备缓冲器)就会失灵。由于实时职责的上下文转换频仍,所以TLB的高频失
效就导致系统性能的惨重下落。第二,486的掩护级别变换耗时不少。比如,陷入更高级别时索要71个巡回,而其他指令一般少于10个巡回。

涸泽而渔的措施就是应用可加载模组技术,所有的实时任务都同处于一个地方空间-内核地址空间,不仅幸免了多次的TLB失
效,同时也免去了更换敬重级其余损耗,而且义务转换也变得非常简单。

c.进度调度

实时系统的历程调度的要害职务就是满意实时任务在时刻上的须求。调度算法的档次众多,没有一个政策是放之所在而皆准
的,因而利用哪个种类算法要在于具体使用。

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

RT-LINUX自带的是一个根据优先数的抢占式调度程序。此调度程序将LINUX当作具有最低优先数的实时义务。
由此,LINUX只在实时系统无其余实时职责是才运行。在从LINUX切换来实时职责时,系统记下软中断的景况并严令禁止软中断。在切换回来实,再復苏软中断
的情景。

d.时钟

调度程序须求规范的时钟才能准确操作。调度日常是在特定的天天举办任务切换。时钟的不是会滋生预约调度的谬误,导致
爆发被称为职责发表抖动的情状。那是一种应该尽量幸免的不良现象。

RT-LINUX的解决办法是,将IBM PC包容机中的时钟芯片Intel8254装置为中断开启终极计数形式。在那种格局下,精度可以高达1飞秒。那样在下降中断处理的震慑的同时,得到了较高的钟表精度。

e.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

发表评论

电子邮件地址不会被公开。 必填项已用*标注