Où est PCB sur Linux

10

Un PCB ou un bloc de contrôle de processus , est défini comme ceci sur Wikipedia

Process Control Block (PCB, également appelé Task Controlling Block, [1] Task Struct ou Switchframe) est une structure de données dans le noyau du système d'exploitation contenant les informations nécessaires pour gérer un processus particulier. Le PCB est "la manifestation d'un processus dans un système d'exploitation

et son devoir est:

Process identification data
Processor state data
Process control data

Alors, où peut-on trouver le PCB d'un processus?

Mohammad Reza Rezwani
la source
Voir également Bloc de contrôle de processus sous Linux sur débordement de pile.

Réponses:

15

Dans le noyau Linux, chaque processus est représenté par un task_structdans une liste doublement liée, dont la tête est init_task(pid 0, pas pid 1). Ceci est communément appelé table de processus .

En mode utilisateur, la table de processus est visible par les utilisateurs normaux sous /proc. Prendre les titres de votre question:

  • Les données d'identification de processus sont l'ID de processus (qui se trouve dans le chemin d'accès /proc/<process-id>/...), la ligne de commande ( cmd) et éventuellement d'autres attributs selon votre définition d '«identification».

  • Les données d'état du processus incluent les données de planification ( sched, statet schedstat), ce que le processus attend actuellement ( wchan), son environnement ( environ), etc.

  • On pourrait dire que les données de contrôle de processus sont ses informations d'identification ( uid_map) et ses limites de ressources ( limits).

Tout dépend donc de la façon dont vous définissez vos termes ... mais en général, toutes les données sur un processus peuvent être trouvées dans /proc.

Flup
la source
"dont la tête est init_task(pid 0, pas pid 1)" Il n'y a rien de tel que init_task. C'est init, et son pid est 1, pas 0 (confirmé via pidof init).
AleksandrH
1
@AleksandrH init_task est une structure de noyau et non un processus. Il pointe vers la tâche inactive qui est représentée en interne par le pid 0. init_task et init sont des choses complètement différentes.
Flup
Et pourtant, ce pidn'est que pour les processus ...
AleksandrH
1
@AleksandrH Lisez init / init_task.c dans l'arborescence des sources du noyau ( github.com/torvalds/linux/blob/master/init/init_task.c ).
Flup