Добавление в очередь ожидания

Мне было интересно, как добавить task_struct в очередь ожидания в модуле ядра Linux? Например, если я хочу добавить задачу с именем task_struct к задаче WaitQueue, какую функцию я могу использовать для достижения этой цели?

Я понимаю, как добавить текущий модуль в очередь ожидания, но я хочу добавить в очередь другие запущенные процессы, например, если запущен vi, мне нужно добавить его в очередь ожидания.


person steve    schedule 09.11.2011    source источник
comment
Вы должны уточнить вопрос, я не понимаю, что такое «предмет». Укажите, какие API вы пытаетесь использовать и чего вы пытаетесь достичь.   -  person Dan Aloni    schedule 09.11.2011
comment
в основном мне нужно знать, как добавить task_struct в очередь ожидания   -  person steve    schedule 10.11.2011


Ответы (1)


Вы можете сделать блок текущей задачи в очереди ожидания с помощью wait_event*() функций. См. это руководство, раздел 6.2.2. Простой сон».

person Dan Aloni    schedule 09.11.2011
comment
Итак, у меня есть очередь ожидания, называемая ожиданием, определенная в моем модуле. Если я вызову что-то вроде: wait_event_timeout(wait, somecondition, 30*HZ) (мне нужно, чтобы процесс проснулся через 30 секунд). Как он узнает, какую конкретную задачу я хочу добавить в очередь ожидания, называемую ожиданием? - person steve; 10.11.2011
comment
Он блокирует только задачи, которые вызывают wait_event*(), то есть задачу current, а это означает, что если вы хотите, чтобы задача приостановилась в этой очереди ожидания, вы должны получить доступ к контексту ее выполнения. Самый стандартный способ — это реализовать файл /proc или /sys, чтобы ваша программа открывала/читала/записывала его. - person Dan Aloni; 10.11.2011