web-dev-qa-db-fra.com

Comment Linux gère les threads et la planification des processus

J'essaie de comprendre comment Linux gère la planification des processus et la planification des threads. J'ai lu que Linux peut planifier à la fois les processus et les threads.

Linux a-t-il un planificateur de thread ET un planificateur de processus? Si oui, comment coopèrent-ils?

28
whitefox

Le Linux kernel scheduler est en fait la planification des tâches, et ce sont soit des threads soit des processus (à un seul thread).

Donc une tâche (un task_struct à l'intérieur du noyau), dans le contexte de l'ordonnanceur, est la chose en cours de planification, et peut être un thread du noyau comme kworker ou kswapd, certains thread utilisateur d'un processus multi-thread (comme firefox), ou le thread unique d'un single- processus threadé (comme bash), identifié avec ce processus à thread unique.

Un processus est un ensemble fini non vide (parfois un singleton) de threads partageant le même espace d'adressage virtuel (et d'autres choses comme - descripteurs de fichiers , répertoire de travail , etc etc ...). Voir aussi informations d'identification (7) , capacités (7) etc ....

Les threads sur Linux sont les threads du noyau (dans le sens d'être gérés par le noyau, qui crée également ses propres threads), créés par le spécifique Linux - clone syscall (qui peut également être utilisé pour créer des processus sous Linux). La fonction pthread_create est probablement construite (sous Linux) au-dessus de clone à l'intérieur NPTL et Gnu Libc (qui a intégré NPTL sous Linux) et musl-libc .

38

Les threads du noyau sous Linux sont implémentés en tant que processus qui partagent des ressources. Le planificateur ne fait pas de différence entre un thread et un processus

Voir ici pour plus d'informations: http://www.linuxquestions.org/linux/articles/Technical/Linux_Kernel_Thread

22
nurio