Processus et thread.

Définition

Nous avons l'an dernier qu'un processeur mono cœur ne peut qu'effectuer qu'une instruction après l'autre pourtant notre ordinateur possède souvent plusieurs programme fonctionnant simultanément (le système d'exploitation, l'antivirus, le lecteur de musique, le navigateur (qui éventuellement lance un script en JavaScript),..., en réalité c'est programme n'utilisent pas le processeur simultanément mais les uns après les autres et de facon très rapide, nous donnant cette impression de simultanéité.

Remarque

Actuellement les processeurs ont de nombreux coeurs (parfois 16) mais le nombre de processus dans un processeur est très largement supérieur donc chaque coeur va devoir passer de l'un à l'autre (mais moins rapidement que pour un mono-coeur).

Si un seul thread existe alors avoir un processur muti-coeur n'apporte rien ! Un jeu qui n'est pas programmé pour ne sera pas 4 fois plus rapides sur un 16 coeurs que sur un 4 coeurs (à fréquence égale).

Définition

Un processus est un programme en cours d’exécution dans l'ordinateur, à un processus on associe un compteur ordinal, un registre d'instruction...) des zones mémoires virtuelles (c'est à dire que le système d'exploitation peut arranger mais qui, pour le processus, sont fixes) le processus évolue avec le temps.

Un processus peut avoir plusieurs états :

Deux processus ont une mémoire séparée, le système d'exploitation va assurer ce point. Ce qui veut dire notamment que deux processus ne peuvent pas communiquer "rapidement" (une solution est de passer par un fichier).

Définition

Un thread (ou processus léger) est un constituant du processus (qui en possède au moins un), si deux processus ont des mémoires séparées, deux threads peuvent se partager la mémoire, deux threads peuvent donc modifier une variable d'un programme par exemple.

Remarque

La commande Windows permettant de connaître les processus actifs est tasklist. Sur linux c'est PS. LEs processus sont associés à un numéro PID.

Remarque

Si avoir plusieurs processeurs n'apportent rien si un seul thread existe, le contraire n'est pas vrai : il y a intérêt même en ayant un seul processeur, d'avoir plusieurs threads, déjà pour avoir cette impression d'avoir plusieurs programmes qui tournent en même temps mais même pour un processus unique (à plusieurs threads), souvent un programme doit attendre (par exemple la synchronisation de l'image ou le chargement d'une image, on peut laisser un thread s'en charger et continuer les calculs sur un (des) autres(s), on fait de la programmation asynchrone. La conception de python ne lui permet pas l'utilisation de plusieurs cœurs (voir ici, thread = fil ) par contre il peut faire de la programmation asynchrone (qui peut avoir de très bons résultats selon les cas).

Ordonnanceur

C'est au système d'exploitation et plus particulièrement à une de ses parties, l'ordonnanceur, qui gère l’exécution des processus. Il existe plusieurs type d’ordonnanceur, certains n’interrompant pas les processus, et les autres (celui de Windows ou de Linux par exemple) pouvant le faire. Ensuite le choix du processus élu peut se faire :

exercice

On dispose d'un processus qui pour se terminer prend une seconde (bleu), un qui prend deux secondes (le vert) et le dernier qui prend (le brun). Décrire les 6 façons de les avoir dans une file et donnez à chaque fois le temps d'attente moyen (total de l'attente/nb de processus). Quel placement donne le temps d'attente moyen le plus court ?

Programmation concurrente

Des problèmes peuvent survenir quand plusieurs processus (ou plusieurs threads fonctionnent) :

Imprévisibilité

Le système d'exploitation s'occupe de faire marcher des threads à tour de rôle et on ne maîtrise pas l’ordonnanceur, le résultat obtenu peut différer selon les instants :


	

Blocage

Si l'ordonnanceur fait tourner les processus par intervalle de temps alors deux processus peuvent se bloquer mutuellement, c'est parfois le cas dans l'exemple ci dessous :


	

Annales de B.A.C.

Candidat libre 2021

exercice

Metropole 2021

Q.C.M.

Parmi les commandes ci-dessous, laquelle permet d’afficher les processus en cours d’exécution ?





Q.C.M.

Quelle abréviation désigne l’identifiant d’un processus dans un système d’exploitation de type UNIX ?





Q.C.M.

Comment s’appelle la gestion du partage du processeur entre différents processus ?





Q.C.M.

Quelle commande permet d’interrompre un processus dans un système d’exploitation de type UNIX et qui est équivalente à TASKKILL de WINDOWS?





exercice