Я работаю с исходным кодом ядра Linux для побочного проекта, который я хочу сделать. Я успешно зарегистрировал свой класс планирования и использовал RBTree ядра для моего HVF_RQ . Я намереваюсь, чтобы мой планировщик планировал на основе наибольшего значения, вычисленного операцией между тремя полями, которые я добавил в struct task_struct . Я создал SYSCALL, чтобы пользователь мог установить и получить эти поля для вызова. Эта функция принимает три аргумента (в соответствии с функцией указателя enqueue_task члена ched_class ), а третий - флаги int . Мой вопрос об обращении с этими флагами соответствующим образом. В файле ядра/sched/ched.h есть этот фрагмент комментариев, описывающий ситуацию:
Код: Выделить всё
/*
* {de,en}queue flags:
*
* DEQUEUE_SLEEP - task is no longer runnable
* ENQUEUE_WAKEUP - task just became runnable
*
* SAVE/RESTORE - an otherwise spurious dequeue/enqueue, done to ensure tasks
* are in a known state which allows modification. Such pairs
* should preserve as much state as possible.
*
* MOVE - paired with SAVE/RESTORE, explicitly does not preserve the location
* in the runqueue.
*
* NOCLOCK - skip the update_rq_clock() (avoids double updates)
*
* MIGRATION - p->on_rq == TASK_ON_RQ_MIGRATING (used for DEADLINE)
*
* ENQUEUE_HEAD - place at front of runqueue (tail if not specified)
* ENQUEUE_REPLENISH - CBS (replenish runtime and postpone deadline)
* ENQUEUE_MIGRATED - the task was migrated during wakeup
* ENQUEUE_RQ_SELECTED - ->select_task_rq() was called
*
*/
Я легко понимаю, что enqueue_wakeup является нормальным условием, когда вы вычислите ключ и вставляете задачу chadi_hvf_entity (соответствующий rade_entity я сделал) в runqueue of планировщика. Если с ним нет другого флага (используя оператор | ), вы просто поместите его в соответствующую позицию, и это так. Кроме того, я могу справедливо сказать, что enqueue_head описывает желание поставить задачу в голову Runqueue (самый правый из дерева в моем случае). Главным образом, эти два флага будут установлены в сочетании с использованием | , если вызывающий абонент намеревался срочно поместить задачу в очередь.>
Подробнее здесь:
https://stackoverflow.com/questions/796 ... ling-class