APP下载

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

2009-07-05

科教导刊 2009年36期
关键词:驱动程序调用线程

冯 英

摘要为了理解RTOS如何通过系统调度策略实现实时性要求,本文介绍了抢占式调度、可抢占的内核等概念。

关键词操作系统实时性能策略

中图分类号:TP3文献标识码:A

一个好的RTOS支持开发人员控制系统执行任何任务或对任何重要事件做出反应的时间,并且能够以一种可以预测并且完全一致的形式满足任务执行的最终期限要求。但是,如果RTOS崩溃,这些最终期限就不能被满足。因此,RTOS必须提供高度的可靠性。特别是它必须提供在不需要重启的情况下,从软件故障中快速并智能恢复的机制。

1 抢占式调度

在像Linux这样的通用操作系统中,在对线程和进程的CPU占用上采用了“公平”调度策略。这样的策略能够提供良好的整体表现,但是不能保证高优先级、对时间要求严格的线程将优先于低优先级的线程执行。事实上,操作系统有时甚至会中断高优先级的线程来为低优先级线程提供CPU时间。其结果可能造成对时间要求严格的线程很容易地错过它们的最终期限,甚至在一个高速的高端处理器上运行时也会出现这种情况。优先级控制能够使很多应用受益,包括像前面提到的媒体播放器(MP3、WAV、MPEG2等格式)。媒体播放器需要实现正常播放所要求的速率(例如44kHz的音频、30fps的视频)。在这种限制之下,一个读线程和一个显示线程可以被设计成依靠一个可编程的定时器来唤醒,缓冲或显示一帧后进入睡眠状态,直到下一个定时触发。这提供了一种调整机制,支持高于正常用户活动而又低于关键系统功能的优先级设置。换句话说,如果没有更重要的任务准备运行,媒体播放将始终以给定的媒体速率执行。

2 最坏情形

抢占式调度仅在高优先级的线程在一个短的、有限时间段内抢占低优先级线程的情况下有效。否则,系统将不可能预测要花费多长时间来执行一个给定的操作。因此,任何销售进程模式的RTOS的供应商都必须提供针对下面两种时间间隔提供最坏情形:线程切换时间,即当两个线程处于同一进程的情况下,从执行一个线程的最后一条指令到执行下一个被调度线程的第一条指令所经过的时间;前后关系切换(contextswitch)时间,其定义同上,但仅针对两个线程处于不同进程的情况。将所有的线程放在几个大的进程中将是错误的,因为线程提供的切换速度更快。虽然线程能实现并行处理优势因而适合于某些设计,但将一个应用分成多个内存保护的进程使得代码更容易调试,提供

了更好的错误隔离和恢复能力,并允许系统进行新功能的动态升级。

3 可抢占的内核

在大部分通用操作系统中,操作系统的内核是不可抢占的。其结果是,一个高优先级的进程不可能抢占一个内核调用,而是必须等待整个调用完成,即使这个调用是由系统中的低优先级进程发起的。另外,当经常在内核调用中执行的驱动程序或其它系统服务代表一个客户线程执行的时候,所有的优先级信息常常会丢失,这导致了不可预测的延迟并阻止了关键活动的准时完成。为了实现这个目标,操作系统内核必须尽可能简洁,只有具有较短执行路径的服务才被包含在内核中,任何需要大量工作(如进程加载)的操作必须被安排到外部进程或线程。这种方法有助于通过内核确保最长的不可抢占代码路径具有一个时间上限。

4 如何提高可靠性

我们已经明白怎样使RTOS具有可以预测性,但是如何实现其可靠性呢?答案在很大程度上取决于RTOS的架构。采用微内核(mricokernel)架构来提供更精确的故障隔离,像QNXNeutrino这样的操作系统都基于微内核架构。微内核有两个明确的特征:(1)在操作系统内核中只实现了一个包含了基本OS服务的小内核(如信号量、定时器、任务调度等)。包括驱动程序、文件系统、协议栈和用户应用程序在内的所有其它的组件在内核外部分离的、保护内存的进程中运行。有问题的系统服务不再作为孤立的故障点,而是在它破坏其它服务或操作系统内核之前被终止并重启。(2)所有的组件能够通过消息传递进行通信,一个定义良好的通信机制保障了程序在保持彼此安全隔离的前提下进行数据交换。适当实现的消息传递也可以作为一个虚拟的“软件总线”,允许几乎任何的软件组件,甚至是一个设备驱动程序被动态地加入或替换,对于必须提供连续服务的系统而言这是一项关键要求。

和传统的操作系统架构相比,微内核支持嵌入式设备赢得明显更快的平均修复时间(MTTR)。例如,如果一个设备驱动程序失败将可能出现以下情况:操作系统可以终止该驱动程序,回收其正在使用的资源,并对其进行重新启动,这个过程通常这只需要几个毫秒时间。尽管和传统的操作系统相比,基于消息传递的微内核RTOS通常提供了更好的容错性和动态升级能力,也有一些观点认为消息传递增加了开销。在实际应用中,如果实现正确,消息传递的性能可以接近底层硬件的内存带宽。例如,一个微内核RTOS可以采用多段式(multipart)消息和线程到线程的消息数据直接拷贝等各种技术,来确保系统性能可以达到传统的进程间通信(IPC)方法的水平。由一些组织如DedicatedSystems等进行的独立测试证实,和传统的RTOS相比,微内核RTOS在一系列的实时指标方面表现良好,在很多情况下甚至有更好的表现。

猜你喜欢

驱动程序调用线程
避免Windows系统更新反复安装显示驱动
阻止Windows Update更新驱动程序
基于Android Broadcast的短信安全监听系统的设计和实现
Java多线程产生安全问题及对策分析
采用ScheduledThreadPoolExecutor执行定时重试任务时内存溢出的分析及解决
利用RFC技术实现SAP系统接口通信
妙用鼠标驱动
驱动程序更新与推荐
C++语言中函数参数传递方式剖析
Java的多线程技术探讨