0

有人可以通过明确的解释或任何参考链接帮助我理解内核如何处理具有相同优先级的任务的抢占。假设我有三个任务 A、B 和 C 分配有高优先级

TASK(A) { 高优先级读取异步消息 }

TASK(B) { 高优先级发送异步消息 }

TASK(C) { 高优先级抽签流程 }

在这种情况下,将考虑处理哪个任务以及它是如何被抢占的?

4

1 回答 1

2

一般调度顺序是

  1. 内核直接在内核上下文中调用函数schedule(),或者在TIF_NEED_RESCHED设置标志并且内核从中断上下文返回时调用函数。
  2. 此函数调用pick_next_task()以接收任务,该任务将抢占当前正在运行的任务。
  3. pick_next_task()pick_next_task()按优先级降序调用每个调度程序类,直到其中一个返回任务。请注意,优先级是指类的优先级(例如软实时或正常),而不是进程的优先级。
  4. CFS 的方法(正常进程的调度程序)是为每个进程提供等量的虚拟运行时间。虚拟运行时间是一个进程的实际运行时间,以其优先级(进程的优先级)加权。因此 CFS 类返回具有较少虚拟运行时的任务。

对于调度程序,无论进程在做什么,它发送或接收什么消息都无关紧要。因此,在一般情况下,如果您的进程具有相同的优先级,则运行时间较少的进程将在下一次schedule()调用时抢占另一个进程。

于 2013-07-24T11:37:43.237 回答