Я пытаюсь изменить схему расписания запуска потоков во freeBSD. Планирование потоков по умолчанию в freeBSD основано на приоритете потока, но я хочу изменить его на другое условие. Мне было интересно, какая из следующих функций отвечает за это планирование: tdq_runq_add() в sched_ule.c или runq_choose() в kern_switch.c.

0
ehsanik 16 Апр 2014 в 15:36

2 ответа

Лучший ответ

Ответом на этот вопрос было изменение функции runq_choose(). Потому что эта функция показывает, как именно потоки должны быть выбраны для помещения в текущую очередь. Другая функция просто следит за тем, чтобы весь процесс постановки в очередь был выполнен. 'Tdq_runq_add ()' используется для обработки взаимодействия между разделением времени и очередями в реальном времени. Таким образом, для изменения приоритета нам лучше изменить runq_choose().

0
ehsanik 31 Июл 2014 в 03:46

Выбор протектора, который будет использоваться следующим, выполняется в 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, который сейчас используется по умолчанию).

0
Roland Smith 22 Апр 2014 в 10:16