内核抢占相同的优先级任务

时间:2013-07-24 10:56:38

标签: linux-kernel kernel scheduling

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

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

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

TASK(C) {  高优先级  绘制过程 }

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

1 个答案:

答案 0 :(得分:2)

一般调度顺序是

  1. 内核直接在内核上下文中调用函数schedule(),或者在设置TIF_NEED_RESCHED标志并从内核上下文返回内核时调用函数{。}>。
  2. 此函数调用pick_next_task()来接收任务,该任务将抢占当前正在运行的任务。
  3. pick_next_task()按优先级递减的顺序调用每个调度程序类“pick_next_task(),直到其中一个返回任务。注意,优先级意味着类的优先级(例如,软实时或正常),而不是处理'one。
  4. CFS的方法(正常流程的调度程序)是为每个进程提供等量的虚拟运行时。虚拟运行时是一个进程'实际运行时加权其优先级(进程'优先级)。因此CFS类返回虚拟运行时较少的任务。
  5. 对于调度程序,无论正在进行什么过程,发送或接收的按摩是什么。因此,在一般情况下,如果您的流程具有相同的优先级,那么运行时间较短的流程将在下一个schedule()调用中抢占另一个流程。