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