RTLinux的介绍

news2024/12/28 3:06:09

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 RTLinux对Linux内核改变

RTLinux有两种中断:硬中断和软中断。软中断是常规Linux内核中断。它的优点在于可无限制地使用Linux内核调用。硬中断是安装实时Linux的前提。依赖于不同的系统,实时Linux下硬中断的延迟是15μs。

它在Linux内核的下层实现了一个简单的实时内核,而Linux本身作为这个实时内核的优先级低的任务,所有的实时任务的优先级都高于Linux系统本身的以及Linux系统下的一般任务。RTLinux的体系结构如图2所示。

图2 RTLinux的体系结构

RTLinux的设计思想是:应用硬件的实时约束将实时程序分割成短小简单的部分,较大部分承担较复杂的任务。根据这一原则,将应用程序分为硬实时和软实时(即程序)2个部分。

硬实时的实现:

硬件实时部分被作为实时任务来执行,并从外部设备拷贝数据到一个叫做实时有名管道(RTFIFO)的特殊I/O端口;程序主要部分作为标准Linux进程来执行。它将从RTFIFO中读取数据,然后显示并存储到文件中,实时部分将被写入内核。设计实时有名管道是为了使实时任务在读和写数据时不被阻塞。图3所示的是RTFIFO结构图。

图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 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兼容机中的时钟芯片Intel 8254设置为中断开启终端计数模式。在这种模式下,精度可以达到1毫秒。这样在降低中断处理的影响的同时,获得了较高的时钟精度。

由于标准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

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。(点击找小助理领取)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于LLVM的AFL分析

简介 Fuzzing是指通过构造测试输入,对软件进行大量测试来发现软件中的漏洞的一种模糊测试方法。当前大多数远程代码执行和特权提升等比较严重的漏洞都是使用Fuzzing技术挖掘的,Fuzzing技术被证明是当前鉴别软件安全问题方面最强大测试技术。 然而Fuzzin…

Linux Shell 脚本的10个高频面试问答

Linux 的浩瀚无垠,使人总能每次都提交与众不同的内容。这些内容不仅对他们的职业生涯很有用,同时也让他们增长知识。在此,我们就尝试这么去做,至于能取得多大的成功,就由我们的读者朋友们来判断吧。 在此,…

CopyOnWriteArrayList真的线程安全吗?

前几天刷博客时,无意中看到一篇名为《CopyOnWriteArrayList真的完全线程安全吗》博客。心中不禁泛起疑问,它就是线程安全的啊,难道还有啥特殊情况? 我们知道CopyOnWrite的核心思想正如其名:写时复制。在对数据有修改操…

只要背着电脑,他可以去任何地方

12月是微软全球开发者月,MSDN 微软开发者社区将在此期间推出特别专栏《技术狂旅》,解读这些技术狂热爱好者的个人经历,循着他们的人生旅程看到我们自己的影子,希望能带给你一些启发或激励,一起探寻自身更多的可能性。 …

Android三种数据存储的方式

文章目录Android数据存储技术持久化技术文件存储将数据存储到文件当中示例_将数据存储到文件当中示例_从文件当中读取数据SharedPreferences存储将数据存储到SharedPreferences1.Context类中getSharedPreferences()方法2.Activity类中的getSharedPreferences()方法往SharedPref…

html+css鼠标悬停发光按钮![HTML鼠标悬停的代码]使用HTML + CSS实现鼠标悬停的一些奇幻效果!

源码如下: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <style> *{ /* 初始化 清除页面元素得内外边距 */ paddin…

【HTML期末作业】大学生抗疫感动专题网页设计作业 抗疫最美逆行者网页 致敬疫情感动人物网页设计制作

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

LIN总线入门

文章目录 前言一、LIN简介1.1 什么是LIN&#xff1f;1.2 为什么要LIN总线1.3 LIN的发展历史1.4 LIN子网1.5 LIN节点1.6 LIN总线特点 二、LIN的协议层2.1 帧结构2.1.1 同步间隔段(Break Field)2.1.2 同步段(Sync Byte Field)2.1.3 受保护 ID 段(Protected Identifier Field)2.1.…

SpringBoot3.x中spring.factories功能被移除的解决方案

背景笔者所在项目组在搭建一个全新项目的时候选用了SpringBoot3.x&#xff0c;项目中应用了很多SpringBoot2.x时代相关的第三方组件例如baomidou出品的mybatis-plus、dynamic-datasource等。在配置好相关依赖、最小启动类和配置之后&#xff0c;发现项目无法启动。于是根据启动…

万字大章_标题、段落、链接、图像等_HTML入门必备基础

万字大章_HTML入门必备基础HTML篇_第四章、HTML基础一、标题二、段落三、链接3.1文本超链接3.2锚点链接3.3功能性链接四、图像4.1 图像标签&#xff08;<img>&#xff09;和源属性&#xff08;Src&#xff09;4.2 alt属性4.3title属性4.4、设置图像4.4.1设置图像的宽度和…

awk命令的使用

1、获取根分区剩余大小 先用df -h命令查看磁盘&#xff0c;确定我们需要获取字段的位置 再使用awk命令获取此字段 df -hdf -h | awk NR6 {print $4}2、获取当前机器ip地址 ifconfig | awk NR2 {print $2}3、统计出apache的access.log中访问量最多的5个IP 使用awk {print $…

Flink CDC-2.3版本概述

问题导读&#xff1a;1、Flink CDC 2.3 版本有哪些重大改进和核心特性&#xff1f; 2、Flink CDC 2.3 版本中MySQL CDC 连接器有哪些优化&#xff1f; 3、Flink CDC 2.4 版本有哪些规划&#xff1f;01 Flink CDC 简介Flink CDC [1] 是基于数据库的日志 CDC 技术&#xff0c;实现…

HTML5期末大作业:基于HTML+CSS+JavaScript校园文化企业网站模板【学生网页设计作业源码】

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

5个拿来就能用的整人代码脚本

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 整蛊代码脚本一、你的电脑正在被攻击&#xff01;&#xff01;&#xff01;二、CMD炸弹三、无限弹窗四、启动项关机脚本五、舔狗代码一、你的…

毕业后,我的第一辆车

你好&#xff0c;我是阿秀。从学校毕业的时候&#xff0c;我身上差不多有将近12W块钱&#xff0c;有些是自己慢慢存的&#xff0c;有些是在校期间做私活兼职赚的&#xff1a;聊聊我读研期间做过的一些私活和兼职六月毕业后我和我对象去北京玩了几天&#xff0c;去天安门看了毛爷…

微信支付配置

目标&#xff1a;需要生成一个公钥和秘钥配对。放在代码中安全请求。 参考文档&#xff1a;https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay3_1.shtml https://kf.qq.com/faq/161222NneAJf161222U7fARv.html 一、下载工具 点击下载证书工具&#xff1b;下载…

毕业设计 大数据电商用户行为分析 -python 大数据

文章目录0 前言一.背景描述二.项目背景三.数据来源四.提出问题五.理解数据六.数据清洗6.1缺失值处理6.2查看数据6.3一致化处理6.4查看data_user数据集数据类型&#xff1a;6.5数据类型转换6.6异常值处理七.用户行为分析7.1日访问量分析7.2小时访问量分析7.3不同行为类型用户PV分…

【JavaScript】分支结构和循环结构

目录 一、流程控制 二、分支结构 1. if语句 2. if…else语句 3. if…else if语句 4. switch语句 5. 条件表达式构成的选择结构 三、循环结构 1.while循环 2. do-while循环 3. for循环 3.1 for循环转换为while循环 3.2 断点调试 4. 循环嵌套 一、流程控制 流程控…

知识点2--Docker的安装

上一节知识点说了&#xff0c;一般使用Docker都是在Linux上&#xff0c;Windows有VMware就够了&#xff0c;所以本篇知识点同理带大家在CentOS Linux上安装Docker&#xff0c;但是要知道一个事情&#xff0c;CentOS 6系列的系统由于官方yum的关闭而处于不推荐使用的系统&#x…

微服务框架 SpringCloud微服务架构 16 SpringAMQP 16.9 消息转换器

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构16 SpringAMQP16.9 消息转换器16.9.1 一个案例16.9.2 消息转换器16.9.3 总…