Альтернатива для tasklist_lock в модуле? - PullRequest
0 голосов
/ 31 января 2012

В учебных целях я хотел бы пройтись по всем задачам в модуле и вывести различную информацию о них.Для этой задачи мне нужно заблокировать список всех задач (я также не уверен, должен ли я это делать.).Я видел несколько примеров в коде ядра, которые блокируют tasklist_lock.Однако этот символ не может использоваться модулями.Его экспорт был удален коммитом c59923a15c12d2b3597af913bf234a0ef264a38b.

Есть ли другой способ заблокировать список задач?

Ответы [ 2 ]

1 голос
/ 13 октября 2014

stop_machine() вводит незанятые потоки и отключает прерывания в каждом из процессоров системы, кроме того, которое выполняет пользовательскую функцию, которую вы передаете в качестве аргумента stop_machine().Это эквивалентно удержанию каждой спин-блокировки в ядре и приводит к зависанию системы до тех пор, пока выполняется пользовательская функция.Излишне говорить, что это сильно влияет на производительность, но также обеспечивает надежные гарантии согласованности.

Если вы хотите просто прочитать данные из задач системы и не обращаете внимания на абсолютную точность (согласованность), вы можете выполнить итерациюсписок учета процессов в критическом разделе чтение-копирование-обновление (RCU) .Вы также можете проверить RCU в Википедии .

struct task_struct *iter;
rcu_read_lock();
list_for_each_entry_rcu(iter, &init_task.tasks, tasks) {
   printf("The current task of the list is: %s\n.", iter->comm);
}
rcu_read_unlock();
1 голос
/ 04 февраля 2012

Вы можете использовать stop_machine () следующим образом:

int for_each_task(void * data)
{
  struct task_struct * g, * p;
  do_each_thread(g, p) {
    // do the work
  } while_each_thread(g, p);
  return 0;
}

...
stop_machine(for_each_task, NULL, NULL);
...

stop_machine интерфейс приостанавливает все задачи и размещает высокоприоритетный поток на каждом ЦП.Таким образом, во время обратного вызова никакие другие задачи не запланированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...