如果硬实时任务超过其截止日期会发生什么?

时间:2017-08-30 11:12:03

标签: embedded task scheduler rtos

我想通过使用RTOS更明确地理解硬实时系统的基本概念。通过RTOS的定义,它保证实时任务永远不会超过他们的最后期限。

void RT_task1(void *params)
{
    do_inits();
    while (true)
    {
         ... // Do the job whatever it is in realtime.
         Delay(20); // Wait for 20 ms.
    }
 }

这是RTOS中基于任务的实时系统的简单结构。在这一点上,我想知道这些问题;

1)什么是" DEADLINE"这个代码块中RTOS的定义提到了这一点。这是"延迟"时间20毫秒或其他由"做工作"一部分?

2)如果超过截止日期会怎样?我知道它是由RTOS保证的,但是在"如果情况":我们是否定义了灾难性的错误程序?

3)RTOS如何保证截止日期?我的意思是,我可以运行大量的RT任务,因此CPU资源可能不够,或者编程错误的任务比其他RT任务消耗太多时间? " guarateed"一部分?

我知道RTOS和传统操作系统之间的关键区别在于调度程序。 RTOS使用确定性方式为用户提供调度保证。但是,这些信息并不能完全满足我对整个系统的理解。

感谢。

5 个答案:

答案 0 :(得分:2)

硬实时系统的定义是错过最后期限被视为失败。所以"失败"如果硬实时系统错过最后期限会发生什么。失败的后果因应用程序而异,因此,一般情况下,除了发生故障之外,您不能说出任何其他内容。

使用RTOS并不能自动保证实时任务永远不会错过截止日期。就像摆锤子并不能保证你永远不会错过指甲并且用拇指敲打。 RTOS只是一种工具。如果使用得当,它可以帮助开发人员满足系统的实时要求。但是,开发人员仍然可以正确地设计和实施系统。

1)截止日期由系统要求定义。它们不是根据RTOS的使用方式定义的。

2)如果超过截止日期会发生什么,完全取决于申请。考虑截止日期要求的原因,这将为您提供如果错过截止日期将会发生什么的线索。

3)RTOS不保证满足最后期限。系统设计和实施应保证满足最后期限。

答案 1 :(得分:2)

@System Coder写道:

  

通过RTOS的定义,它保证实时任务永远不会超过他们的最后期限。

事实并非如此。根据定义,RTOS可确保任务的确定性调度。任务是否满足其截止日期完全取决于应用程序的设计和实现,尤其是如何对任务进行分区,如何触发它们以及如何分配优先级。

  

如果硬实时任务超过截止日期会怎样?

更合适的问题是,如果任务无法满足其截止日期,您的应用程序将如何运作?问题完全取决于应用程序。 RTOS本身不会检测失败的截止日期,因为它不了解您的应用程序。 RTOS的目标是设计调度和优先级分配,以便永远不会超过最后期限。如果超过截止日期 ,那么如果您的设计存在缺陷,而不是RTOS的失败。

您的代码片段过于简单化;实时应用程序通常必须响应外部事件(其他时间只是时间),如果循环的目标是每20个OS滴答(根据注释,毫秒)执行任务,那么它将失败该目标,如果延迟之前的代码需要超过1个滴答。此外,初始执行将与RTOS tick异步,并且第一次和第二次循环执行之间的时间在任何情况下都不太确定(在19到20个滴答之间)。

循环延迟适用于没有硬截止日期的任务;例如,一个PID循环,它是一个糟糕的设计。相反,在您的示例中,您应该使用RTOS计时器(而不是延迟);这样循环体只需要完成20ms而不是1ms。如果有更高优先级的任务和中断抢占了这个任务,即使代码自身有1毫秒的好,如果被其他代码抢占和延迟,它可能会错过最后期限;所以有20ms完成任务显然是有益的。

  

1)什么是" DEADLINE"这个代码块中RTOS的定义提到了这一点。这是"延迟"时间20毫秒或其他由"做工作"一部分?

截止日期是您的申请成功满足其要求所必需的;它不是由RTOS定义的,它由您的要求定义。如上所述,您的示例可能不是实时任务的良好设计,除非它和所有可能的抢占任务可以在不到1毫秒内完成。在任何情况下,它都不是很可扩展,并且在维护,新代码或优先级重新分配之后,最初可能不再符合最后期限的设计。

  

2)如果超过截止日期会怎样?我知道它是由RTOS保证的,但是在"如果情况":我们是否定义了灾难性的错误程序?

正如我所说; RTOS无法保证,失败的后果取决于您的应用程序。如果没有发生任如果失败,您需要重新考虑系统的可调度性。

  

3)RTOS如何保证截止日期?我的意思是,我可以运行大量的RT任务,因此CPU资源可能不够,或者编程错误的任务比其他RT任务消耗太多时间? " guarateed"一部分?

它不能;它可以保证确定性调度;最高优先级"准备就绪"任务将立即运行(在上下文切换时间的约束内) - 简单,不再是。即使在RTOS中,糟糕的中断处理程序设计仍然可以使调度不确定。它们也需要具有确定性 - 每个都在有界且理想的恒定时间内执行。任务执行的最大延迟是所有较高优先级任务和中断的执行时间的总和;作为一般的经验法则,通过为执行时间最短的任务分配最高优先级来最小化延迟。具有非确定性或广泛变化的执行时间的任务应该被赋予较低的优先级。其他特定于应用程序的因素也会发挥作用,例如任务如何与其他任务交互,通信或同步。

答案 2 :(得分:0)

错过截止日期可能是失败。例如,让我们说你有两个任务,A和B. A运行30毫秒,B运行15。如果你有20毫秒时间块A每次都会错过最后期限而B每次都会通过。

A是否失败的问题取决于要求。如果A 必须在一个时间片中运行,则错过截止日期是失败的。另一方面,如果A可以在下一个时间片中被中断和恢复并且运行完成,那么如果可以,那么A的运行时不一定构成失败。

完全取决于要求。 RTOS没有任何内容可以保证任务完成。示例:将A视为使用Sierat of Eratosthenes算法计算大质数的一项任务,B只是切换外部时钟引脚。这两项任务的复杂性和持续时间各不相同。 RTOS不能神奇地使每个A或B按时完成,但它可以确保任务B因缺少运行机会而不会因为A需要很长时间才能完成而无法使用。

答案 3 :(得分:0)

  

通过RTOS的定义,它保证了实时任务的意愿   永远不要超过他们的最后期限。

RTOS不保证您在截止日期前的任何事情。它只保证您的任务顺序将根据您定义的优先级。

确保满足截止日期是您的工作。 截止日期通常由系统本身及其与其他元素的交互来定义。

例: 如果您在汽车中踩刹车踏板,汽车实际刹车需要多长时间? 你需要多久刷新一次屏幕?

另外你不会在第一个例子中截止日期错过是第二次灾难性事件并不是那么糟糕。

答案 4 :(得分:0)

  

3)RTOS如何保证截止日期?我的意思是,我可以运行很多RT   任务,因此CPU资源可能不够或编程错误   比其他RT任务消耗太多时间? “guarateed”在哪里   一部分?

RTOS使用硬件计时器,该计时器在任务启动/重新进入时开始运行。当任务暂停(延迟/休眠/退出)时,计时器停止。如果定时器运行正常,则硬件中断将控制权返回给RTOS以采取某些措施。这些类型的机制不同于一个RTOS到下一个,并非所有RTOS都有截止时间计时器机制。