проверьте функцию set_load_weight
в исходном коде ядра linux. Здесь вычисляется фактическая нагрузка объекта планирования (задачи/группы задач ). Эта подпрограмма вызывается из разных мест (, например, fork, или когда вы устанавливаете новое значение nice из пользовательского пространства и т. д. ).
if (update_load && p->sched_class == &fair_sched_class) {
reweight_task(p, prio);
} else {
load->weight = scale_load(sched_prio_to_weight[prio]);
load->inv_weight = sched_prio_to_wmult[prio];
}
sched_prio_to_weight
содержит вес согласно приоритету.
Структура, которая сохраняет информацию о весе для задачи, такова struct load_weight
. Эта структура используется cfs для загрузки объекта и обновления среды выполнения(vruntime
)задачи в подпрограмме update_curr
. cfs выбирает следующую задачу для запуска в pick_next_task
. Ниже приведен фрагмент кода.
for_each_class(class) {
p = class->pick_next_task(rq, prev, rf);
if (p) {
if (unlikely(p == RETRY_TASK))
goto again;
return p;
}
}
Здесь он просматривает каждый класс планирования и проверяет выполнение задачи.
Метасимвол $
в sed
сопоставляется буквально двумя способами:
\$
, либо [$]
Но есть еще один способ, если $
не является последним символом в регулярном выражении, тогда он рассматривается как литерал. Итак, следующее
sed -e '/$./d' file
создан специально для решения вашей проблемы.
Удалить строку, если она содержит $
, за которой следует что-либо(.
):
sed '/\$./d' file
Этот шаблон также работает сgrep
:
grep -v '\$.' file