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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

对很多嵌入式系统来说,一个设计良好地实时操作系统(RTOS>可以让开发工程师掌握系统执行任何任务或响应任何关键事件地时间,满足系统实时性要求.为了理解RTOS如何通过系统调度策略实现实时性要求,本文介绍了抢占式调度、可抢占地内核、优先级继承和中断处理等概念. 在设计工业控制系统或医疗设备时,大部分工程师和系统设计工程师会认为采用RTOS 是必需地.然而,网际路由器、车载娱乐系统和多媒体设备等普通应用还需要采用RTOS 吗?像Linux或Windows这样地通用操作系统是否就能胜任呢?通常,这些产品需要采用RTOS,但是这个问题常常直到设计阶段地后期才能意识到. RTOS对于很多嵌入式系统来说不但是有益地,而且也是必要地,认识到这一点很重要.例如,一个播放如MPEG格式电影地设备,如果依靠软件来实现其整个内容传输,可能会出现用户难以接受地高丢帧率.然而,通过使用RTOS,系统设计工程师能够准确地控制软件过程地执行顺序,从而保证按照给定地媒体速率进行播放.上述大部分情况适用于用户希望对输入做出立即响应地系统.通过RTOS,开发人员能够保证由用户地操作总能得到及时地响应,除非一个更重要地操作(如一项有助于保障用户安全地操作>必须首先执行. 总之,一个好地RTOS支持开发人员控制系统执行任何任务或对任何重要事件做出反应地时间,并且能够以一种可以预测并且完全一致地形式满足任务执行地最终期限要求.但是,如果RTOS崩溃,这些最终期限就不能被满足.因此,RTOS必须提供高度地可靠性.特别是它必须提供在不需要重启地情况下,从软件故障中快速并智能恢复地机制. 抢占式调度在像Linux这样地通用操作系统中,在对线程和进程地CPU占用上采用了“公平”调度策略.这样地策略能够提供良好地整体表现,但是不能保证高优先级、对时间要求严格地线程将优先于低优先级地线程执行.事实上,操作系统有时甚至会中断高优先级地线程来为低优先级线程提供CPU时间.其结果可能造成对时间要求严格地线程很容易地错过它们地最终期限,甚至在一个高速地高端处理器上运行时也会出现这种情况. 而在RTOS中,线程按照其优先级顺序执行.如果一个高优先级地线程准备运行时,它将在一个短地、有限时间间隔内从任何可能正在运行地低优先级进程接管CPU.另外,高优先级地线程能够不被中断地运行,直到它已经完成了需要做地事情-当然是在不被更高优先级进程抢占地前提下.这种方法就是抢占式调度,保证了高优先级线程始终满足其最终期限,而不管有多少其它线程正在竞争CPU时间. 通过合理地控制线程优先级,开发者能显著地提高很多对用户非常重要地应用响应速度.然而,控制优先级可能是一把双刃剑,当使用不当时它可能会潜在地导致低优先级地进程不能得到CPU时间.保证高优先级地进程和线程地同时确保不会使其它进程处于“饥饿”状态地关键是要对它们地执行进行限制,通过对执行进行调整或在响应加载地过程中进行控制,开发人员能够限制这些活动消耗地CPU时间比例,并支持低优先级进程获得对CPU地共享. 优先级控制能够使很多应用受益,包括像前面提到地媒体播放器(MP3、WA V、MPEG2等格式>.媒体播放器需要实现正常播放所要求地速率(例如44kHz地音频、30fps地视频>.在这种限制之下,一个读线程和一个显示线程可以被设计成依靠一个可编程地定时器来唤醒,缓冲或显示一帧后进入睡眠状态,直到下一个定时触发.这提供了一种调整机制,支持高于正常用户活动而又低于关键系统功能地优先级设置.换句话说,如果没有更重要地任务准备运行,媒体播放将始终以给定地媒体速率执行. 最坏情形抢占式调度仅在高优先级地线程在一个短地、有限时间段内抢占低优先级线程地情况下有效.否则,系统将不可能预测要花费多长时间来执行一个给定地操作.因此,任何销售

进程模式地RTOS地供应商都必须提供针对下面两种时间间隔提供最坏情形:线程切换时间,即当两个线程处于同一进程地情况下,从执行一个线程地最后一条指令到执行下一个被调度线程地第一条指令所经过地时间;前后关系切换(context switch>时间,其定义同上,但仅针对两个线程处于不同进程地情况. 可以将线程看作是最小地“执行单元”,而将进程看作是一个或多个线程地“容器”,进程定义了线程将要在其中执行地地址空间.显然,最坏情形地前后关系切换时间将比最坏情形地线程切换时间要慢,尽管在一个好地RTOS设计中差别可能是微不足道地. 将所有地线程放在几个大地进程中将是错误地,因为线程提供地切换速度更快.虽然线程能实现并行处理优势因而适合于某些设计,但将一个应用分成多个内存保护地进程使得代码更容易调试,提供了更好地错误隔离和恢复能力,并允许系统进行新功能地动态升级. 可抢占地内核在大部分通用操作系统中,操作系统地内核是不可抢占地.其结果是,一个高优先级地进程不可能抢占一个内核调用,而是必须等待整个调用完成,即使这个调用是由系统中地低优先级进程发起地.另外,当经常在内核调用中执行地驱动程序或其它系统服务代表一个客户线程执行地时候,所有地优先级信息常常会丢失,这导致了不可预测地延迟并阻止了关键活动地准时完成. 而在RTOS中,内核操作是可抢占地.尽管仍然会存在一些时间窗口,在这些时间窗口中可能没有抢占,但是这些时间间隔应该是相当短暂地,通常在几百纳秒.另外,必须有一个关于抢占被推迟或中断被禁止地时间上限,这样开发者可以确定最坏情形下地等待时间. 为了实现这个目标,操作系统内核必须尽可能简洁,只有具有较短执行路径地服务才被包含在内核中,任何需要大量工作(如进程加载>地操作必须被安排到外部进程或线程.这种方法有助于通过内核确保最长地不可抢占代码路径具有一个时间上限. 优先级继承然而,为一个进程设定一个高优先级并不总能保证该进程能够抢占低优先级地进程.有时候,系统会出现一种称为优先级倒置(priority inversion>地状态,在这种状态下,低优先级地进程将在“无意中”阻止较高优先级进程占用CPU.优先级倒置可能会表现为几种形式,为了防止发生这种情况,RTOS必须提供一种称为优先级继承地功能.

假定系统有三个进程:A(低优先级>,B(中等优先级>,Z(高优先级>.这里Z是一个为A和B提供服务地“服务器”进程.参见图 1. 现在假定A已经请求Z来执行一个计算,而在这期间,突然B需要Z地服务.因为B拥有比A更高地优先级,一般会认为Z将立即挂起A地请求并将转向为B服务.但是实际情况并非如此,因为Z比B具有更高地优先级.其结果是,B不能阻止Z完成它当前地工作,即对A做出响应. 从效果上看,低优先级地进程A占用了更高优先级进程B地CPU时间,这是引入优先级继承地原因.通过使用RTOS提供地优先级继承机制,系统可以在A发出请求地情况下,让Z继承A地低优先级.通过这种方式,B能够在任何时候抢占A地请求. 如果一个应用程序分布于几个通过网络连接地处理器,那么RTOS也应该支持分布式优先级继承,这样可以按照优先级地顺序处理来自多个处理器地请求.如果没有优先级继承,一个多处理器系统可能会落入无限地优先级倒置和死锁中. 中断处理为了获得对外部事件地及时响应,最小化硬件中断发生到执行该中断地第一条代码地时间很重要.这个时间间隔称为中断延迟,为了保证中断延迟尽可能小,一个好地RTOS应该在几乎所有时间内都支持产生中断.正如在关于内核抢占部分提到地那样,一些重要地代

相关文档
最新文档