代码之家  ›  专栏  ›  技术社区  ›  Benoit

vxWorks如何处理优先级相同的两个任务?

  •  3
  • Benoit  · 技术社区  · 16 年前

    在我们的vxWorks嵌入式系统中,有两个任务(T1和T2)具有相同的优先级(110)。
    如果两个任务都准备好运行,常规vxWorks调度程序如何处理此问题?
    哪个任务先执行?

    3 回复  |  直到 16 年前
        1
  •  5
  •   unwieldy    16 年前

    首先运行的任务是VxWorks调度程序任务首先生成的任务。VxWorks使用 基于优先级的调度 任务暂停 ),此时将执行另一个就绪任务,直到它被阻止,依此类推。这应该由信号量或互斥量(mutices?)控制

    基于优先级的调度的主要问题就是这个问题。我们如何确定让这些任务运行多长时间?他们有相同的优先权,这一事实使事情复杂化。另一个问题是,具有高优先级的VxWorks任务(数字越小意味着优先级越高)可能会抢占您必须在代码中准备的应用程序。这些问题可以通过使用 循环调度 . 本文还描述了循环调度带来的其他问题和解决方案 here .

        2
  •  2
  •   Benoit    16 年前

    VxWorks有256个优先级(0最高,255最低)。在任何给定的时间,最高优先级的任务都在CPU上运行。每个优先级概念上都有一个队列,其中多个任务排队等待执行。

    我们有3个优先级相同的任务A、B、C。假设A正在执行。

    当一个队列取消阻塞时,它被放在队列的末尾。我们现在有B,C,A。
    当B阻塞时,C接管,等等。。。

    请注意,被高优先级任务抢占的任务不会影响队列的顺序。如果A正在运行并被抢占,则在完成更高优先级的任务时,它将继续执行。它不会被放在队列的末尾。

        3
  •  1
  •   robert.berger    15 年前

    您可以显式启用循环,而不是时间片。