有人可以帮助我理解明确的解释或任何参考链接,内核如何处理具有相同优先级的任务的抢占。假设我有三个TASKS A,B和C分配了高优先级
TASK(A) { 高优先级 读取异步消息 }
TASK(B) { 高优先级 发送异步消息 }
TASK(C) { 高优先级 绘制过程 }
在这种情况下,哪个任务将被考虑进行处理以及它是如何被抢占的?
答案 0 :(得分:2)
一般调度顺序是
schedule()
,或者在设置TIF_NEED_RESCHED
标志并从内核上下文返回内核时调用函数{。}>。
pick_next_task()
来接收任务,该任务将抢占当前正在运行的任务。pick_next_task()
按优先级递减的顺序调用每个调度程序类“pick_next_task()
,直到其中一个返回任务。注意,优先级意味着类的优先级(例如,软实时或正常),而不是处理'one。对于调度程序,无论正在进行什么过程,发送或接收的按摩是什么。因此,在一般情况下,如果您的流程具有相同的优先级,那么运行时间较短的流程将在下一个schedule()
调用中抢占另一个流程。