首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

准时的重要性:为嵌入式列车控制系统选择操作系统

准时的重要性:为嵌入式列车控制系统选择操作系统

为确保安全和效率,铁路和运输系统正在实施各种保护系统,如列车自动保护(ATP)、积极列车控制(PTC)和基于通信的列车控制(CBTC)等。地铁和其他轨道交通系统正在采用自动列车操作(ATO)系统并运行“无人驾驶”列车(没有驾驶员或驾驶员只用来处理紧急情况的列车)。

这些控制系统与安全息息相关。它们必须满足IEC 61508和EN 5012x标准中所设定的严格可靠性要求。本文侧重于介绍操作系统中对系统可靠性带来最直接影响的一些特点:确保实时性的架构特性、故障分离和故障恢复等功能。



图1 新西兰的ONTRACK安装了一个四频道RoIP装置,命名为ORC,作为IP网络和传统的VHF/IHF无线电网络之间的桥梁,用于促进列车安全运行和追踪轨道工人的位置。

标准

二十年前,欧洲电工标准化委员会颁发了铁路应用标准EN 50126,它定义了可靠性、可用性、可维护性和安全性的规范,同时颁布了用于铁路控制和保护系统软件的标准EN50128和用于发送信号的安全相关的电子系统的标准EN 50129。

EN 50128:强调了软件架构的重要性:“软件架构是软件和软件安全完整性等级开发的基本安全策略。”规定如果要求SIL 3 或SIL 4的系统部署COTS(商用现成)软件,“应定义一个策略以检测COTS软件的故障并保护系统免于故障”。

可靠性和隔离性

在一个软件系统中,可靠性是可用性和可靠性的组合。这些品质主要取决于操作系统审计架构。

操作系统架构是整个系统可靠性的基础,它决定了将组件与不同的SIL要求进行分离的难度和成本。

例如,一个ATO系统可能包含了一个显示非关键信息的多媒体组件。该组件只需要达到SIL1或甚至SIL 0(EN标准为非安全相关的软件定义了SIL 0)就可以了,而关键组件(处理与轨旁基础设施相关的通信、管理减速和制动,报警等)则需要SIL 3或更高的认证。一个有利于SIL 0组件分离的架构不能在系统的安全关键部分上妥协:

a) 简化设计,允许以最少的集成工作为SIL 0组件使用COTS软件

b) eli消除了为满足SIL 3要求而产生的设计、构建和验证非关键组件的成本。

c) 由于它减少了安全关键系统的范围,侧重于关键系统组件的开发和验证,使得整体系统更为安全。

架构

支持可靠性保证的操作系统通常被称为实时操作系统(RTOS)。实时操作系统的架构是不同的。最常见的架构是实时执行、单片式和微内核。

实时执行

尽管已有50年历史,实时执行模式依然是许多实时操作系统的基础。在此模式中,所有软件组件—内核、网络协议栈、文件系统、设备驱动程序和应用程序均在单一的内存地址空间里运行。

虽然有效,但该架构有两大弱点。首先,任何模块中的单一指针错误均能破坏内核或任何其它模块所使用的内存,从而可能导致系统范围内的故障。其次,系统崩溃也许没有留下帮助识别错误的诊断信息。

宏内核

宏内核实时操作系统通过使用一个架构解决了内存错误所引起的系统崩溃的问题,在该架构里,用户应用程序作为内存保护进程而运行。

该架构保护了内核免于错误的用户代码,但内核组件仍旧与文件系统、协议栈和驱动程序共享地址空间。因此,这些服务中的任何一个错误都能让系统崩溃。例如,在一个Linux操作系统中,驱动程序组成75%的代码,每一行显示能达到内核的潜在错误。与实时执行操作系统一样,单片式操作系统架构的系统也许难于满足可靠性的要求。

微内核

在一个微内核实时操作系统中,应用程序、设备驱动程序、文件系统和网络协议栈存在于内核之外的一个独立的地址空间;它们即与内核分离而且彼此分离。某一个组件中的故障不会波及系统。此外,由于它同样以可预见的方式运行,因此系统能重启故障组件。



图2 微内核:组件彼此分离,一个组件的故障不会波及整个系统


对于安全相关的系统,内核与其它组件彼此分离是有利的。不是所有的组件都需要实现系统的安全关键部分所需的SIL。所要求的是较低级别的SIL组件能与安全关键组件分离。

这种分离也能通过虚拟机实现(管理程序),但这种策略通常需要更强大的处理器,这限制了合适的处理器的选择并增加了成本。它也增加了系统的复杂程度,并可能影响实时性能。

实时操作系统的关键特点

微内核架构只是实现操作系统可靠性的一个特点。其它关键特点包括:

• 通过抢占低优先级的内核调用来满足实时性的承诺

• 由于优先级反转,防止不可预知的行为和系统故障

• 保证CPU资源调度的可用性以防止关键进程饥饿

• 利用软件看门狗监视进程,并在组件发生故障时采取纠正行动抢占式内核

抢占式内核是实时操作系统的一个核心特点,在一个没有抢占式内核调用的操作系统中,系统遇到不可预测的延迟会引起关键活动错过截止时间— 使得系统无法满足其可靠性的要求。

这些延迟是由高优先级用户线程等待完整的内核调用来完成所引起的,即使这个调用是系统中最低级别的进程造成的。更为糟糕的是,当驱动程序或其它系统服务(通常在内核调用时执行)代表客户线程执行时,优先级信息通常会丢失。

然而,在一个设计良好的实时操作系统中,抢占不会发生的时间窗极其短暂,通常是在纳秒级,实时操作系统对中断被禁止的时间和抢占关闭上规定了一个上限。该上限允许开发者确定最坏情况的延迟并在其设计中做调整。

为确保可预测性和关键活动的及时完成,实时操作系统必须尽可能简单,以便在通过内核的最长的非抢占式代码路径上有一个明确的上限。通过一个包括只用短执行路径服务的内核和分配给外部进程或线程的密集型操作(例如进程加载)能实现最佳的简易性。

优先级继承

优先级反转是一种低优先级线程阻止高优先级线程完成其工作的情况。表3显示了一个低优先级线程封锁高优先级线程的例子。这也许是通过同步引起(例如,警报和数据记录器共享由锁或信号灯控制的资源,警报等待数据记录器解除锁定的资源),或通过警报要求一项目前由数据记录器使用的服务引起的。

在图3的例子中,一个中等优先级的线程(数据聚合器)抢占低优先级的记录器,但不需要该记录器使用的资源,这使记录器保持了资源控制。当警报尝试运行,它抢占了聚合器并封锁,但不能访问仍被记录器控制的资源。由于警报的封锁,调度程序寻找能运行的优先级别最高的线程,并运行聚合器,颠倒线程优先级。



图3 有了优先级继承,高优先级线程不会被封锁

优先级继承是一个阻止优先级反转的机制。它将高优先级线程的优先级分配给低优先级线程直到线程完成。在上面的这个例子中,数据记录器将继承警报的优先级,因此不能被数据聚合器抢占。它将完成并恢复到原来的优先级,而且警报将解除封锁并不受数据聚合器的影响,该机制在图4中显示。



图4 自适应分区是保护特定线程和线程组的一套规则



时间分区

在与安全相关的系统里,如果一个子系统缺乏CPU周期,它提供的服务也许对其它子系统来说是不可用的。例如,在地铁系统里,如果一个车载ATP系统的通信栈进程在需要时无法响应,该车载ATP系统也许要与轨旁ATP基础设施承担通信中断并开始启动安全程序,减速或停止列车并中断上下线的服务。

时间分区通过硬件或软件的手段强制分配CPU预算,解决资源饥饿。它可以防止进程或线程垄断其它进程或线程需要的CPU周期。可能出现两种类型的分区:静态和自适应。

在静态分区中,任务在区内分组,每个区分配了一定比例的CPU时间。没有一个任务在任何区内能消耗超过分区预先确定的CPU时间。通过确保每个分区都能得到一定的CPU时间,该限制确保所有的关键进程总是能够保持运行。

不幸的是,没有进程能够使用比分配给它分区限定的更多的CPU周期,即使其它分区没有使用所有分配给它们的时间。因此,静态分区白白浪费了CPU周期并降低了系统处理高峰需求的能力。

与静态分区一样,自适应分区为进程或进程组保留了CPU周期。然而,不像静态分区,自适应分区使用动态调度算法,重新分配未使用的CPU周期给需要的分区。只有当CPU运行时,它才执行分区预算。自适应分区从而让系统以100% 的能力运行,仅当一个分区以上的进程竞争周期时,它才执行分区预算。

此外,自适应分区基于预先确定的标准,能在系统运行时调整预算。例如,一个负责制动调整的分区也许在每小时低于20公里的速度时被分配30%的CPU时间,而在更高速度时分配到45%的CPU时间。

软件看门狗

要求可用性保证的系统会实施以硬件为导向的高可用性解决方案和软件看门狗。

软件看门狗是一个监测系统并进行多阶段恢复或清除关闭的一个用户空间进程。看门狗必须自我检测并弹性处理内部故障。它如果意外停止,必须通过将其任务移交给镜像进程从而立即、完全重建其自我状态。

如发生故障,看门狗可以执行多种操作以确保系统安全性并恢复。例如,它能够中止然后重启故障进程,避免系统重启。或者,它也能终止该进程和相关进程,初始化硬件到一个安全状态,然后以协调的方式重新启动终止的进程。或者,如果故障至关重要,看门狗可以执行可控的关闭或重启整个系统并发出报警。

最后,软件看门狗能够监测传统的硬件看门狗不可见的系统事件。例如,硬件看门狗能确保驱动程序正服务于硬件,但可能无法检测到其他程序是否正确的与该驱动程序沟通。而软件看门狗可以弥补这一差距,当它检测到一个内部异常时能够采取行动。
返回列表