17 points par GN⁺ 2024-06-08 | 3 commentaires | Partager sur WhatsApp
  • En cherchant des informations sur le PID 0 sur le Web, on tombe le plus souvent sur des renseignements erronés.
  • En recherchant le PID 0 sur Google, Bing, DuckDuckGo et Kagi, il était difficile de trouver une réponse exacte.
  • Des informations incorrectes sur Wikipedia se sont propagées pendant 16 ans, et de nombreux sites les ont reprises en citation.

Histoire du PID 0

  • Le PID 0 intervient dans l’ordonnancement et la gestion de l’alimentation, et n’a aucun lien avec la pagination mémoire.
  • Le PID 0 joue le rôle d’ordonnanceur exécuté lorsqu’un cœur CPU n’a rien à faire.
  • Dans les premiers Unix, le PID 0 effectuait des tâches liées à la gestion mémoire, mais ce n’est plus le cas dans les Unix modernes.

Rôle réel du PID 0

  • Le PID 0 démarre le kernel, puis gère ensuite les cœurs CPU.
  • Dans le kernel Linux, le PID 0 est implémenté par la fonction do_idle.
  • D’autres kernels, comme FreeBSD, remplissent un rôle similaire.

La confusion autour du PID 0

  • La signification du PID diffère entre le kernel Linux et l’espace utilisateur.
  • Dans le kernel, task_struct représente un thread, et le PID correspond à l’identifiant du thread.
  • Dans l’espace utilisateur, le PID représente un processus, ce qui correspond au thread group ID.

PID 0 dans les systèmes multicœurs

  • Dans un système multicœur, chaque cœur CPU possède son propre thread idle.
  • Tous ces threads idle appartiennent au thread group 0.
  • Depuis l’espace utilisateur, ils sont perçus comme le PID 0.

Conclusion

  • Le PID 0 existe bien, et c’est le thread qui démarre le kernel.
  • Le PID 0 effectue les tâches initiales d’initialisation du kernel, puis se transforme en thread idle.
  • Le PID 0 n’a aucun lien avec la gestion mémoire.
  • Dans les systèmes multicœurs, chaque cœur dispose d’un thread idle, et ils appartiennent tous au thread group 0.

L’avis de GN⁺

  • Importance d’une information exacte : des informations erronées se sont propagées pendant longtemps, au point que beaucoup les ont prises pour des faits établis. Cela rappelle une fois de plus l’importance de fournir une information précise.
  • Complexité du kernel : le processus d’initialisation du kernel et les mécanismes d’ordonnancement sont très complexes, et les comprendre peut être d’une grande aide pour les ingénieurs logiciel.
  • Confusion autour du PID : puisque la signification du PID diffère entre le kernel et l’espace utilisateur, il est important de bien le comprendre.
  • Systèmes multicœurs : comprendre le rôle du PID 0 dans les systèmes multicœurs modernes peut aider à optimiser les performances système.
  • Influence de Wikipedia : cela montre à quel point les informations de Wikipedia influencent de nombreux sites Web. Cela souligne l’importance de mettre à jour les informations exactes.

3 commentaires

 
thinkpad 2024-07-17

Ça me rappelle ce vieil incident où cet agent avait fait kill -9 0...

 
whizkyu 2024-06-09

Intéressant.

 
GN⁺ 2024-06-08
Avis Hacker News
  • Intéressant d’un point de vue archéologique : dire que « pid 0 fait partie du noyau [Linux] » est utile lors du débogage du noyau. Du point de vue d’un processus en espace utilisateur, « pid 0 signifie soi-même ».
  • Excès de confiance en ligne : en ligne, beaucoup de gens affichent une confiance excessive à propos de ce qu’ils savent. Un ton assuré ne devrait être utilisé que par des experts.
  • PID 0 sous Windows : dans Windows basé sur NT, PID 0 est le « System Idle Process », ce qui est similaire à Linux. Dans Windows basé sur DOS, il n’y a pas de PID 0, et la boucle d’inactivité se trouve dans VMM32.
  • PID 0 dans l’Unix académique : dans la plupart des Unix académiques, PID 0 est lié au sous-système mémoire (paging). Linux n’est pas le seul à posséder le concept de PID 0.
  • Erreurs dans les connaissances générales : les « connaissances générales » sont souvent erronées. La bonne méthode consiste à vérifier le code source du noyau.
  • Troisième usage de PID 0 : sous Linux, getppid renvoie 0 lorsque le parent se trouve dans un autre espace de noms PID.
  • Recommandation de lecture complémentaire : si le démarrage initial du noyau vous intéresse, il est recommandé de lire cette excellente ressource. Linux Insides
  • Question sur la commande ps -aux : lorsqu’on saisit la commande « ps -aux », des informations sur d’autres utilisateurs s’affichent aussi. Cela ne devrait-il pas être privé par défaut ?
  • Usage intéressant de kill 0 : partage d’un script qui utilise kill 0 pour exécuter une commande pendant un temps limité puis l’arrêter.
  • Réutilisation de PID 0 dans le code v4 : il est intéressant que le code v4 réutilise pid 0. Je me souviens avoir dû résoudre ce problème dans le noyau au milieu des années 1980.