Chinaunix首页 | 论坛 | 博客
  • 博客访问: 323448
  • 博文数量: 54
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2238
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-24 20:59
个人简介

你永远不懂我伤悲,就像白天不懂夜的黑

文章分类

全部博文(54)

文章存档

2014年(1)

2013年(53)

分类: LINUX

2013-08-10 16:25:11

什么是实时

有许多种定义可以描述实时,这是因为不同任务需求各异,所以对实时的定义也不尽相同。一些任务可能要求平均响应时间,而另一些则可能要求每一个任务都必须能按时完成。

应用程序的响应时间是指,自应用程序收到启动命令——通常是由硬件中断触发——到应用程序执行完毕,产生结果为止所经历的时间间隔。比如工业控制中打开阀门、在可视模拟器中绘图或数据采集任务中的数据包处理这些都属于有确定响应时间的任务。

我们考虑一下打开阀门的情景。假设有一条传输带自动移动,其上方有一个染料喷头,侧面有一个传感器监视传输带移动。我们为传输带隔段上色,也就是说,当需要上色的部分传到喷头下方时,传感器将发送信号给系统,系统打开喷头阀门,向传输带喷射染料。我们应该要求打开阀门的平均时间准确呢?还是每次打开时间都必须准确?不用说,这里应该要求每次打开阀门时间都必须准确。

我们需要打开阀门时间不能晚于待上色位置以经过;关闭阀门也不能早于特定位置上色完毕前。另外我们也不能超时打开阀门,那样会将传输带的其它部分错误地染上涂料的。

打开阀门的最后有效时间和染色最后完毕时间是任务的最后期限,如果任务超过执行的最后期限(打开或关闭动作),就不能正确完成染色任务。如果说最后期限是1毫秒,就意味这从传感器发信号给系统到必须开始喷染料的时间间隔是1毫秒。为了保证不会超过最后期限,我们设计系统使其在收到传感器中断后960微妙开始上色。但实际的上色工作有时可能提前一点,有时可能延迟一点。

当然,开始时间并不是绝对准确的,不可能正好在中断发生后950微秒开始染色。比如可能这次染色早开始了10微秒,而下次却晚发生了13微秒。这种差异我们称为是波动。从我们的例子中可以看出,如果系统的波动很大,那么我们必须设计系统的执行响应时间更短些,这样才能满足最后期限要求。但是这样以来会做造成打开阀门往往早于实际需要,频繁发生就会浪费很多染料。可见一些实时系统不但需要一个最后期限而且也对波动大小有一定要求。我们认为所有超过最后期限的行为都是错误的。

操作环境是指操作系统和运行在其中的进程、中断活动和硬件设备的活动(比如磁盘)。我们希望能够有一种强健的实时应用程序的运行环境,以便我们可以同时运行任意数量的各种不同任务,而且同时能保证任务的执行性能。

如果某个操作环境我们可以确定给定响应或需求的最坏情况(最大延迟),我们便认为该操作环境是确定的,否则,如果不能确定最坏情况,那么该操作环境便是不确定的。实时应用程序需要确定的操作环境,所以实时操作系统必须能提供确定的操作环境。

非确定性往往是因为算法执行时间不是恒量所造成的,比如,如果一个操作系统中的调度程序必须遍历整个运行队列才能找到需要运行的下一个任务。该算法是线性的,即时间复杂度为O(n),也就是说,如果n越大(运行队列的任务数),那么搜索下一个任务的时间也就相应地越长。对于O(n)来说的算法来说,它的执行没有时间上限,所以如果响应时间取决于睡眠进程被唤醒并被选择执行的耗时,而且调度程序的时间复杂度为O(n),那么就无法确定最坏响应情况。而这正是Linux调度程序的特征。

对于普通系统来说,系统设计师不能控制用户到底可以创建多少个进程,但是对于嵌入式系统来说,通过某些系统特性,比如用户接口,可以限制进程数量,所以系统的运行环境可以保证调度程序的执行时间有限。我们可以设置操作系统的环境参数来获得一定的可确定性保证。注意在一个系统可能需要一定的优先级别和其它特性,但是只要调度时间是有限的,那么响应时间也就有限。

一个可视模拟程序可能要求的是图像的平均刷新率,比如每秒60帧。只要帧不频繁丢失,而且在一段时间内达到平均每秒60帧的话,系统性能就可以接收。

上色喷头和帧的平均刷新率两个例子分别对应于我们所称的硬实时软实时。硬实时应用程序的行为必须满足它们的最后期限,否则将带来不可原谅的结果,有些东西可能爆炸,有些可能崩溃,有些操作可能失败,甚至会有人员伤亡。软实时一般也需要满足最后期限,但是如果只有少量轻微的超期行为,那么系统仍然被认为是可靠的。

我们考虑另一个例子,假设我们生产了一个机器鼹鼠帮助科学家研究动物行为,通过细心地观察我们发现海豹从冰洞里爬出前,鼹鼠有600毫秒的时间从洞口逃跑,否则就要被海豹吃掉。我们的机器鼹鼠如果在平均600毫秒内逃开,它能否兴存?也许可以,但必须果海豹的攻击速度和鼹鼠的反映时间同步改变。你是否会按照这个假设来设计鼹鼠呢?我们知道从洞口周边一定范围内海豹能抓住鼹鼠,所以我们的鼹鼠必须在600毫秒内跑出这个范围,这个范围被有些人称作死亡线(最后期限)。

操作环境如果要适用于硬实时应用程序,就必须保证所有程序的最后期限都必须严格满足。这意味着操作系统中的所有行为都必须是可确定的,如果操作系统想用于软实时应用程序,那么通常意味着偶然的延迟可能发生,但是这种延迟不能无节制。

应用程既有定量要求也有定性要求。对于可视模拟程序,定量要求指系统响应应该足够快,保证看起来自然。响应时间有定量要求,比如用户输入一真图象后,要求能在33.3毫秒内被绘制出来。也就是说,如果一个飞行员移动飞行模拟中的控制杆,那么窗外的视角也必须能在33.3毫秒内根据新的飞行路线更新。你一定要问33.3秒的时间需要是根据什么得到的?它是根据人的传感系统——这个速度足可以保证人感觉视觉模拟场景很流畅。

实时需要不是说时间要求短,而是指有时间要求。如果改变绘图程序的时间要求为33.3秒而不是原来的33.3毫秒,那么这个系统仍然属于实时系统。不同之处可能在于满足响应时间要求的方法不尽相同。在Linux系统中33.3毫秒的时间要求需要使用特别的内核和相关函数,而33.3秒的要求使用标准内核就可以达到。

所以说单从执行速度的快慢不能说明是否是实时系统,反之易然。但是快速运行是实时操作系统的基本特征。这点有助于我们区分实时操作系统和实时应用程序。实时应用程序有时间相关的要求,实时操作系统可以保证实时应用程序的性能。

实际上,通用目的的操作系统,比如Linux,如果可以合理设置操作环境的话,都能为最后期限要求相对宽松(长)的任务提供了足够的措施来满足时间要求。因此常有人说现在处理器已经非常快,所以不在需要实时操作系统了。但这种情况仅仅对那些相对无聊的项目适用。

    但你必须明白,如果操作环境配置不恰当,那么即使是经过广泛的测试毫无问题的的系统,执行时间超过最后期限的问题仍有可能发生。因为线性算法等因素可能潜伏在代码中,而没被发现。

令一个需要注意的地方是群体效应(audience effect,常言说得好“群体对表演越重要,表演失败的可能性越大”。群体效应例子举不胜举,如同不可重现性一样,它的罪魁祸首通常都是竞争条件,竞争条件指的是一种状态,它的结果取决于任务之间运行的相对速度或外界环境。所有的实时系统按理来说都存在竞争条件,但设计优秀的系统,它的竞争条件仅会发生在最后期限附近。任务独立测试无法证明竞争条件是否已经避免。

因为操作系统中大多数任务都是被动响应请求而不是主动执行的,所以许多会产生延迟的活动都是可以避免的,为了使得特殊应用程序(进程)可以满足最后期限的要求,那些CPU范畴进程的竞争者,如磁盘I/O、系统调用或中断都应该被控制。构建一个合适的受限操作环境需要考虑的因素不少,其中操作系统特性和驱动程序是首先应该关心的。操作系统可能会堵塞中断或不允许系统调用被抢占。这些活动可能是非确定的,所以可能会造成应用程序无法接受的延迟。

阅读(3164) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~