跳转至

Linux实时性改进

Linux实时性改进

背景

RTOS:

核心很小

性能不足

高可靠性,可裁剪性,实时性:

​ 允许实时应用程序在初始化期间保留资源,特别是内存。资源分配通常是非确定性操作,因此应在实时处 理期间避免。

​ 允许实时应用程序在初始化期间将其机器代码和数据锁定到物理RAM中以避免操作期间的页面错误。

​ 允许隔离一个或多个CPU以运行一个或更多实时应用程序。

​ 允许实时应用程序和异步应用程序共存,同时确保实时应用程序可以在需要时访问处理器。

​ 调度器允许应用程序开发人员建立应用程序的执行优先级,包括实时和异步,以确保实时应用程序能够在 截止日期之前完成执行。

​ 限制实时应用程序运行时操作系统的干扰。

通用开发平台:

功能强大,结构复杂,易于软件的二次开发

提供编程人员熟悉的标准API

提供了一些对实时软件开发的支持

选择Linux的原因

Windows和Solaris等专有商业操作系统的剪裁受到商家的严格控制。这大大限制了开发者的剪裁深度。而linux遵循GPL协议,开放所有系统源代码,非常易于剪裁。

同其它开放源码的通用操作系统(如FreeBSD)相比,linux在多种处理器、开发板支持和软件开发工具支持上有很强的优势。

linux最初也是作为通用操作系统而设计开发的,但提供了一些实时处理的支持。这包括支持大部分POSIX标准中的实时功能,支持多任务、多线程,具有丰富的通信机制等。

linux还提供符合了POSIX标准的调度策略,包括FIFO调度策略、时间片轮转调度策略和静态优先级抢占式调度策略。其默认的调度策略是第三种。Linux还提供了内存锁定功能,以避免在实时处理中存储页被换出,也提供了符合POSIX 标准的实时信号机制。

Linux的问题

linux在用户态支持可抢占调度策略,而在核心态却不支持抢占式调度策略。这样运行在Linux核心态的任务(或系统调用)是不能被其它优先级更高的任务所抢占的,这样就会引起优先级逆转问题。另外,Linux操作系统的中断处理句柄是不可调度的,不能依优先级高低

linux在用户态支持可抢占调度策略,而在核心态却不支持抢占式调度策略。这样运行在Linux核心态的任务(或系统调用)是不能被其它优先级更高的任务所抢占的,这样就会引起优先级逆转问题。另外,Linux操作系统的中断处理句柄是不可调度的,不能依优先级高低

优化思路

关于核

独立核方法

设计一种完全独立的实时核心,但其API 与Linux核心相兼容。

优点:

熟悉Linux系统的开发人员也可以很快地熟悉这种方法开发出的实时系统

如果这种实时系统的API是Linux系统API子集的话,我们还可以只在Linux主机上仿真,进行应用程序的开发和调试,免去了远程调试的需要

缺点:

由于设计了一个完全独立的实时核心而没有使用原有linux核心,导致Linux系统的一些优势难以继承,尤其是与Linux核心相关的一些优势无法获得。比如Linux核心对大量硬件的广泛支持,Linux核心超群的可靠性、稳定性等。

由于这种方法并没有通过修改Linux核心代码来开发实时核心,而是在Linux系统之上重新设计了一个实时核心,这样的开发并不要求源代码开放。因此,Linux一些基于开放源代码的优势也势必受损。

任何基于Linux核心的开发成果也无法方便地应用到实时核心中

双核方法

在同一硬件平台上采用了两个相互配合,共同工作的系统核心,一个核心提供精确的实时多任务管理,另一个核心提供复杂的非实时通用功能

优点:

这种方法的一个关键所在是运行在常规linux核心上的所有非实时任务必须是支持可抢占式调度的。这样才能做到对实时核心提供精确实时保证没有任何影响。由于实时核心非常小,并不会增加整个系统的负载,所有这些对开发实时性要求严格的实时软件都提供了有力保障。

缺点:

实时任务的开发是直接面向提供精确实时服务的小实时核心的,而不是功能强大的常规linux核心。因此,实时任务是运行在系统核心层的,这就意味着这些实时任务可以运行在没有内存保护的级别之上。所以,一个实时任务的错误可能会导致整个系统的瘫痪

修改核方法(可行)

这种方法是基于已有linux系统对实时软件开发的支持,进行源代码级修改而使Linux变成一个真正的实时操作系统。

中心原则是精心选择部分改动,就可以满足一系列相关linux实时开发。此外,由于这些改动都是相对局部的,不会从根本上改变Linux的核心。

资源核方法

资源核方法是一种以资源为中心来指导实时核心提供精确的、有保证的、可抢占的获取系统资源的方法。只要实时应用所需资源可以由核心后台资源管理程序调配满足,实时核心是允许实时应用可配置的。因此,实时核心其实是提供了实时应用可构建的基础——从配置简单的实时系统到复杂的实时系统,都可以通过动态地改变实时任务属性和它们在整个系统中的优先级来满足。

最大优点是系统具有很好的健壮性、可精确预见的实时性。另一个优点是允许应用程序根据实际情况动态调整自身属性。此外,这种方法非常适合嵌入式系统的开发

其他优化

  • 中断优先级高,要减少中断对进程的影响;
  • 进程之间有优先级之分,要合理改变优先级;
  • 内核模块的实现机制限制,在特殊情况下使用轮训;
  • 提升系统节拍,提升定时精度;
  • 禁止irqbalance,防止进入节能或休眠模式;

论文参考

Challenges Using Linux as a Real-Time Operating System(NASA)