Какова цель задания члена 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 повторно используются циклически - хранить указатели для каждого потока процессов, что приводит к слишком большой таблице