Какова цель задания члена struct pid, определенного в Linux/include/linux/pid.h?

Я пытаюсь лучше понять, как ядро ​​реализует пространство имен pid. Одна из основных структур, которая используется struct pid:

struct pid { 
      atomic_t count;
      unsigned int level;
      /* lists of tasks that use this pid */
      struct hlist_head tasks[PIDTYPE_MAX];
      struct rcu_head rcu;
      struct upid numbers[1]; }

Теперь из того, что я понимаю, массив номеров отслеживает процесс разных pids в разных пространствах имен pid.

То, что я не понимаю, является целью tasks член. Здесь сказано: (LWN):

.. "Эта структура содержит значение идентификатора, список задач, имеющих этот идентификатор.."

Итак, я понимаю, что один и тот же pid используется несколькими парами процессов / заданий. Теперь разные процессы / потоки могут использовать один и тот же tpid/gpid, но не один и тот же pid! Так как же получается список задач с одинаковым PID? Что мне не хватает?

Спасибо

1 ответ

Структура pid является внутренним понятием ядра идентификатора процесса. Он может идентифицировать процесс, поток, а также сеанс или группу процессов. Вот почему есть список задач.

В коде ядра объясняется, что это компромисс между:

  • хранить только pid_t которые не гарантируют, что указанный процесс - тот, который вы хотите, потому что pids повторно используются циклически
  • хранить указатели для каждого потока процессов, что приводит к слишком большой таблице
Другие вопросы по тегам