实时操作系统 任务

实时操作系统 任务

实时操作系统(RTOS) 是用于处理数据而不需要任何缓冲延迟的实时应用程序。在RTOS中,处理时间要求以十分之一秒的时间增量进行计算。它是一个时间约束系统,定义了固定的时间限制。在这种类型的系统中,处理必须在指定的约束条件下完成。否则,系统将失败。

实时任务 是与时间的定量表达相关联的任务。这种时间的定量表达描述了实时任务的行为。实时任务被安排在规定的时间约束内完成所有涉及的计算事件。与实时任务相关的时间约束是截止时间。所有实时任务需要在截止时间之前完成。例如,与设备的输入输出交互、网页浏览等。

实时系统中的任务类型

实时系统中存在以下类型的任务,例如:

实时操作系统 任务

1. 周期性任务

在周期性任务中,作业按照固定的时间间隔释放。周期性任务在固定时间间隔后重复执行。周期性任务由五个元组表示: **T i = < Φ i , P i , e i , D i > **

其中,

  • **Φ i : ** 它是任务的相位,相位是任务中第一个作业的释放时间。如果未指定相位,则默认认为第一个作业的释放时间为零。
  • **P i : ** 它是任务的周期,即两个连续作业的释放时间之间的时间间隔。
  • **e i : ** 它是任务的执行时间。
  • **D i : ** 它是任务的相对截止时间。

例如: 考虑周期为5、执行时间为3的任务T i

未给出相位,因此假设第一个作业的释放时间为零。因此,此任务的作业首先在t = 0释放,然后执行3秒,然后下一个作业在t = 5释放,执行3秒,再下一个作业在t = 10释放。因此,作业在 t = 5k 处释放,其中 k = 0, 1, . . . N。

实时操作系统 任务

一组周期性任务的超周期是该组任务的最小公倍数。例如,两个任务 T1 和 T2 的周期分别为 4 和 5,则超周期 H = lcm(p1, p2) = lcm(4, 5) = 20。超周期是作业释放时间模式开始重复的时间。

2. 动态任务

它是由事件的发生而调用的顺序程序。事件可以由系统外部的进程产生,也可以由系统内部的进程产生。动态到达的任务可以根据其临界性和关于它们发生时间的了解进行分类。

  1. 非周期性任务: 在这种类型的任务中,作业按任意时间间隔释放。非周期性任务有软截止期或无截止期。
  2. 间歇性任务: 它们与非周期性任务类似,即它们在随机实例中重复。唯一的区别是间歇性任务具有硬截止期。三元组表示一个间歇性任务: T i=(ei, gi, Di)
  • 其中
  • e i:它是任务的执行时间。
  • g i:它是两个连续实例出现之间的最小间隔。
  • D i:它是任务的相对截止期。

    3. 关键任务

关键任务是那些及时执行是至关重要的任务。如果错过了截止期限,将发生灾难。

例如,生命支持系统和飞机的稳定控制。如果关键任务以更高的频率执行,则是必要的。

4. 非关键任务

非关键任务是实时任务。顾名思义,它们对应用程序并不关键。然而,如果不在截止期内完成,它们将无法处理时间可变的数据,因此是无用的。调度这些任务的目标是在它们的截止期内成功执行的作业百分比最大化。

任务调度

实时任务调度实际上是确定操作系统如何选择执行各个任务的过程。每个操作系统都依赖一个或多个任务调度程序来准备需要运行的各个任务的执行计划。每个任务调度程序由其所使用的调度算法所特征化。目前已开发出许多实时任务调度算法。

任务调度的分类

以下是实时系统中的任务调度的几种类型,例如:

实时操作系统 任务

  1. 有效的调度: 有效的调度是指一个任务集中最多只有一个任务被分配给一个处理器,没有任务在其到达时间之前被调度,并且满足所有任务的前序和资源约束条件。
  2. 可行的调度: 只有在所有任务在调度中满足各自的时间约束条件时,一个有效的调度才被称为可行的调度。
  3. 高效的调度器: 如果调度器S1可以可行地调度S2可以可行地调度的所有任务集,但反之不成立,则调度器S1比另一个调度器S2更高效。S1可以可行地调度S2可以调度的所有任务集,但存在至少一个任务集S2无法可行地调度,而S1可以。如果S1可以可行地调度S2可以可行地调度的所有任务集,反之亦然,则S1和S2被称为平等高效的调度器。
  4. 最优调度器: 如果一个实时任务调度器可以合理地调度任何其他调度器可以合理调度的任务集,则称其为最优调度器。换句话说,没有可能找到比最优调度器更有效的调度算法。如果最优调度器无法调度某个任务集,那么其他调度器也不应该为该任务集生成可行的调度安排。
  5. 调度点: 调度器的调度点是时间线上的点,调度器在这些点上做决策,决定下一个要运行的任务。需要注意的是,任务调度器不需要持续运行,操作系统只在调度点激活它,以决定下一个要运行的任务。在以时钟驱动的调度器中,调度点由周期定时器产生的中断标记的瞬间定义。在以事件驱动的调度器中,某些事件的发生确定了调度点。
  6. 抢占式调度器: 抢占式调度器指的是当一个更高优先级的任务到达时,挂起正在执行的较低优先级任务,并执行更高优先级的任务。因此,在抢占式调度器中,不可能存在更高优先级的任务已经准备好等待执行,而较低优先级的任务正在执行的情况。被抢占的较低优先级任务只有在没有更高优先级任务准备好时才能恢复执行。
  7. 利用率: 任务的处理器利用率(或简称利用率)是它在单位时间间隔内执行的平均时间。用符号表示: 对于一个周期性任务Ti,利用率ui = ei/pi,其中
  • ei是执行时间;
  • pi是Ti的周期。

对于一组周期任务 {Ti}:所有任务的总利用率 U = i=1∑ n ei/pi。 任何好的调度算法的目标是能够合理地调度那些利用率非常高的任务集,即接近1的利用率。当然,在单处理器上,不可能调度具有超过1利用率的任务集。
8. 抖动 抖动是周期性任务从其严格的周期行为偏离的程度。到达时间抖动是任务从精确周期到达时间的偏离。它可能是由于不精确的时钟或其他因素(如网络拥塞)引起的。同样,完成时间抖动是任务完成时间与精确周期时间点的偏离。 完成时间抖动可能是由所采用的特定调度算法引起的,该算法根据方便性和瞬时负载选择调度一个任务,而不是在某些严格时间点进行调度。对于某些应用程序来说,抖动是不可取的。 有时候作业的实际发布时间是未知的。只知道 r i 这个范围[ri-, ri+]]称为发布时间抖动。这里:

  • ri是作业可以提前发布的时间,
  • ri+是作业可以延迟发布的时间。

只知道作业执行时间的范围[ei-, ei+]。这里:

  • ei-是作业完成执行所需的最短时间,
  • ei+是作业完成执行所需的最长时间。

作业的优先约束

如果一个任务中的作业可以按任意顺序执行,则它们是独立的。如果作业必须按特定顺序执行,那么它们被称为具有优先约束。为了表示作业的优先约束,使用了一个偏序关系<,称为优先关系。如果作业 Ji 是作业 Jj 的前置作业,表示为 Ji < Jj,即作业 Jj 在作业 Ji 完成之前不能开始执行。如果作业 Ji 是作业 Jj 的直接前置作业,则表示为 Ji < Jj,且不存在其他作业 Jk,使得 Ji < Jk < Jj。如果既不成立 Ji < Jj,也不成立 Jj < Ji,则作业 Ji 和作业 Jj 是独立的。

表示优先约束的一种有效方法是使用一个有向图 G = (J, <),其中 J 是作业的集合。这个图称为优先图。图的顶点表示作业,优先约束使用有向边表示。如果从作业 Ji 指向作业 Jj 的有向边存在,则表示作业 Ji 是作业 Jj 的直接前置作业。

例如:考虑一个任务 T,其中包含5个作业 J1、J2、J3、J4和J5,其中J2和J5必须等到J1完成后才能开始执行,且没有其他约束。此示例的优先约束为:

J1 < J2 和 J1 < J5

实时操作系统 任务

设置优先图的集合表示:

  1. < (1) = { }
  2. < (2) = {1}
  3. < (3) = { }
  4. < (4) = { }
  5. < (5) = {1}

考虑另一个示例,给定一个优先图,你需要找到优先约束。

实时操作系统 任务

从上图中,我们得出以下优先约束:

  1. J1 < J2
  2. J2 < J3
  3. J2 < J4
  4. J3 < J4

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程