转自@https://www.ibm.com/developerworks/cn/linux/l-real-time-linux/#resources

本文探索了一些支持实时特性的 Linux 架构,并探讨了实时架构 的含意是什么。有许多种解决方案赋予 Linux 实时能力,本文将对瘦内核(或微内核)方法、超微内核方法以及资源内核(resource-kernel)方法进行考查。最后,描述了标准 2.6 内核的实时功能,并向您示范如何启用并使用这种功能。

实时的定义及要求

下列实时 的定义为探讨实时 Linux 架构提供了基础。定义由 Donal Gillies 在 Realtime Computing FAQ 中提出(参见 参考资料的链接)。

实时系统指系统的计算正确性不仅取决于计算的逻辑正确性,还取决于产生结果的时间。如果未满足系统的时间约束,则认为系统失效。

更多内容见 developerworks 上 Tim 的 系列

  • Linux SCSI 子系统剖析
  • Linux 文件系统剖析
  • Linux 网络栈剖析
  • Linux 内核剖析
  • Linux slab 分配器剖析
  • Linux 同步方法剖析
  • Tim 的全部 Anatomy of... 文章

换句话说,系统面对变化的负载(从最小到最坏的情况)时必须确定性地保证满足时间要求。注意,上述定义并未提到性能,原因是实时性与速度关系不大:它与可预见性有关。例如,使用快速的现代处理器时,Linux 可以提供 20 μ 微秒的典型中断响应,但有时候响应会变得很长。这是一个基本的问题:并不是 Linux 不够快或效率不够高,而是因为它不能提供确定性。

一些例子将演示全部这些内容的含意。图 1 显示的是中断延迟指标。当中断到达时(event),CPU 发生中断并转入中断处理。执行一些工作以确定发生了什么事件,然后执行少量工作分配必需的任务以处理此事件(上下文切换)。中断到达与分发必需任务之间的时间(假设分配的是优先级最高的任务)称为响应时间。对于实时性要求,响应时间应是确定的并应当在已知的最坏情况的时间内完成。

上下文切换

发生中断后分配新任务的过程中隐含着上下文切换。这个过程在中断时存储 CPU 的当前状态,然后恢复一项给定任务的状态。上下文切换依赖于操作系统及底层的处理器架构。

图 1. 中断延迟和响应时间

有关这个过程的一个例子就是目前汽车中使用的气囊。当报告车辆碰撞的传感器中断 CPU 后,操作系统应快速地分配展开气囊的任务,并且不允许其他非实时处理进行干扰。晚一秒钟展开气囊比没有气囊的情况更糟糕。

除为中断处理提供确定性外,实时处理也需要支持周期性间隔的任务调度。考虑图 2。本图演示了周期性任务调度。大量控制系统要求周期性采样与处理。某个特定任务必须按照固定的周期(p)执行,从而确保系统的稳定性。考虑一下汽车的防抱死系统(ABS)。控制系统对车辆的每个车轮的转速进行采样(每秒最多 20 次)并控制每个制动器的压力(防止它锁死)。为了保持控制系统的正常工作,传感器的采样与控制必须按照一定的周期间隔。这意味着必须抢占其他处理,以便 ABS 任务能按照期望的周期执行。

图 2. 周期性任务调度

硬实时与软实时系统

能够在指定的期限完成实时任务(即便在最坏的处理负载下也能如此)的操作系统称为硬实时 系统。但并不是任何情况下都需要硬实时支持。如果操作系统在平均情况下能支持任务的执行期限,则称它为软实时 系统。硬实时系统指超过截止期限后将造成灾难性后果(例如展开气囊过晚或制动压力产生的滑行距离过长)的系统。软实时系统超过截止期限后并不会造成系统整体失败(如丢失视频中的一帧)。

现在您已经对实时性要求有了一些深入了解,让我们查看一些实时 Linux 架构各支持哪个级别的实时性以及如何做到这一点。

瘦内核方法

瘦内核(或微内核)方法使用了第二个内核作为硬件与 Linux 内核间的抽象接口(见图 3)。非实时 Linux 内核在后台运行,作为瘦内核的一项低优先级任务托管全部非实时任务。实时任务直接在瘦内核上运行。

图 3. 硬实时的瘦内核方法

瘦内核主要用于(除了托管实时任务外)中断管理。瘦内核截取中断以确保非实时内核无法抢占瘦内核的运行。这允许瘦内核提供硬实时支持。

虽然瘦内核方法有自己的优势(硬实时支持与标准 Linux 内核共存),但这种方法也有缺点。实时任务和非实时任务是独立的,这造成了调试困难。而且,非实时任务并未得到 Linux 平台的完全支持(瘦内核执行称为 的一个原因)。

使用这种方法的例子有 RTLinux (现在由 Wind River Systems 专有),实时应用程序接口(RTAI)和 Xenomai。

超微内核方法

这里瘦内核方法依赖于包含任务管理的最小内核,而超微内核法对内核进行更进一步的缩减。通过这种方式,它不像是一个内核而更像是一个硬件抽象层(HAL)。超微内核为运行于更高级别的多个操作系统提供了硬件资源共享(见图 4)。因为超微内核对硬件进行了抽象,因此它可为更高级别的操作系统提供优先权,从而支持实时性。

图 4. 对硬件进行抽象的超微内核法

注意,这种方法和运行多个操作系统的虚拟化方法有一些相似之处。使用这种方法的情况下,超微内核在实时和非实时内核中对硬件进行抽象。这与 hypervisor 从客户(guest)操作系统对裸机进行抽象的方式很相似。更多信息参见 参考资料 。

关于超微内核的示例是操作系统的 Adaptive Domain Environment for Operating Systems (ADEOS)。ADEOS 支持多个并发操作系统同步运行。当发生硬件事件后,ADEOS 对链中的每个操作系统进行查询以确定使用哪一个系统处理事件。

资源内核法

另一个实时架构是资源内核法。这种方法为内核增加一个模块,为各种资源提供预留(reservation)。这种机制保证了对时分复用(time-multiplexed)系统资源的访问(CPU、网络或磁盘带宽)。这些资源拥有多个预留参数,如循环周期、需要的处理时间(也就是完成处理所需的时间),以及截止时间。

资源内核提供了一组应用程序编程接口(API),允许任务请求这些预留资源(见图 5)。然后资源内核可以合并这些请求,使用任务定义的约束定义一个调度,从而提供确定的访问(如果无法提供确定性则返回错误)。通过调度算法,如 Earliest-Deadline-First (EDF),内核可以处理动态的调度负载。

图 5. 实现资源预留的资源内核法

资源内核法实现的一个示例是 CMU 公司的 Linux/RK,它把可移植的资源内核集成到 Linux 中作为一个可加载模块。这种实现演化成商用的 TimeSys Linux/RT 产品。

标准 2.6 内核中的实时

目前探讨的这些方法在架构上都很有趣,但是它们都在内核的外围运行。然而,如果对标准 Linux 内核进行必要的修改使其支持实时性,结果会怎么样呢?

今天,在 2.6 内核中,通过对内核进行简单配置使其完全可抢占(见图 6),您就可以得到软实时功能。在标准 2.6 Linux 内核中,当用户空间的进程执行内核调用时(通过系统调用),它便不能被抢占。这意味着如果低优先级进程进行了系统调用后,高优先级进程必须等到调用结束后才能访问 CPU。新的配置选项 CONFIG_PREEMPT 改变了这一内核行为,在高优先级任务可用的情况下(即使此进程正在进行系统调用),它允许进程被抢占。

图 6 允许抢占的标准 2.6 Linux 内核

但这种配置选项也是一种折衷。虽然此选项实现了软实时性能并且即使在负载条件下也可使操作系统顺利地运行,但这样做也付出了代价。代价就是略微减低了吞吐量以及内核性能,原因是 CONFIG_PREEMPT 选项增加了开销。这种选项对桌面和嵌入式系统而言是有用的,但并不是在任何场景下都有用(例如,服务器)。

新的 O(1) 调度程序

2.6 内核中新的 O(1) 调度程序对性能有很大的提升,即使存在很多任务的情况下也是如此。不管需要运行的任务有多少个,新的调度程序都会在有限的时间内运行。您可以在 参考资料 一节中找到这种调度的更多信息以及它如何进行工作。

在 2.6 内核中另一项有用的配置选项是高精度定时器。这个新选项允许定时器以 1μs 的精度运行(如果底层硬件支持的话),并通过红黑树实现对定时器的高效管理。通过红黑树,可以使用大量的定时器而不会对定时器子系统(O(log n))的性能造成影响。

只需要一点额外的工作,您就可以通过 PREEMPT_RT 补丁实现硬实时。PREEMPT_RT 补丁提供了多项修改,可实现硬实时支持。其中一些修改包括重新实现一些内核锁定原语,从而实现完全可抢占,实现内核互斥的优先级继承,并把中断处理程序转换为内核线程以实现线程可抢占。

结束语

Linux 不仅是一个实验和描述实时算法的理想平台,目前在标准的 2.6 内核中也实现了实时功能。从标准内核中您可以实现软实时功能,再执行一些额外的工作(内核补丁)您就可以构建硬实时应用程序。

本文简要介绍了一些为 Linux 内核提供实时计算的技术。很多早期的尝试使用瘦内核方法把实时任务与标准内核分离。后来,出现了超微内核法,它与如今的虚拟化解决方案中使用的 hypervisor 非常相似。最后,Linux 内核提供了自己的实时方法,包括软实时和硬实时。

虽然本文只是对 Linux 的实时方法进行了简单介绍,但 参考资料 一节中提供了更多的信息,可以从中获得额外的信息和其他有用的实时技术。

相关主题

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文。
  • 在 Tim 的文章 “虚拟 Linux”(developerWorks,2006 年 12 月)中,了解从虚拟化架构中借鉴而来的实现实时性的瘦内核和超微内核法是多么流行。
  • 在 Tim 的文章 “Linux 调度器内幕”(developerWorks,2006 年 6 月)中,了解 2.6 内核中 O(1) 调度程序的更多内容。
  • Realtime Computing FAQ 是一个很棒的学习实时计算的起点。它涵盖了可移植操作系统接口(POSIX)、实时操作系统的基础知识,以及一些实时分析技巧。
  • “Real-time Control Systems”(PDF)是由 A. Gambier 撰写的有趣教程,它介绍了实时控制系统的设计并探讨了各种调度算法。
  • 第六届实时 Linux 研讨会(2007 年 11 月举办)的会议记录中包含的论文和参考资料可以帮助您了解实时 Linux 的最新发展。
  • 早期的 RTLinux以及 Xenomai 都应用了瘦内核方法。虽然运用方式略有不同,但整体方法被证明是有价值的。
  • ADEOS 是一个在 Linux 内核中提供实时功能的硬件抽象层(HAL)或超微内核。它也已应用到对称多处理器(SMP)集群和内核调试中。
  • “Portable RK: A Portable Resource Kernel for Guaranteed and Enforced Timing Behavior” 描述了一个通过预留 API 提供对时分复用资源(如 CPU、网络或磁盘)的可靠访问的组件。
  • 红黑树 是一个自平衡的二叉查找树。虽然算法本身很复杂,但它在实践应用中的效率很高,可以按照 O(log n) 的时间操作。
  • PREEMPT_RT 补丁为标准 2.6 Linux 内核提供了硬实时功能。这些页面详细地说明了 安装与使用 RT_PREEMPT 配置的方法以及一些有用的 FAQ。
  • 在这个 优先级反转 场景中,低优先级的任务占有着高优先级任务需要的资源(这个问题出现在 使用风河公司 VxWorks 系统的火星开拓者探测器上)。此问题的解决方法是 优先级继承,这增加了低优先级任务的优先级,允许它运行从而释放资源。
  • Novell 公司最近公布了它们的 SUSE Linux Enterprise Real-Time (SLERT) 1.0 版。这个发行版包含内核更新以及对实时应用程序的 POSIX 实时支持。两项改进包括 CPU 屏蔽和 动态优先级分配 。
  • Xenomai/SOLO 宣布不使用内核共存法,而转向使用与 Linux 内核层更加紧密集成的方法。这种方法支持传统的 POSIX (用户空间)编程。
  • 在 developerWorks Linux 专区 找到更多面向 Linux 开发人员的资源,并请浏览 最受欢迎的文章和教程。
  • 查看 developerWorks 上所有的 Linux 技巧和 Linux 教程。

实时 Linux 架构剖析相关推荐

  1. 大数据智慧出行开发第一周:智慧出行底层数据架构剖析纵览全局

    第一周:智慧出行底层数据架构剖析纵览全局 0.大数据环境前置准备 一.文档说明 为了统一我们的操作系统与软件环境,我们统一课前基本软件环境,实现全程学习当中的软件版本都是一致的 二.VmWare与li ...

  2. 阿里巴巴开源数据库--OceanBase从使用聊到架构剖析

    1. OceanBase 概述: OceanBase是由蚂蚁金服.阿里巴巴完全自主研发的金融级分布式关系数据库,始创于2010年.OceanBase具有数据强一致.高可用.高性能.在线扩展.高度兼容S ...

  3. Linux 文件系统剖析

    Linux 文件系统剖析 按照分层结构讨论 Linux 文件系统 M. Tim Jones, 顾问工程师, Emulex Corp. 简介: 在文件系统方面,Linux® 可以算得上操作系统中的 &q ...

  4. rtos与linux软件开发,实时Linux和RTOS的基本特性及技术进行比较

    描述 体系结构异同 对实时操作系统(RTOS)特性进行比较和分析.对于我们刚接触这个操作系统时一定要对他们要有一定的了解,我们先对实时操作系统来了解下,它就是指当外界事件或数据产生时,能够接受并以足够 ...

  5. 青云SDN/NFV2.0架构剖析

    编者按:在ArchSummit北京2015大会上,来自青云的工程师陈海泉分享了<SDN/NFV 2.0架构剖析>的议题.对于青云来说,SDN/NFV2.0是一个新的突破.早在2013年,青 ...

  6. 网易云信自研大规模传输网核心系统架构剖析

    随着边缘计算及RTC技术的兴起,业务服务器的边缘化可以带来大量收益:一方面就近接入可以优化客户端上下行质量,另一方面边缘节点可以大幅降低带宽成本.但如何保证相隔千山万水的边缘服务器之间的网络传输质量成 ...

  7. 微信、QQ都在用的腾讯云EB级对象存储架构剖析

    背景:5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会在广州召开,广东省各级政府机构领导.海内外业内学术专家.行业大咖及技术大牛等在现场共议云计算与数字 ...

  8. 第十二期:常用的几种大数据架构剖析

    常用的几种大数据架构剖析 随着大数据技术的发展,数据挖掘.数据探索等专有名词曝光度越来越高,但是在类似于Hadoop系列的大数据分析系统大行其道之前,数据分析工作已经经历了长足的发展,尤其是以BI系统 ...

  9. linux线程调度与rtos,实时Linux和RTOS的基本特性及技术进行比较

    体系结构异同 对实时操作系统(RTOS)特性进行比较和分析.对于我们刚接触这个操作系统时一定要对他们要有一定的了解,我们先对实时操作系统来了解下,它就是指当外界事件或数据产生时,能够接受并以足够快的速 ...

最新文章

  1. JavaScript中的endsWith
  2. 2019世界机器人大赛总决赛在河北保定开赛
  3. OpenKruise v0.8.0 核心能力解读:管理 Sidecar 容器的利器
  4. springboot在intellij中的热部署(Hot swapping)配置
  5. 第6天-css笔记 三大定位-定位 子绝父相 与精灵图
  6. IT人的好习惯和不良习惯总结
  7. 12亿行代码,阿里巴巴这一年的技术报告和梦想报告
  8. ebm风扇选型手册_EBM风扇选择方法
  9. 第3关:HDFS-JAVA接口之上传文件
  10. 使用Python查看汉诺塔移动详细过程
  11. Leetcode每日一题:226.invert-binary-tree(翻转二叉树)
  12. 阿里云数据库再添新成员,企业级MariaDB正式开卖!
  13. Ubuntu16.04安装VirtualBox及无法启动的解决办法
  14. Scratch 模拟病毒传染小程序
  15. 国二计算机考试office快捷键,全国计算机二级考试(Office)应试技巧
  16. 无线传感器网络技术及应用(课后习题答案)
  17. c语言物联网服务器,物联网卡服务器(物联网应用层服务器端集)
  18. 浏览器兼容性测试及常见问题
  19. java基础之Web全套知识点梳理
  20. Ubuntu安装搜 狗输入法,最完整的步骤

热门文章

  1. 江西省计算机二级报名2019下半年,江西省2019年9月全国计算机等级考试报名时间...
  2. 抖音搜索排名,抖音优化,视频AI混剪原创更高实现创意内容,权限接口关闭,技术如何研发?
  3. 扫地机器人测评云鲸_小白鲸成清洁电器中“明星”,开箱测评云鲸扫地机器人好不好?...
  4. 【Redis】官方推荐的基于C接口hiredis
  5. CMake新手友好入门教程
  6. 关于太阳能充电器折叠包的那些事,您知道多少?
  7. 腾讯云香港服务器网速稳定吗,腾讯云香港云服务器测评,香港CN2,延迟、速度、丢包测试...
  8. 小程序 ios14系统(ios最新的版本) 访问接口失败,无返回体(其他版本正常)
  9. 怪兽来袭DARTZ款奔驰G 63逆天越野
  10. 2022哈尔滨工业大学 软件构造期末复习 一