发布
社区首页 >问答首页 >如何修改软件成为实时的?

如何修改软件成为实时的?
EN

Software Engineering用户
提问于 2017-01-05 10:16:57
回答 3查看 7.4K关注 0票数 9

首先,我想提到我是实时系统编程的新手,这就是为什么我不确定我的问题是否正确。很抱歉,但我需要帮助

简单地说:如何实现硬实时软件以确保其符合硬截止日期?是否有必要使用一些QNX特性?或者仅仅为linux编写它,移植到QNX,默认情况下它将是实时的?

完整的问题:我们已经实现了一些复杂的跨平台多进程软件,包括Linux、Windows、Android和QNX的进程间通信。编程语言是C++,我们使用其他语言的Boost和planty。我们的软件做的很好和迅速,但它仍然是原型。为了生产目的,我们需要实时地做一些特性,因为它们是非常重要的,并且使用我们软件的人的安全可能依赖于它们。它们的工作速度相当快--高达几百毫秒。但由于这个事实,我不确定我们的系统是否是实时的(我说得对吗?)

因此,有一个主要的问题:如何修改我们的软件成为实时的?我搜索了很多,但我还是不知道该怎么做。

关于我们的平台的一些附加信息: Linux和Windows,我们目前只用于测试目的。Android -我们还没有决定是否需要它。QNX -是我们生产的目标操作系统。我想我下一个问题的答案是“否”:)但是是否有可能实现跨平台实时软件(用于实时操作系统( OSes )以及通用OSes (GPOS) )?

我们是否需要只为QNX实现所有的实时功能?但我还是不知道该怎么做。有人能解释一下这个问题吗?

EN

回答 3

Software Engineering用户

发布于 2017-01-05 10:47:18

快速并不意味着实时,实时并不意味着快速。

实时意味着交付结果的日期与其价值一样重要。换句话说,如果结果有一个正确的价值,但交付太早或太晚,那么总体结果是错误的。

举个例子,想想一个视频播放器。如果视频帧不能以正确的速度显示,用户就不会满意。更糟的是,如果图像和声音不同步。

这个例子表明,一些实时应用程序可以在当前通用的OSes上实现.

但是硬实时和软实时在截止日期错过的后果上是有区别的:在软实时系统中,这只是一种烦恼或退化的服务(在视频播放器的例子中想一想几秒钟内冻结的图像),而在硬实时系统中(例如在核电站),这是一个(潜在的灾难性的)故障。

票数 38
EN

Software Engineering用户

发布于 2017-01-05 11:44:21

正如@mouviciel已经说过的,实时和快速实际上是两个独立的属性,尽管许多实时截止日期意味着需要相对快速的响应。

在编写实时软件时,除了正确的响应之外,最重要的属性是您可以准确地预测响应的速度。对于硬实时功能,您甚至必须能够保证,在所有可能的条件下,除非完全停电,最后期限将得到满足。

不可预测性的典型来源可在

  • 动态内存分配和垃圾收集
  • (较高优先级)中断
  • 操作系统中的调度程序
  • 对象的动态创建和销毁
  • 大量有条件执行的代码

我并不是说你必须避免那些领域(因为你很可能不能),但你必须意识到它们会如何影响你可以很容易地预测你会满足相关特性的实时截止日期。

票数 15
EN

Software Engineering用户

发布于 2017-01-05 15:04:07

我想对实时的两句解释是,实时系统的设计是为了理解和控制从输入变化到输出变化的最坏情况下的响应时间。

这需要一个涵盖整个系统的分析。假设您有一个由USB键盘和制动器伺服组成的简单系统。用这个系统你能达到什么反应能力?你可能不得不考虑:

  • 输入轮询频率,以及这需要多长时间
  • 输入中断延迟
  • 一旦有输入事件,操作系统上下文切换时间
  • 操作系统任务的优先排序
  • 避免在程序中使用动态分配或虚拟内存,以避免不可预测的响应延迟或OOM事件。
  • 避免使用垃圾收集
  • 避免使用O(n)或使用高或不可预测的N的更糟的算法(是否将一个非常大的播放列表加载到您的汽车娱乐系统中,减慢其制动响应?)
  • 考虑磁盘或网络延迟(例如在cars中使用CAN总线)
  • 输出控制延迟

在这种环境中,通常也会特别考虑可靠性,例如MISRA C标准。

票数 8
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/339473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档