[工业互联-15]:Linux操作与实时Linux操作系统RT Linux( PREEMPT-RT、Xenomai)

news2024/11/17 7:31:30

目录

第1章  Linux操作系统

1.1 什么是Linux操作系统 

1.2 Linux操作系统架构

 1.3 常见Linux操作系统发行版本

第2章 实时Linux操作系统

2.1 实时性要求

2.2 实时性实现技术的基本思想

2.2 常见发行版方案

2.3 Xenomai和PREEMPT-RT比较

第3章 PREEMPT-RT

3.1 概述

3.2 PREEMPT-RT Patch详解

3.2.1. PREEMPT-RT的思想

3.2.2. PREEMPT-RT特性

3.2.3.  PREEMPT-RT的主要改动

3.2.3.1临界区抢占

3.2.3.2中断处理线程化

3.2.3.3Spinlock和Semaphore支持优先级继承

3.2.3.4降低延迟的其他措施

第4章 Xenomai

4.1 简介

4.2 双调度器架构


第1章  Linux操作系统

1.1 什么是Linux操作系统 

Linux操作系统是一种开源的、基于Unix思想的操作系统。

它具有以下特点:

  1. 开源:Linux的核心代码是公开的,任何人都可以查看、修改和分发它。这使得Linux具有高度的灵活性和可定制性,并且能够以不同的方式满足用户的需求。

  2. 多用户和多任务:Linux支持多用户同时登录,并能够处理多个任务,使得多个用户可以同时共享同一台计算机的资源。

  3. 稳定性:Linux被广泛认为是一个非常稳定的操作系统。它能够处理长时间运行的任务,具有较低的系统崩溃率和出错率。

  4. 安全性:相对于其他操作系统,Linux在安全性方面更有优势。由于其开源特性,许多开发者可以共同发现和修补潜在的安全漏洞,从而提高安全性。

  5. 可移植性:Linux可以在各种不同的硬件架构上运行,包括个人计算机、服务器、嵌入式设备以及移动设备等。

  6. 丰富的软件支持:Linux拥有庞大的开源软件生态系统,用户可以免费获取各种应用程序和工具,满足各种需求。

总的来说,Linux是一种灵活、稳定、安全且具有强大功能的操作系统,被广泛应用于服务器、个人计算机、嵌入式设备和科学研究领域等。

1.2 Linux操作系统架构

 1.3 常见Linux操作系统发行版本

基于标准的Linux操作系统内核,出现了各种各样的Linux发行版本。

以下是一些常见的Linux操作系统发行版本

  1. Ubuntu:Ubuntu是一个基于Debian的开源Linux操作系统,具有良好的用户界面和易于使用的特点。它广泛用于个人计算机和服务器环境。

  2. Debian:Debian是一个完全自由的开源Linux发行版,具有稳定性和安全性的特点。它提供了大量的软件包和工具,支持多种硬件架构。

  3. CentOS:CentOS是基于Red Hat Enterprise Linux(RHEL)源代码构建的开源克隆版本。它被广泛应用于服务器环境,并提供长期支持和稳定性。

  4. Fedora:Fedora是由Red Hat公司赞助的一个社区驱动的Linux操作系统。它注重最新的软件和技术,适用于桌面和服务器环境。

  5. openSUSE:openSUSE是一个基于SUSE Linux Enterprise的开源Linux发行版。它提供了易于使用和配置的图形界面和强大的管理工具

  6. Arch Linux:Arch Linux是一个轻量级的、面向技术用户的Linux操作系统,提供了滚动发布和自定义的软件包管理系统。

  7. Linux Mint:Linux Mint是一个基于Ubuntu的Linux发行版,注重易用性和用户友好的界面。它提供了Cinnamon、MATE、Xfce和KDE等不同桌面环境的版本。

  8. Kali Linux:Kali Linux是一个专门用于网络安全和渗透测试的Linux发行版。它包含了大量用于安全测试的工具。

除了上述列举的Linux操作系统,还有许多其他的Linux发行版,如Gentoo、Manjaro、Elementary OS等。每个Linux发行版都有其独特的特点和目标受众,可以根据个人需求和偏好选择适合的操作系统。

第2章 实时Linux操作系统

2.1 实时性要求

实时Linux是针对实时应用需求进行优化的Linux内核或发行版。

它旨在提供实时性能,以满足对于实时任务的严格要求,包括三大实时性要求:

  • 可预测性
  • 可靠性
  • 低延迟

2.2 实时性实现技术的基本思想

标准的Linux内核中不可中断的系统调用中断屏蔽等因素,都会导致系统在时间上的不可预测性,对硬实时限制没有保证。

目前,针对 real-time Linux 的修改有两种成功的方案:

(1)单调度器

一是直接修改Linux 内核,使其直接具有 real-time 能力;

(2)双调度器

另一是先运行一个 real-time 核心,然后将Linux 内核作为该 real-time 核心的 idle task来运行。

前者称为 PREEMPT-RT kernel,后者称为 dual kernel(如RTLinux等)。

(3)采用的常见技术包括:

  • 优先级调度
  • 可抢占调度
  • 分时多任务调度

2.2 常见发行版方案

下面是一些常见的实时Linux解决方案:

  1. PREEMPT-RT:PREEMPT-RT是一个基于Linux内核的实时补丁,也被称为Real-Time(RT)补丁。它通过增加内核的可抢占性,使得Linux内核能够实现实时性能。PREEMPT-RT补丁提供了可配置的实时选项,可以根据应用程序的需求进行调整。

  2. Xenomai:Xenomai提供了一个实时框架,为Linux操作系统添加了实时性能。它支持具有硬实时软实时要求的应用程序,并通过分时多任务抢占式调度来提供可预测性。

  3. RTAI(Real-Time Application Interface):RTAI是一个开源实时应用程序接口,提供了类似API的接口和实时任务调度。它在Linux内核上运行,并通过插入抢占式调度器来实现实时性能。

  4. AdaCore GNAT:AdaCore GNAT是一个Ada语言的开发环境,它提供了Ada编译器和运行时环境,针对实时和嵌入式应用进行了优化。它可以与各种实时Linux解决方案搭配使用。

这些实时Linux解决方案可用于嵌入式系统、工控系统、机器人控制、实时数据采集等需要严格的实时性能的应用领域。

但需要注意的是,实时Linux解决方案的配置和使用需要更高的技术要求和维护成本,以确保系统的稳定性和可靠性。因此,选择合适的实时Linux解决方案时,应根据具体应用需求和技术要求进行评估和选择。

2.3 Xenomai和PREEMPT-RT比较

Xenomai和PREEMPT-RT都是用于将Linux内核转变为实时操作系统的解决方案,并具有类似的目标,但它们在实现方式和功能上有一些区别。

  1. 实时性能:PREEMPT-RT补丁通过可抢占内核和实时调度器来提供实时性能。它改善了Linux内核的抢占性能,降低了实时任务的延迟(实时性任务可以抢占非实时性任务,快速影响是优先考虑=》最小的延时)。而Xenomai则通过使用分时多任务和针对实时应用程序进行的专用调度算法来提供可预测性和可靠性(可预测性是主要考虑的目标 =》稳定的延时)

  2. 架构:PREEMPT-RT补丁是基于标准Linux内核的优化补丁,而Xenomai则是一个与标准Linxu调度程度相互独立的并行的、实时调度框架,需要与Linux内核进行配合。Xenomai通过插入一个称为Cobalt的内核模块来添加实时功能,该模块与PREEMPT-RT兼容。

  3. 应用程序支持:Xenomai提供了一套丰富的、专用的、实时应用程序接口(API),如native、posix和skin等,为开发者提供了多样化的选择。它还支持多种应用程序编程语言,如C、C++和Ada等。而PREEMPT-RT主要是对Linux内核的优化,没有提供额外的应用程序开发接口。

  4. 使用复杂性:相对而言,PREEMPT-RT对于配置和使用的要求相对较低,而Xenomai则需要更多的配置和调优。Xenomai的配置和使用可能较为复杂,但它提供了更高度定制化和可预测的实时性能。

选择使用PREEMPT-RT还是Xenomai取决于具体的应用场景和需求。如果对于实时性能要求相对较低,且希望保持较简单的配置和开发过程,PREEMPT-RT可能更合适。而对于对实时性能和可预测性有较高要求,且愿意投入更多配置和调优工作的情况下,Xenomai可能是更好的选择。

第3章 PREEMPT-RT

3.1 概述

PREEMPT-RT(Real-Time)是一个针对Linux内核的实时性能优化补丁。

它的目标是将Linux内核转变为可用于实时应用程序的实时操作系统。

PREEMPT-RT补丁的主要特点包括:

  1. 可抢占内核:PREEMPT-RT补丁增加了内核的可抢占性,使得在内核执行期间能够更容易地中断并切换到更高优先级的任务。这样可以降低实时任务的延迟,并提高系统响应速度。

  2. 实时调度器:PREEMPT-RT补丁引入了实时调度器,用于根据任务的优先级和截止时间进行任务调度。它提供了多种调度算法,包括先进先出(FIFO)和循环率达(Rate Monotonic)等。

  3. 内核锁机制优化:PREEMPT-RT补丁对内核的锁机制进行了优化,以避免锁冲突和死锁。这可以提高多线程应用程序的并发性能,并减少竞争条件。

  4. 中断处理优化:PREEMPT-RT补丁改进了中断处理机制,减少了中断处理的延迟,并提高了实时任务的响应能力。

使用PREEMPT-RT补丁需要进行一些特定的内核配置和编译。它可以与常见的Linux发行版(如Ubuntu、Debian、Fedora等)一起使用,并为实时应用提供较低的延迟和可预测的性能。

需要注意的是,PREEMPT-RT并非完全硬实时(Hard Real-Time)解决方案,它仍在基于Linux的通用操作系统上运行。对于对于具有非常严格的实时性能要求的应用场景,可能需要使用更专门的实时操作系统。

3.2 PREEMPT-RT Patch详解

3.2.1. PREEMPT-RT的思想

PREEMPT-RTPatch的核心思想是最小化内核中不可抢占部分的代码,同时将为支持抢占性必须要修改的代码量最小化。对临界区、中断处理函数、关中断等代码序列进行抢占改进。

3.2.2. PREEMPT-RT特性

1.临界区可抢占。

2.中断处理函数可抢占。

3."关中断"代码序列可抢占。

4.内核中的spinlock和semaphore支持优先级继承。

5.延迟操作。

6.降低延迟的措施。

3.2.3.  PREEMPT-RT的主要改动

PREEMPT-RT把Linux变成一个完全可抢占的内核,改变有以下几点:

1. 通过rt_mutex的重新实现使内核里的锁源语可被抢占。以前被如spinlock_t和rwlock_t保护的临界区现在变得可以被抢占了。

2. 为内核里的自旋锁和信号量实现优先级继承(PI-Priority Inheritance)。

3.  把中断处理器变为可被抢占的内核线程:PREEMPT-RT patch在内核线程上下文中处理软中断处理器。

3.2.3.1临界区抢占

spinlock是Linux内核锁机制的一种,被大量的用在临界区的访问,但传统的spinlock是禁止抢占的,因此会影响系统的实时性。

PREEMPT_RT用支持PI的rt_mutex代替传统的禁用抢占的spin_lock,定义了新的数据类型:spin_lock_t。凡是使用spin_lock_t做参数的spin_lock函数行为有可能引起调度,不会禁用抢占。如果,希望使用传统的spin_lock,则需要使用raw_spin_lock_t类型作为参数。

3.2.3.2中断处理线程化

Linux 硬中断处理时需要关闭中断,无法被抢占,这样会阻塞掉其它的中断请求,PREEMPT-RT会强制透过request_irq()申请的IRQ的顶半部函数在线程中执行,使中断处理函数运行在内核线程上下文中,而不再是中断上下文,可以被抢占。

在PREEMPT_RT环境中几乎所有的中断处理函数都运行在进程上下文中。尽管任何中断都可以被标记为SA_NODELAY使之运行在中断上下文,目前只有fpu_irq、irq0、irq2和lpptest中断设置了SA_NODELAY标记。这些中断中只有irq0(per-CPU定时器中断)是常用的,fpu_irq用于浮点协处理器中断,lpptest用于中断延迟评测。

不要轻易使用SA_NODELAY,它会使得系统的中断和调度延迟大大增加。外,必须非常谨慎地处理标记为SA_NODELAY的中断处理函数,否则将可能导致oops和死锁。

3.2.3.3Spinlock和Semaphore支持优先级继承

在如下的情况下会发生优先级翻转:

    * 低优先级的任务A获取到一个资源,比如一个锁(L)。

  * 中优先级任务B开始执行,抢占了任务A。

* 高优先级任务C尝试获取资源L。因为中优先级的任务B抢占了任务A,(任务A无法释放锁L)那么高优先级的任务就会阻塞。

优先级翻转是实时系统中必须解决的问题,它可能导致一个高优先级任务被无限期推迟执行。

PREEMPT_RT中使用优先级继承来解决优先级反转,核心思想是:高优先级任务暂时将其优先级赠与拥有临界资源(锁)的低优先级任务,从而快速运行加快A对锁的释放。此处优先级继承是变化的:比如,又有一个优先级更高的任务D也尝试获取锁L,那么任务C和A的优先级都会暂时提升为任务D的优先级。优先级继承的持续时间是非常短暂的。因为一旦低优先级任务A释放了锁,它马上就会失去短暂提升的优先级,然后将锁交给任务C。

PREEMPT_RT在一段时间内仅仅允许一个任务读持有读写锁/semaphore。允许该任务递归获取该锁。尽管丧失一些灵活性,却使得优先级继承变得切实可行。

优先级继承使得高优先级任务可以及时地获取锁和semaphore,即便是锁或semaphore已经被低优先级的任务获取。PREEMPT_RT的优先级继承提供短暂的继承,这是高优先级任务突然要获取低优先级任务的锁所需要的。compat_semaphore和compat_rw_semaphore可以用于不需要semaphore优先级继承的事件类的使用场合

3.2.3.4降低延迟的其他措施

有些PREEMTP_RT的修改的主要原因是降低调度/中断延迟。x86 MMX/SSE硬件就是一个列子。该硬件在内核空间抢占关闭的情况下进行操作。这意味着,直到MMX/SSE指令运行完毕,抢占才能开启。有些MMX/SSE指令没有问题,但是有些指令的执行需要很长时间。对此PREEMPT_RT的解决方案是不使用慢的MMX/SSE指令。另一些修改是:向slab分配器申请per-CPU变量也是对肆意关闭中断的一种解决方案。
 

第4章 Xenomai

4.1 简介

Xenomai是一个实时应用程序开发框架,旨在将Linux操作系统扩展为实时操作系统。

它提供了强大的实时功能和可预测性,适用于需要高精确性和低延迟的实时应用程序。

以下是关于Xenomai的一些重要特点和功能:

  1. 双核架构:Xenomai使用双核(或多核)架构,其中一个核心运行Linux内核,而另一个核心运行Xenomai,负责实时任务的调度和执行。这种分离的架构确保了实时任务不会受到Linux内核的影响,提供了更可靠的实时性能。

  2. 分时多任务调度:Xenomai采用了分时多任务调度算法,可为实时任务提供严格且可预测的时间片分配。这种调度策略确保了实时任务可以按照其优先级和截止时间进行准确地调度,避免了不确定性和不可预测的延迟。

  3. 实时应用程序接口(API):Xenomai提供了一套丰富的API,使开发者能够以实时方式编写应用程序。这些API包括Native API和POSIX API,分别提供了对底层实时功能和标准POSIX函数的访问。

  4. 高精确性定时器:Xenomai提供了高精确性的定时器,可用于实现精确的时间控制和事件触发。这对于需要在特定时间点触发操作的应用程序非常关键。

  5. 支持多种架构和硬件平台:Xenomai支持多种处理器架构和硬件平台,包括x86、ARM、PowerPC等。这使得它适用于各种嵌入式系统和实时应用的开发。

需要注意的是,Xenomai的配置和使用对开发者的要求较高。它通常需要对Linux内核进行一些修改和重新编译,以及对Xenomai进行适当的配置和调优。因此,使用Xenomai开发实时应用程序需要一定的技术知识和经验。

总的来说,Xenomai是一个功能强大且高度定制化的实时应用程序开发框架,适用于需要严格的实时性能和可预测性的应用领域,如:

  • 工业自动化
  • 机器人控制
  • 航空航天

4.2 双调度器架构

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

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

相关文章

java调用python脚本,json传参方式。

使用python的json.loads()进行解析json数据,如果没有包含双引号,则会解析出错 解决方案1 使用demjson.decode(),安装方式直接百度,就不做过多的说明了 解决方案2 使用json.loads()方式解析,…

Jetpack Compose与Accompanist:改变Android UI开发的方式

在Android开发中,UI开发一直是一个重要的部分。Google推出的Jetpack Compose库为开发者提供了一种全新的声明式UI工具,使得UI开发变得更加简单和直观。而Accompanist库则为Jetpack Compose提供了一系列有用的扩展,进一步提升了开发效率。 Jet…

jQuery节点操作

jQuery常用技术 1.jQuery获取元素 2.jQuery与js对象转换 3.jQuery中的遍历方式 4.jQuery中的事件绑定 1. jQuery介绍 1.1 jQuery概述 在JavaScript的使用过程中,存在很多问题,例如:兼容问题(咱不考虑),元素获取方式单一(只能用基…

抖音矩阵号管理系统源码开发及布局流程

“账号矩阵”运营是一种账号运营的高阶玩法,指一个运营主体同时开设多个平台多个账号利用品牌联动的形式来实现账号之间的相关引流,以账号组的形式实现企业营销价值最大化。那么运营多个账号,短视频平台内容是核心,势必要招募多个…

前端Vue自定义精美宫格菜单按钮组件 可设置一行展示个数 可设置成九宫格 十二宫格 十五宫格

前端Vue自定义精美宫格菜单按钮组件 可设置一行展示个数 可设置成九宫格 十二宫格 十五宫格 , 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id13315 效果图如下: # cc-categoryMenu #### 使用方法 使用方法…

js实现 无限层级 树形数据结构

创建数据 const list []; for (let i 0; i < 1000; i 200) {if (i 0) {list.push({ id: i - 1, age: 年龄- (i - 1) });list.push({ id: i, age: 年龄- i, parentId: -1 });} else {for (let index i - 199; index < i; index) {list.push({ id: index, age: 年龄…

LED显示屏出现花屏故障怎么办

LED显示屏出现花屏故障时&#xff0c;可以尝试以下几个步骤来解决问题&#xff1a; 检查电源连接&#xff1a;确保LED显示屏的电源连接正常并牢固。检查电源线、插头和插座&#xff0c;确保它们没有松动或损坏。 检查信号源&#xff1a;检查LED显示屏的信号源&#xff0c;如视频…

现在低代码平台推进阻力那么大,有没有最好的解决办法?

前言 低代码是一种快速设计和开发软件应用程序并且手动编码最少的方法。通过在图形界面中使用可视化建模来组装和配置应用程序&#xff0c;开发人员可以跳过所有基础架构让开发速度提升起来。 一、发现问题 1.“在踏出一步之前&#xff0c;首先考虑能否退回去” 现在低代码平…

ACWing算法基础课

y总说 java不能用Scanner读入,要用Buffer.read();快十倍二十倍; 第一讲 基础算法 包括排序、二分、高精度、前缀和与差分、双指针算法、位运算、离散化、区间合并等内容。 快速排序 一定要先移动end(就是把大数移到右边),后移动start; 否则 先找小数,会出现end start重合…

Python capitalize()函数使用详解,Python首字母大写

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 capitalize 1、返回的是新字符串2、转换规则3、转换列表的元素4、指定位置转换 c…

MySQL数据库的增、删、改、查案例,和常用语句

一、案例要求 二、解答过程 第一题 1、创建数据库Markte mysql> create database Market; mysql> use Market; 2、创建数据表customers&#xff0c;在c_num字段上添加主键约束和自增约束&#xff0c;在c_birth字段上添加非空约束 mysql> create table customers(…

Ae 效果:CC Threshold RGB

风格化/CC Threshold RGB Stylize/CC Threshold RGB CC Threshold RGB&#xff08;CC 阈值 RGB&#xff09;效果可以为红、绿、蓝三个原色通道分别设置阈值&#xff0c;即&#xff0c;通道上高于此阈值时为纯白&#xff0c;低于此阈值时纯黑&#xff0c;以实现对原色通道的二值…

JavaWeb 笔记——4

JavaWeb 笔记——4 一、JSP1.1、JSP概述1.2、JSP快速入门1.3、JSP原理1.4、JSP脚本1.5、JSP缺点1.6、EL表达式1.7、JSTL标签1.8、MVC模式和三层架构 二、介于三层框架下的案例2.1、准备环境2.2、查询所有2.3、添加2.4、修改2.4.1、修改-回显数据2.4.2、修改-修改数据 2.5、删除…

windows利用ffmpeg采集摄像头画面,支持服务启动,支持一键启动

项目情况 1. 我们再windows 系统下采用ffmpeg去采集笔记本电脑摄像头的时候需要先获取摄像头的信息 2. 因为每台电脑摄像头的信息不一样&#xff0c;如果名称不对会导致不能采集 解决方案 bat脚本实现&#xff0c;先去获取摄像头信息&#xff0c;筛选出摄像头的信息&#…

从视频源头到边缘智能:实现端到端AI解决方案的技术挑战与实践

从视频源头到边缘智能&#xff1a;实现端到端AI解决方案的技术挑战与实践 引言端到端AI解决方案打通视频源头采集视频传输和存储边缘计算和盒子设备 SDK示列 引言 随着人工智能技术的快速发展&#xff0c;端到端AI解决方案在各个领域的应用越来越广泛。这些解决方案能够实现从…

Git的使用--如何将本地项目上传到Github(三种简单、方便的方法)(二)(详解)

一、第一种方法&#xff1a; 1.首先你需要一个github账号&#xff0c;所以还没有的话先去注册吧&#xff01; https://github.com/ 我们使用git需要先安装git工具&#xff0c;这里给出下载地址&#xff0c;下载后一路&#xff08;傻瓜式安装&#xff09;直接安装即可&#x…

代码练习错误记录

更新数据库时报错 Exception in thread "main" java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near WHERE ID1 at line 1原因&#xff1…

Maven高级(一)--分模块设计与开发

一.Maven回顾 Maven是一款构建和管理java项目的工具。 如果我们需要开发一些中大型的项目&#xff0c;仅凭基础知识难以应付&#xff0c;所以我们接下来还需要学习Maven提供的一些高级功能&#xff0c;这些功能在中大型项目应用是非常多的。 Maven的高级内容包括&#xff1a;【…

vue3向对象中添加属性

使用场景&#xff1a;后端返回一个数组对象结构&#xff0c;会出现可能需要前端自己向对象中添加一个新的字段 在vue2中我们常常会遇到明明已经改变了数据&#xff0c;视图却没有实时更新这样的问题 这时vue2就提供了一个方法就是$set this.$set(this.userInfo, age, 12)但是在…

计算机组成原理综合实验设计:基于proteus的小型CPU的设计

基于proteus的小型CPU的设计 摘要 本文详细介绍了该小型CPU的设计模板及预估实现的功能&#xff0c;然后对模块的原理进行详实的概述。之后对项目设计进行了分析&#xff0c;从原理图和电路设计图方面进行了完整的呈现。在介绍完基本的设计框架后&#xff0c;本文对项目中的每…