我正在尝试更改在freeBSD中运行线程的调度方案。 freeBSD的默认线程调度基于线程的优先级,但我想将其更改为另一个条件。我想知道以下哪个函数负责此调度,sched_ule.c中的tdq_runq_add()
或kern_switch.c中的runq_choose()
。
答案 0 :(得分:0)
选择下一步运行的胎面将在choosethread()
的{{1}}中完成。这反过来调用/usr/src/sys/kern/kern_switch.c
。根据您使用的调度程序,这位于sched_choose()
(对于旧调度程序)或/usr/src/sys/kern/sched_4bsd.c
(ULE调度程序,现在是默认调度程序)。
答案 1 :(得分:0)
这个问题的答案是改变了函数runq_choose()
。因为此函数准确显示应如何选择将线程放入正在运行的队列中。另一个函数只是确保整个排队过程正在完成。 &t'qdq_runq_add()'用于处理时间共享和实时队列之间的合作。因此,为了更改优先级,我们最好更改runq_choose()
。