新闻中心

EEPW首页>嵌入式系统>设计应用> 提高实时操作系统的实时性能和可靠性策略

提高实时操作系统的实时性能和可靠性策略

作者: 时间:2009-05-06 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/258027.htm
可抢占的内核

在大部分通用操作系统中,操作系统的内核是不可抢占的。其结果是,一个高优先级的进程不可能抢占一个内核调用,而是必须等待整个调用完成,即使这个调用是由系统中的低优先级进程发起的。另外,当经常在内核调用中执行的驱动程序或其它系统服务代表一个客户线程执行的时候,所有的优先级信息经常会丢失,这导致了不可猜测的延迟并阻止了关键活动的准时完成。

而在中,内核操作是可抢占的。尽管仍然会存在一些时间窗口,在这些时间窗口中可能没有抢占,但是这些时间间隔应该是相当短暂的,通常在几百纳秒。另外,必须有一个关于抢占被推迟或中断被禁止的时间上限,这样开发者可以确定最坏情形下的等待时间。

为了实现这个目标,操作系统内核必须尽可能简洁,只有具有较短执行路径的服务才被包含在内核中,任何需要大量工作的操作必须被安排到外部进程或线程。这种方法有助于通过内核确保最长的不可抢占代码路径具有一个时间上限。

优先级继续

然而,为一个进程设定一个高优先级并不总能保证该进程能够抢占低优先级的进程。有时候,系统会出现一种称为优先级倒置的状态,在这种状态下,低优先级的进程将在“无意中”阻止较高优先级进程占用。优先级倒置可能会表现为几种形式,为了防止发生这种情况,必须提供一种称为优先级继续的功能。

假定系统有三个进程:A,B,Z。这里Z是一个为A和B提供服务的“服务器”进程。

现在假定A已经请求Z来执行一个计算,而在这期间,忽然B需要Z的服务。因为B拥有比A更高的优先级,一般会认为Z将立即挂起A的请求并将转向为B服务。但是实际情况并非如此,因为Z比B具有更高的优先级。其结果是,B不能阻止Z完成它当前的工作,即对A做出响应。

从效果上看,低优先级的进程A占用了更高优先级进程B的时间,这是引入优先级继续的原因。通过使用提供的优先级继续机制,系统可以在A发出请求的情况下,让Z继续A的低优先级。通过这种方式,B能够在任何时候抢占A的请求。

假如一个应用程序分布于几个通过网络连接的处理器,那么RTOS也应该支持分布式优先级继续,这样可以按照优先级的顺序处理来自多个处理器的请求。假如没有优先级继续,一个多处理器系统可能会落入无限的优先级倒置和死锁中。

中断处理

为了获得对外部事件的及时响应,最小化硬件中断发生到执行该中断的第一条代码的时间很重要。这个时间间隔称为中断延迟,为了保证中断延迟尽可能小,一个好的RTOS应该在几乎所有时间内都支持产生中断。正如在关于内核抢占部分提到的那样,一些重要的代码段的确需要暂时屏蔽中断。这种最大的屏蔽时间通常被定义为最大的中断延迟。

在某些情况下,硬件中断处理器必须调度并运行一个更高优先级的线程。在这样的情况下,中断处理器将返回并指示一个事件将被处理。这样的处理将引入了第二种形式的延迟-调度延迟,这个延时必须在设计中加以考虑。调度延迟是介于用户的中断处理器的最后一条指令和驱动程序线程第一条指令的执行之间的时间。

在一个嵌入式系统中可能会同时出现多个硬件中断。例如,在一个病人监护系统中,当一个传感器记录了病人心跳的一次变化并且网卡接收到网络传来的数据的同时,护士按了触摸屏。很明显,一些中断应该立即得到处理,而其他的则可以延缓。通过提供对嵌套中断的支持,RTOS支持嵌入式系统优先处理更高优先级的中断。

如何提高可靠性

我们已经明白怎样使RTOS具有可以猜测性,但是如何实现其可靠性呢?答案在很大程度上取决于RTOS的架构。

例如在实时执行模式架构中,大部分或所有软件组件都在一个单一的内存地址空间中运行,包括操作系统内核、网络协议栈、设备驱动程序、应用程序等。虽然很有效率,但这种架构有两个明显的缺陷:在任何组件中的一个指针错误,不论这个错误多么细微,都可能破坏操作系统内核或任何其它组件,导致不可猜测的行为和整个系统的崩溃;很难动态修复或替换任何有故障的组件。在大多数情况下,出现这些问题时系统复位是唯一的选择。

一些RTOS,也像Linux一样,试图通过使用单内核架构来解决这个问题。在这种架构中,用户的应用程序在隔离的、受保护内存地址空间中运行。假如一个应用程序试图访问其地址空间之外的数据,内存治理单元将通知操作系统,操作系统可能会采取保护措施,例如终止出错进程。然而,这样的操作系统需要将大多数或所有驱动程序、文件系统和其它系统服务绑定到内核中。因此,任何组件中的一个错误都可能带来灾难性的内核故障。

第三种方法是采用微内核架构来提供更精确的故障隔离,像QNXNeutrino这样的操作系统都基于微内核架构。微内核有两个明确的特征:

在操作系统内核中只实现了一个包含了基本OS服务的小内核。包括驱动程序、文件系统、协议栈和用户应用程序在内的所有其它的组件在内核外部分离的、保护内存的进程中运行。有问题的系统服务不再作为孤立的故障点,而是在它破坏其它服务或操作系统内核之前被终止并重启。

所有的组件能够通过消息传递进行通信,一个定义良好的通信机制保障了程序在保持彼此安全隔离的前提下进行数据交换。适当实现的消息传递也可以作为一个虚拟的“软件总线”,答应几乎任何的软件组件,甚至是一个设备驱动程序被动态地加入或替换,对于必须提供连续服务的系统而言这是一项关键要求。

和传统的操作系统架构相比,微内核支持嵌入式设备赢得明显更快的平均修复时间。例如,假如一个设备驱动程序失败将可能出现以下情况:操作系统可以终止该驱动程序,回收其正在使用的资源,并对其进行重新启动,这个过程通常这只需要几个毫秒时间。

尽管和传统的操作系统相比,基于消息传递的微内核RTOS通常提供了更好的容错性和动态升级能力,也有一些观点认为消息传递增加了开销。在实际应用中,假如实现正确,消息传递的性能可以接近底层硬件的内存带宽。例如,一个微内核RTOS可以采用多段式消息和线程到线程的消息数据直接拷贝等各种技术,来确保系统性能可以达到传统的进程间通信方法的水平。由一些组织如DedicatedSystems等进行的独立测试证实,和传统的RTOS相比,微内核RTOS在一系列的实时指标方面表现良好,在很多情况下甚至有更好的表现。


评论


相关推荐

技术专区

关闭