大数跨境

每天了解一个物联网操作系统(八)(RTLinux)

每天了解一个物联网操作系统(八)(RTLinux) 数组智控产业发展科技院
2021-07-27
4
导读:传统的Linux在内核基础上经过缩减可以移植到嵌入式操作系统上,后来很多商业公司和开源组织对Linux系统进


传统的Linux在内核基础上经过缩减可以移植到嵌入式操作系统上,后来很多商业公司和开源组织对Linux系统进行了一番改造,使其更加适用于嵌入式系统和物联网应用的需求,就是将其修改为实时操作系统。


RTLinux(Real-Time Linux)是基于Linux内核修改的一种实时操作系统。它是由新墨西哥矿业及科技学院的V. Yodaiken开发的。现在已被专注嵌入式操作系统的WindRiver公司所收购。


在Linux系统基础上发展起来的面向物联网应用的系统项目非常多,Linux碎片化的情形也比较严重。至于哪个版本的Linux系统会成为主流,取决于后续物联网应用的发展趋势、应用场景,以及支持整个生态的开发资源建立。


到目前为止,RTLinux已经成功地应用于航天飞机的空间数据采集、科学仪器测控和电影特技图像处理等领域,在电信、工业自动化和航空航天等实时领域也有成熟应用。随着信息技术的飞速发展,实时系统已经渗透到日常生活的各个层面,包括传统的数控领域、军事、制造业和通信业,甚至连潜力巨大的信息家电、媒体广播系统和数字影像设备领域都对实时性提出了愈来愈高的要求。


RTLinux的开发者并没有针对实时操作系统的特性而重写Linux内核,因为这样做的工作量非常大,而且要保证兼容性也非常困难。他们将Linux的内核代码做了一些修改,将Linux本身的任务及Linux内核本身作为一个优先级很低的任务,而实时任务作为优先级最高的任务。即在实时任务存在的情况下运行实时任务,否则,运行Linux本身的任务。RTLinux能够创建精确运行的符合POSIX.1b标准的实时进程;并且作为一种遵循GPL v2协议的开放软件,可以在GPL v2协议许可范围内自由、免费地使用、修改和再发生。


RTLinux是Linux在实时性方面的扩展,采用已获得专利的双核技术:一个微型的RTLinux内核把原始的Linux内核作为它在空闲时的一个线程来运行。这开启了在两个不同的内核层面上(实时的RTLinux内核和常用的非实时的Linux内核),运行不同程序的新方式。原始的Linux内核通过RTLinux内核访问硬件。这样,所有硬件实际上都是由RTLinux来进行管理的。有两种不同的RTLinux版本:RTLinux/Free(或者RTLinux/Open)和RTLinux/Pro。RTLinux/Pro是一个由FSMLabs开发的完全商业版本的实时Linux, RTLinux/Free是一个由社区开发的开源版本。


RTLinux的设计思想是:应用硬件的实时约束将实时程序分割成短小、简单的部分,较大部分承担较复杂的任务。根据这一原则,将应用程序分为硬件实时部分和程序两个部分。硬件实时部分被作为实时任务来执行,并从外部设备复制数据到一个叫做实时(RTFIFO)的特殊I/O端口,程序主要部分作为标准Linux进程来执行。它将从RTFIFO中读取数据,然后显示并存储到文件中,实时部分将被写入内核。设计实时FIFO是为了使实时任务在读和写数据时不被阻塞。


RTLinux通过对标准Linux内核进行改造,将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对Linux内核的改变


这里体现了RTLinux设计过程中的原则:在实时模块中的工作量尽量少,如果能在Linux中完成而不影响实时性能的话,就尽量在Linux中完成。因此,RTLinux内核可以尽量做得简单。在RTLinux内核中,不应该等待资源,也不需要使用共享旋转锁。实时任务和Linux进程之间的通信也是非阻塞的,从来不用等待进队列和出队列的数据。RTLinux将系统和设备的初始化交给了Linux来完成,对动态资源的申请和分配也交给了Linux。


RTLinux使用静态分配的内存来完成硬件实时任务,因为在没有内存资源的时候,被阻塞的线程是不可能具有实时能力的。


RTlinux是源代码开放的具有硬实时特性的多任务操作系统,是通过底层对Linux实施改造的产物。通过在Linux内核与硬件中断之间增加可抢先的实时内核,把标准的Linux内核作为实时内核的一个进程与用户进程一起调度,标准的Linux内核的优先级最低,可以被实时进程抢断。正常的Linux进程仍可以在Linux内核上运行,这样既可以使用标准分时操作系统,即Linux的各种服务,又能提供低延时的实时环境。


  1. RTLinux的特点


在Linux操作系统中,调度算法(基于最大吞吐量准则)、设备驱动、不可中断的系统调用、中断屏蔽及虚拟内存的使用等因素,都会导致系统在时间上的不可预测性,决定了Linux操作系统不能处理硬实时任务。RTLinux为避免这些问题,在Linux内核与硬件之间增加了一个虚拟层(通常称作虚拟机),构筑了一个小的、时间上可预测的、与Linux内核分开的实时内核,使得在其中运行的实时进程满足硬实时性。并且RTLinux和Linux构成了一个完备的整体,能够完成既包括实时部分又包括非实时部分的复杂任务。


通过前面的介绍我们知道,RTLinux有两种中断,即硬中断和软中断。软中断是常规Linux内核中断,其优点在于可无限制地使用Linux内核调用。硬中断是安装实时Linux的前提。依赖于不同的系统,实时Linux下硬中断的延迟是15µs。


RTLinux的体系结构


2.硬实时的实现


RTLinux拥有两个内核。


RTLinux将标准Linux内核作为简单实时操作系统(RTOS、子内核)里优先权最低的线程来运行,从而避开了Linux内核性能的问题。这就意味着有两组单独的API,一个用于Linux环境,另一个用于实时环境。此外,为保证实时进程与非实时Linux进程不顺序进行数据交换,RTLinux引入了RT-FIFO队列。RT-FIFO被Linux视为字符设备,最多可达150个,分别命名为/dev/rtf0, /dev/rtf1…/dev/rtf63。最大的RT-FIFO数量在系统内核编译时设定。



RT-FIFO结构图


RTLinux程序运行于用户空间和内核态两个空间中。RTLinux提供了应用程序接口,借助这些API函数将实时处理部分编写成内核模块,并装载到RTLinux内核中,运行于RTLinux的内核态中。非实时部分的应用程序则在Linux下的用户空间中执行。这样可以发挥Linux对网络和数据库强大的支持功能。


3.软实时的实现


RTLinux通过一个高效、可抢先的实时调度核心来全面接管中断,并把Linux作为此实时核心的一个优先级最低的进程来运行。当有实时任务需要处理时,RTLinux运行实时任务;当无实时任务时,RTLinux运行Linux的非实时进程。


RTLinux在默认的情况下采用优先级的调度策略,即系统调度器根据各个实时任务的优先级来确定执行的先后次序。优先级高的先执行,优先级低的后执行,这样就保证了实时进程的迅速调度。同时,RTLinux也支持其他的调度策略,如最短时限最先调度(EDP)、确定周期调度(RM)(周期段的实时任务具有高的优先级)。RTLinux将任务调度器本身设计成一个可装载的内核模块,用户可以根据自己的实际需要,编写适合自己的调度算法。


对于一个操作系统而言,精确的定时机制虽然可以提高任务调度器的效率,但会增加CPU处理定时中断的时间开销。RTLinux对时间精度和时钟中断处理的时间开销进行了折中考虑。不是像Linux那样将8254定时器设计成10ms产生一次定时中断的固定模式,而是将定时器芯片设置为终端计时中断方式。根据最近的进程时间需要,不断调整定时器的定时间隔,不仅可以获得高定时精度,同时中断处理的开销又最小。



RTLinux系统结构图



【声明】内容源于网络
0
0
数组智控产业发展科技院
以AI技术为底层能力,聚焦智慧园区、城市公共安全、数智警务、健康医疗、能源电力、科研实验及平安校园等领域,提供从感知到决策的全流程软硬件一体化的国产装备智能体产品解决方案。
内容 986
粉丝 0
数组智控产业发展科技院 以AI技术为底层能力,聚焦智慧园区、城市公共安全、数智警务、健康医疗、能源电力、科研实验及平安校园等领域,提供从感知到决策的全流程软硬件一体化的国产装备智能体产品解决方案。
总阅读1.6k
粉丝0
内容986