有人可以通过明确的解释或任何参考链接帮助我理解内核如何处理具有相同优先级的任务的抢占。假设我有三个任务 A、B 和 C 分配有高优先级
TASK(A) { 高优先级读取异步消息 }
TASK(B) { 高优先级发送异步消息 }
TASK(C) { 高优先级抽签流程 }
在这种情况下,将考虑处理哪个任务以及它是如何被抢占的?
有人可以通过明确的解释或任何参考链接帮助我理解内核如何处理具有相同优先级的任务的抢占。假设我有三个任务 A、B 和 C 分配有高优先级
TASK(A) { 高优先级读取异步消息 }
TASK(B) { 高优先级发送异步消息 }
TASK(C) { 高优先级抽签流程 }
在这种情况下,将考虑处理哪个任务以及它是如何被抢占的?
一般调度顺序是
schedule()
,或者在TIF_NEED_RESCHED
设置标志并且内核从中断上下文返回时调用函数。pick_next_task()
以接收任务,该任务将抢占当前正在运行的任务。pick_next_task()
pick_next_task()
按优先级降序调用每个调度程序类,直到其中一个返回任务。请注意,优先级是指类的优先级(例如软实时或正常),而不是进程的优先级。对于调度程序,无论进程在做什么,它发送或接收什么消息都无关紧要。因此,在一般情况下,如果您的进程具有相同的优先级,则运行时间较少的进程将在下一次schedule()
调用时抢占另一个进程。