2011年(94)
分类:
2011-05-30 17:07:41
对很多嵌进式系统来说,一个设计良好的实时操纵系统(RTOS)可以让开发工程师把握系统执行任何任务或响应任何关键事件的时间,满足系统实时性要求。为了理解RTOS如何通过系统调度策略实现实时性要求,本文先容了抢占式调度、可抢占的内核、优先级继续和中断处理等概念。
在设计产业控制系统或医疗设备时,大部分工程师和系统设计工程师会以为采用RTOS是必须的。然而,网际路由器、车载娱乐系统和多媒体设备等普通应用还需要采用RTOS吗?像Linux或Windows这样的通用操纵系统是否就能胜任呢?通常,这些产品需要采用RTOS,但是这个题目经常直到设计阶段的后期才能意识到。
RTOS对于很多嵌进式系统来说不但是有益的,而且也是必要的,熟悉到这一点很重要。例如,一个播放如MPEG格式电影的设备,假如依靠软件来实现其整个内容传输,可能会出现用户难以接受的高丢帧率。然而,通过使用RTOS,系统设计工程师能够正确地控制软件过程的执行顺序,从而保证按照给定的媒体速率进行播放。上述大部分情况适用于用户希看对输进做出立即响应的系统。通过RTOS,开发职员能够保证由用户的操纵总能得到及时的响应,除非一个更重要的操纵(如一项有助于保障用户安全的操纵)必须首先执行。
总之,一个好的RTOS支持开发职员控制系统执行任何任务或对任何重要事件做出反应的时间,并且能够以一种可以猜测并且完全一致的形式满足任务执行的终极期限要求。但是,假如RTOS崩溃,这些终极期限就不能被满足。因此,RTOS必须提供高度的可靠性。特别是它必须提供在不需要重启的情况下,从软件故障中快速并智能恢复的机制。
抢占式调度
在像Linux这样的通用操纵系统中,在对线程和进程的CPU占用上采用了“公平”调度策略。这样的策略能够提供良好的整体表现,但是不能保证高优先级、对时间要求严格的线程将优先于低优先级的线程执行。事实上,操纵系统有时甚至会中断高优先级的线程来为低优先级线程提供 CPU时间。其结果可能造成对时间要求严格的线程很轻易地错过它们的终极期限,甚至在一个高速的高端处理器上运行时也会出现这种情况。
而在RTOS中,线程按照其优先级顺序执行。假如一个高优先级的线程预备运行时,它将在一个短的、有限时间间隔内从任何可能正在运行的低优先级进程接管CPU。另外,高优先级的线程能够不被中断地运行,直到它已经完成了需要做的事情-当然是在不被更高优先级进程抢占的条件下。这种方法就是抢占式调度,保证了高优先级线程始终满足其终极期限,而不管有多少其它线程正在竞争CPU时间。
通过公道地控制线程优先级,开发者能明显地进步很多对用户非常重要的应用响应速度。然而,控制优先级可能是一把双刃剑,当使用不当时它可能会潜伏地导致低优先级的进程不能得到CPU时间。保证高优先级的进程和线程的同时确保不会使其它进程处于“饥饿”状态的关键是要对它们的执行进行限制,通过对执行进行调整或在响应加载的过程中进行控制,开发职员能够限制这些活动消耗的CPU时间比例,并支持低优先级进程获得对CPU的共享。
优先级控制能够使很多应用受益,包括像前面提到的媒体播放器(MP3、WAV、MPEG2等格式)。媒体播放器需要实现正常播放所要求的速率(例如44kHz的音频、30fps的视频)。在这种限制之下,一个读线程和一个显示线程可以被设计成依靠一个可编程的定时器来唤醒,缓冲或显示一帧后进进睡眠状态,直到下一个定时触发。这提供了一种调整机制,支持高于正常用户活动而又低于关键系统功能的优先级设置。换句话说,假如没有更重要的任务预备运行,媒体播放将始终以给定的媒体速率执行。
最坏情形
抢占式调度仅在高优先级的线程在一个短的、有限时间段内抢占低优先级线程的情况下有效。否则,系统将不可能猜测要花费多长时间来执行一个给定的操纵。因此,任何销售进程模式的RTOS的供给商都必须提供针对下面两种时间间隔提供最坏情形:线程切换时间,即当两个线程处于同一进程的情况下,从执行一个线程的最后一条指令到执行下一个被调度线程的第一条指令所经过的时间;前后关系切换(context switch)时间,其定义同上,但仅针对两个线程处于不同进程的情况。
可以将线程看作是最小的“执行单元”,而将进程看作是一个或多个线程的“容器”,进程定义了线程将要在其中执行的地址空间。显然,最坏情形的前后关系切换时间将比最坏情形的线程切换时间要慢,尽管在一个好的RTOS设计中差别可能是微不足道的。
将所有的线程放在几个大的进程中将是错误的,由于线程提供的切换速度更快。固然线程能实现并行处理上风因而适合于某些设计,但将一个应用分成多个内存保护的进程使得代码更轻易调试,提供了更好的错误隔离和恢复能力,并答应系统进行新功能的动态升级。
可抢占的内核
在大部分通用操纵系统中,操纵系统的内核是不可抢占的。其结果是,一个高优先级的进程不可能抢占一个内核调用,而是必须等待整个调用完成,即使这个调用是由系统中的低优先级进程
最初的设计可以仅仅使用一个时钟来创建模块间的同步和并发性。随着定时的精细化,该时钟可以成为天生硬件的时钟,并且可以被用为定时正确模型。此外,这也可能是一个伪精确定时的模型。这种模型对丈量模块的总定时和相互作用以提供建模系统的性能评估是非常有用的。该模型能够提供第一时间的性能评估并且仍可以非常快的速度运行。除此之外,你可以估算该模型在各种平台上的执行时间。这提供了一个探究系统模型中不同硬件架构之间的适宜性的机会。尽管采用这个方法建立的模型不是循环精确型的,但它提供的精致程度仍远远超过评估性能的手工建模(由于通讯和相互作用模型的复杂性)。 SystemC 为治理器和系统架构提供了一个工具以正确定义复杂动态系统的规范,这无法用图表和命令来完成。利用定时模型,该架构可以为捕捉动态和相互作用行为的可执行规范进行编码。一旦汇编完成,这个可执行编码就产生终极系统的模拟动态行为。
|