【发布时间】:2014-05-31 06:13:29
【问题描述】:
我正在尝试更改 freeBSD 中运行线程的调度方案。 freeBSD 的默认线程调度是基于线程的优先级,但我想将其更改为另一个条件。我想知道以下哪个函数负责此调度,sched_ule.c 中的 tdq_runq_add() 或 kern_switch.c 中的 runq_choose()。
【问题讨论】:
标签: c multithreading kernel freebsd
我正在尝试更改 freeBSD 中运行线程的调度方案。 freeBSD 的默认线程调度是基于线程的优先级,但我想将其更改为另一个条件。我想知道以下哪个函数负责此调度,sched_ule.c 中的 tdq_runq_add() 或 kern_switch.c 中的 runq_choose()。
【问题讨论】:
标签: c multithreading kernel freebsd
在choosethread() 和/usr/src/sys/kern/kern_switch.c 中选择接下来要运行的胎面。这反过来又调用sched_choose()。根据您使用的调度程序,它位于/usr/src/sys/kern/sched_4bsd.c(用于旧调度程序)或/usr/src/sys/kern/sched_ule.c(ULE 调度程序,现在是默认设置)。
【讨论】:
这个问题的答案是改变函数runq_choose()。因为这个函数准确地显示了应该如何选择线程来放入运行队列。另一个功能只是确保整个排队过程正在完成。 'tdq_runq_add()' 用于处理分时和实时队列之间的协作。因此为了改变优先级,我们最好改变runq_choose()。
【讨论】: