您的位置:控制工程论坛网论坛 » 嵌入式系统 » “实时”是什么?

cxf

cxf   |   当前状态:离线

总积分:440  2025年可用积分:0

注册时间: 2007-03-23

最后登录时间: 2008-01-31

空间 发短消息加为好友

“实时”是什么?

cxf  发表于 2007/3/31 16:48:10      1314 查看 1 回复  [上一主题]  [下一主题]

手机阅读

实时”是什么?

一个实时系统首先是一个信息系统,它的正确性不仅仅依赖于算法的逻辑输出, 还依赖于产生这些逻辑输出的及时性。”

仅仅有正确的输出结果是不够的,输出结果还必须在一个特定的时间间隔内到来。 需要注意:在上面的定义中,一个实时系统并不是像人们很自然地想到的那样必须要快。 比方说:一个船只导航系统,由于它的速度很慢,并且人们经常有“充足” 的时间来对它的控制作出决定,所以初看起来可能不像一个实时系统。 但无论如何,根据我们的定义,它就是一个实时系统。

注意我们定义的是一个“实时系统”而不是一个“立即系统”。 一个立即系统通常非常快,并且可以给人很“现实”的印象。 典型地,所有的模拟器和交互式游戏都需要给用户一个连续的时间画面, 并且,在单位时间内能生成的图像越多越好。

下面我们来更详细地考虑一下“瞬时限制”的概念。 假设一个人想通过控制一个引擎的速率来应付不同的负载, 并假设他想使用一个PID(Proportional- Integral-Derivative)控制。 从我们的观点来看,PID控制就是一个函数,它接受一组参数 (在这个例子中是引擎的速率),并且返回一个能应用于引擎的控制信号的值, 根据这个值来对引擎施加相应的电压。PID算法设计背后的理论(顺便提一下它是多方面的) 假设计算时间是可以忽略不计的,也就是说,从读取引擎的速率到我们开始执行这一段时间很短。 正常情况下,系统允许有一段小的延迟。 这种类型的控制的另一个特性就是它必须周期性地执行。 换言之,PID算法必须按照一定的规则执行。 如果连续两次调用PID函数间隔的时间太长, 那么引擎可能会达到一个我们所不期望的速率。总的来讲: PID算法可以被看作一个程序,它必须周期性地执行(Pi); 从它开始执行直到结束所经过的时间绝对不能大于设计PID时指定的最大时间(Di), 并且,根据处理器的速度,PID代码也需要一个特定的时间(Ci) . 。

Pi:任务i的周期。

Di:任务i的最后期限。

Ci:任务i的最大(在最差情况下)计算时间。

如果系统是单任务的,那么做一个实时系统不存在任何问题: 处理器或者能在所需要的时间内完成任务,或者不能。 如果处理器不是足够快,那么我们只需要换一个快一些的CPU。

当系统是由多个任务组成的,并且需要为它们分配一个(或多个)处理器的处理能力时, “实时”问题就出现了。这阻碍了我们使用一个经典的分时系统,比方说Linux。 当然,绝没有必要去提那些诸如“不要在Windows上编写需要实时性的程序”之类的事了。 一个好一点的建议是:不要在那种平台上写任何类型的程序。

并不是所有的实时系统都是相同的: 控制一个汽车的ABS刹车系统或飞行器引擎的燃料注射系统和控制一个MPEG文件的解压及视觉效果是不同的。 在第一种情况下,执行时间的一个小的延迟就有可能危及驾驶员的生命安全或者会导致大量的物质损失。 而第二种情况只会引起系统质量的退化(图像可能会停住并可能丢失一些帧)。 第一种类型的系统被称作硬实时系统,第二种为软实时系统。 在此我们将集中讨论硬实时系统。

设计一个硬实时系统要经过几个阶段:首先, 要执行的任务和瞬时限制必须经过鉴定能满足我们的条件; 第二,编写代码,每一个实时任务都要经过测量和调度测试, 以保证在系统运行过程中每个任务都不能超过它所允许的时间最大值。 调度测试由应用于一系列测试的整个任务集组成, 如果能通过第二阶段的测试,就有可能保证没有任务可能会运行超过最大的期限。 如果测试不能通过的话,那么设计就必须重新从头开始: 选择一个快一点的CPU,或者使用其它的算法来实现这些任务。

总结起来,任务有三个时间标识:Pi,Di和Ci。系统的目标是, 保证所有的任务在所有的执行过程中都不超过系统允许的时间最大值。 为了保证运行时间,系统必须是可预测的。 说一个系统是一个实时系统和说一个系统是可预测的实际上是一样的。

 

操作系统和实时系统有什么关系?

系统响应语义的正确性是程序员的责任,而瞬时的正确性依赖于操作系统(OS)。

操作系统必须能支持和组织所有任务的执行,处理中断也是它的职责。 操作系统必须提供:

  • 调度算法
  • 进程间通讯机制(信号量、消息等)
  • 中断处理
  • 在每一个周期内激活任务

与普通的操作系统不同,实时操作系统的目标是最大程度地减少复杂性。 我们不需要一个能做很多事情的系统,最重要的是它能在规定的时间内可预测地执行我们的任务。

在一个实时系统上,一个正常情况下需要10个单位时间的任务, 由于上下文环境的改变,在最坏的情况下消耗12的单位时间是可取的。 而在其它普通的操作系统上,一个平均情况下需要3个单位时间的程序经常会执行20个单位时间。

如果发现一个实时系统比普通的操作系统“慢”,我们不必感到奇怪。 有时候,为了获得可预测的行为,甚至需要禁止使用Cache, 这会带来一些性能上的丢失。对一个实时系统来说, 处理器Cache所提供的管道线单元和预言跳转算法是最大的敌人。

 

1楼 0 0 回复