SylixOS:支持SMP的实时操作系统

SylixOS:一种在对称多处理上具有恒定调度的安全兼容实时操作系统

摘要

实时操作系统(RTOS)是一种旨在保证时间内执行任务的操作系统。本文介绍了SylixOS——一个功能强大且开源的实时操作系统。作为一款工业级实时操作系统,SylixOS已被广泛应用于航空航天、军事及众多嵌入式设备中。我们介绍了SylixOS的发展历程及其一些先进特性。此外,SylixOS还支持多进程。我们讨论了对称多处理调度算法如何在SylixOS中应用。本文还提供了SylixOS的性能评估,以衡量其实时效率。

一、引言

对于快速增长的工业应用,运行在嵌入式系统上的软件需要具备出色的实时响应能力,以确保其确定性、安全性和高性能表现。为实现这一目标,我们需要实时操作系统(RTOS)不仅能够处理对硬件的严格依赖,还具备处理实时进程的能力。RTOS必须保持其调度时间处于恒定水平,无论平台或任务数量如何变化。

商业实时操作系统[1][2][3]被广泛应用于航空航天、军事和汽车等领域,这些领域通常要求确定性性能和安全认证。在安全关键系统中,任务必须在特定的时间约束内完成,因为不可预见的延迟可能会造成重大损失。这些领域日益增长的需求给实时操作系统的设计带来了新的挑战。应用开发、安全性和及时性是一些最重要的设计考虑因素。

  • 由于实时操作系统(RTOS)的广泛应用,如何降低实时应用的开发成本已成为一个日益重要的问题。提供易于使用的集成开发环境(IDE)的实时操作系统将显著降低开发成本。此外,支持软件迁移的操作系统可以减少重新开发的成本。
  • 安全问题是操作系统领域的一个关键问题。在许多军事和高科技工业控制系统中,针对系统的攻击可能造成严重损害。这些攻击可能来自网络或某些恶意软件。因此,必须采取有针对性的防御措施。
  • 随着现代软件计算复杂度的增长(例如机器学习中的预测),运行时间对于应用程序而言,延迟时间正在变长。因此,为了满足许多工业控制系统所需的低延迟,需要一种支持对称多处理(SMP)系统的实时操作系统。SMP是一种计算机架构,包含一个多处理器硬件和多个连接到共享主存的相同处理器。支持SMP的实时操作系统意味着它能够在这种多核平台上保持恒定级别的调度时间。

在强调这些设计考虑的基础上,我们介绍了一款工业级实时操作系统SylixOS。SylixOS是一款功能强大且开源的实时操作系统,支持进程和多处理器系统(对称多处理)。SylixOS免费且功能全面,并由一个活跃的开源社区提供支持。作为一个成熟的实时操作系统,SylixOS支持大多数主流硬件架构,如ARM和RISC‐V,并已成功应用于众多航空航天和军事领域。本文简要介绍了SylixOS的一些特性,包括但不限于应用开发、兼容接口和安全。SylixOS在设计上注重可靠性与易用性,并提供对多处理器的支持。为了提升易用性,SylixOS提供了完整的工具链和集成开发环境,使部署过程更加简便。针对安全性问题,SylixOS提供了完整的网络和安全协议栈,以应对来自网络和恶意软件的潜在攻击。此外,SylixOS还支持多进程。我们还讨论了对称多处理调度算法在SylixOS中的应用,这些算法可在多核平台上保持恒定的调度时间。最后,我们进行了性能分析,以评估SylixOS的效率,有助于初步了解该系统相较于其他操作系统的运行表现。

II. SylixOS

SylixOS[4]是由阿基诺信息有限公司开发的一款支持对称多处理调度的原创大型硬实时操作系统。为了吸引更多开发者参与开发,SylixOS被设计为一个协作项目,并由活跃的开源社区提供支持。在开源政策下,SylixOS适用于各个行业领域和应用程序。SylixOS内核具有经过验证的稳定性和广泛的设备支持,已得到保障和确认并已通过国家航空航天部门的认证,成功应用于众多航空航天应用中。此外,为满足高性能计算的需求,SylixOS支持对称多处理平台,并具备实时进程和动态加载机制。同时,SylixOS支持大多数主流硬件架构,包括ARM、MIPS、PowerPC、x86、SPARC、数字信号处理器、RISC‐V、C‐SKY等。

SylixOS项目始于2000年代中期。经过十多年的发展,SylixOS已成为一个功能丰富且具有竞争力的实时操作系统。图1简要展示了SylixOS发展路径。

示意图0

2006年,SylixOS的内核开发完成,该内核的代号为LongWingT M。首个版本实现了硬实时操作系统的基本功能,线程调度、定时器、速率单调调度(RMS)和信号量使得SylixOS能够保证在确定时间内处理任务。

到2008年,SylixOS已趋于成熟。系统开始支持输入/输出系统、一些标准设备模块、BSD套接字和第三方软件。文件系统支持多种存储格式。消息队列和内存管理被添加到内核中,从而实现了网络通信和对内存的精确控制。该版本的SylixOS已具备实际应用的条件。

到2010年,SylixOS在性能和开发难度方面经历了重大改进。支持内存管理单元(MMU)和缓存,使得SylixOS能够更好地利用高端处理器。此外,SylixOS支持C++,包括标准模板库(STL)和可移植操作系统接口(POSIX)。SylixOS的软件开发变得更加简便和标准化。这一版本的SylixOS具备了作为实时操作系统的专业性能。

在2012年的SylixOS版本中,支持多内核平台。这是SylixOS最重要的改进之一,因为它使SylixOS能够并行使用大量CPU。同时,该版本还支持动态加载技术和进程。前者通过减小二进制文件的大小和加快速度来缩短编译时间,后者则提高了SylixOS与其他操作系统上应用程序的兼容性。从这一版本开始,SylixOS成为了一款具有竞争力的商业实时操作系统。

到2014年,SylixOS功能完善且对开发者友好。GNU极大地降低了开发难度符号调试器(GDB)。开发人员可以方便地使用GDB进行应用程序调试,大大缩短了开发和测试周期。动态链接库(DLL)降低了模块间的耦合,便于大规模应用的部署和升级。此外,本版本支持Qt库,使SylixOS上的应用程序具有更好的兼容性。最后但同样重要的是,大多数主流硬件架构都得到了全面支持。SylixOS在本版本中成为一个功能强大且兼容性良好的大型实时操作系统。

如今,SylixOS已成为功能全面、性能优越且具有独特特性的实时操作系统。一些代表性特性如下:

  • 进程 :SylixOS是为数不多支持进程的实时操作系统之一。进程是资源分配的最小单位。在SylixOS中,进程充当资源的容器,规范了系统资源管理。开发者可以像使用Linux的进程一样使用SylixOS的进程。SylixOS的进程与Linux的进程仍存在差异。为了实现实时性,SylixOS中的所有进程共享一个单一的地址空间,而代码和数据的重定位在动态链接时完成。通过这种方式,进程调度无需切换大量内存页,从而使进程切换的时间开销满足确定性的要求。SylixOS进程还避免了不必要的资源分配,提高了应用程序的启动速度和运行效率。
  • 兼容性 :Acoinfo始终致力于降低开发成本并减轻迁移难度。RealEvo‐IDE提供了完整的SylixOS开发环境,涵盖设计、开发、调试、仿真部署和测试。图形用户界面将显著降低开发难度。RealEvo‐IDE支持Windows和Linux,使得软件开发与部署可以分离。此外,现有应用程序的迁移也非常便捷。SylixOS完全支持C++和标准模板库(STL),这意味着使用C++开发的大型应用程序仅需少量修改即可运行。SylixOS还提供VxWorks[1]兼容性包,使VxWorks项目的迁移变得简单且自动化。SylixOS的内核模块与Linux相似在概念和功能上。开发人员可以像在Linux中一样,安全地使用内核模块来开发设备驱动程序。
  • 网络安全 :操作系统的大多数安全威胁来自互联网。SylixOS被广泛应用于多个行业,作为物联网(IOT)设备的控制系统。如果互联网攻击破坏了控制系统,损失将是不可弥补的。为了抵御网络攻击,SylixOS提供了许多内置和插件式安全保护模块。

内置模块:首先,SylixOS在登录时具有黑白名单管理模块。该模块会根据用户的登录行为检测潜在攻击。一旦检测到攻击,可疑机器将立即被隔离(加入黑名单)。只有经过预设冷却时间后,该机器才能再次访问SylixOS设备,否则可能被永久隔离。其次,SylixOS拥有强大的内置网络数据包过滤器。该设备可根据用户设定的规则过滤出指定的数据包。因此,关键系统服务受到保护,仅允许指定机器访问。

插件模块:SylixOS拥有一个网络安全防火墙。该防火墙功能强大且易于使用,能够有效抵御一般网络攻击。

  • 隔离机制 :针对操作系统的攻击也可能来自恶意软件。因此,对环境进行隔离非常重要,以便在发现恶意应用程序时将损害降至最低。容器是提供隔离的最常见方法之一。在SylixOS中,我们改进了通用容器技术,以满足高安全需求。ECS(嵌入式安全容器)是SylixOS中的一个嵌入式轻量级安全容器。ESC在操作系统和应用程序之间设有安全隔离边界,防止操作系统暴露给不可信应用程序。这种隔离可防止恶意应用程序直接攻击操作系统。

SylixOS是一个开源且成熟的实时操作系统,已在许多实际应用中得到充分检验和测试。SylixOS在进程、兼容性和安全领域具有独特优势,使其成为合格的工业控制RTOS。此外,其在多内核平台上的实时性能也具有竞争力。我们将在下一节讨论SMP调度算法的工作原理。

III. SylixOS中的对称多处理调度算法

为了实现恒定调度时间,一种常见的方法是位图优先级算法。该算法通过空间换时间的方式,在O(1)时间内找到最高优先级任务。在二维位图中,每个优先级表示为一个比特位。由于优先级数量固定(SylixOS中为1024),我们可以预定义最大行数和列数。在这种情况下,访问特定优先级元素的时间开销将是恒定的。然而,该算法需要进行扩展以适应SMP平台。为了在SMP平台上实现高效率,必须考虑负载均衡。位图本身无法负责在不同处理器之间分配任务。SylixOS上开发了一种扩展方法,操作系统在新线程准备执行时进行调度。

在SylixOS中,存在一个全局就绪表,而每个处理器都有一个本地就绪表。就绪表基于位图优先级算法,因此任何就绪表中的插入和弹出操作都可在O(1)时间内完成。此外,每个处理器包含一个候选表,最多容纳一个候选线程。就绪表中具有最高优先级的线程将被放入候选表中。通常情况下,处理器在完成当前任务后将执行候选线程。

当一个线程准备执行时,它将根据优先级被放入就绪表中。如果该线程被绑定到特定处理器,则将其放入相应的本地就绪表,否则放入全局就绪表。在此线程被放入就绪表之前,如果其优先级高于候选线程的优先级,则会将优先级轮转信号(记为CAND ROT)置为1。

A. 调度过程

在SylixOS中,我们的目标是在保持调度时间恒定的同时,平衡地利用多个处理器。我们的调度算法能够在O(1)时间内选择多个就绪任务。该过程可通过以下三个步骤实现。

  • 步骤1 :当系统调用或中断退出时,处理器将检查并更改其线程的执行顺序。
  • 步骤2 :处理器将找出需要执行的线程。处理器首先检查当前正在运行的线程是否可以被调度。如果该线程可以被调度,则检查CAND ROT是否已设置。如果候选表非空,则将候选线程与就绪表中具有最高优先级的就绪线程进行比较。若处理器设置了亲和性调度模式,则检查本地就绪表中线程的优先级;在通用调度模式下,则检查全局就绪表。随后,优先级较高的线程将被选为新的候选线程并放入候选表,而优先级较低的线程则被放回就绪表。这样,线程的执行顺序便按照优先级顺序重新排列。通过这种方式,CAND ROT信号将被清除。
  • 步骤3 :处理器将执行调度。如果候选线程不是工作线程,处理器将执行该候选线程;否则,处理器将发送一条SMP调度通知。

B. 对称多处理调度策略

某个处理器完成线程调度后,可能会向其他处理器发送SMP调度通知。该通知将表现为一个核间中断,从而在另一个处理器上触发线程调度。SylixOS中应用了三种调度策略。

  • 快速调度 :中断将通过CAND ROT信号发送到所有其他处理器。
  • 正常调度 :中断将被发送到所有带有CAND ROT信号的处理器中持有最低优先级工作线程的处理器。
  • 并发多内核均衡调度 :将通过CAND ROT信号向空闲处理器(无工作线程的处理器)发送中断。如果不存在此类处理器,则应用正常调度策略。

IV. 评估

在本节中,我们通过实验来评估SylixOS的效率。我们使用Cyclictest[5]来测试SylixOS的及时性。Cyclictest是一种常用的测试工具,用于评估操作系统的延迟。在每个处理器中,将创建一个线程并进行多次调用。用户在线程的两次连续调用之间设置一个时间间隔。系统会计算实际间隔与预期间隔之间的差值,并将该差值作为延迟。通过这种方式,延迟的大小可以反映操作系统的及时性。

我们使用Hackbench[6]作为微基准测试来测量Linux内核调度器的时间。Hackbench可以创建特定数量的进程对,每个进程对包含一个客户端进程(用于读取)和一个服务器进程(用于写入)。同时还会创建相同数量的管道,用于服务器和客户端进程之间的通信。因此,Hackbench可以为Cyclictest提供一个压力测试环境。

为了初步探究实时性能,我们分别在单核和多核平台上比较了SylixOS(实时)与Linux(非实时)的实时性差异。进行了无压力测试和压力测试,以检验系统的适应性。

表I 单核延迟(微秒)在无压力(左)和压力(右)条件下的表现

Max Min Avg Max Min Avg
无压力 压力
SylixOS 35 3 4 62 3 4
Linux 717 7 13 894 17 35

在单核测试中,我们使用OK335xS开发板[7]作为硬件平台。Linux系统的内核版本号为3.2.0。表I展示了单核实验的结果。无压力测试在Cyclictest中运行了100万次迭代,而压力测试在Cyclictest中运行了十万次迭代,其中压力环境由Hackbench生成。

在多核测试中,我们使用E9开发板[8]作为硬件平台,其嵌入的Linux系统内核版本号为3.0.35。在无压力测试和压力测试中,我们分别运行了十万次迭代。表II展示了多核实验的结果。

表II 无压力(上方)和有压力(下方)条件下多核延迟(微秒)

无压力
#0 #1 #2 #3 #0 #1 #2 #3
Min Avg Max Min Avg Max
SylixOS 2 4 13 1 3 10 1 2
6 9
Linux 8 16 108 17 90 116 10 21
104 117
有压力
#0 #1 #2 #3 #0 #1 #2 #3
Min Avg Max Min Avg Max
SylixOS 2 5 17 2 5 19 2 5
16 25
Linux 9 16 102 17 76 121 13 20
106 93

从结果中我们可以得出以下观察。首先,在单核测试中,SylixOS的延迟明显低于Linux,尤其是在最大延迟项目上。在多核测试中,SylixOS同样表现出更优的性能。在及时性方面,SylixOS在所有三项测试(最小、最大和平均延迟)中均表现更佳。这些测试结果表明SylixOS在及时性方面具有明显优势。其次,在多核测试中,SylixOS各CPU的延迟几乎相同,而Linux则表现出较大的波动。第三,对比单核测试和多核测试的结果可以发现,随着CPU核心数量的增加,SylixOS的平均延迟时间并未降低。相比之下,Linux的平均延迟有明显增加。

这些结果证明SylixOS在多核平台上运行时能够保持恒定级别的调度时间。此外,SylixOS在多核测试中的最大延迟甚至低于单核测试中的最大延迟。这是因为多核开发板上的单核性能优于单核开发板上的单核性能。

V. 结论

本文通过阐述SylixOS的发展历程并列举其主要特性,对其进行了简要介绍。此外,我们讨论了SylixOS中使用的SMP调度算法。实验结果表明,SylixOS在单核和多核平台上均具有良好的实时性。在E9开发板上,SylixOS的最大延迟不超过25微秒。同时证明,该SMP调度算法能够在多核平台上保持调度时间的恒定水平。

根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值