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é.
Un processus peut avoir plusieurs états :
Un processus est dit élu si il est en cours d’exécution dans un des cœurs du processeur.
Il est en attente lorsqu'il attend un évenement, par exemple une entrée de l'utilisateur, un acces à la mémoire, une réponse d'un périphérique... il ne sert à rien de l'avoir élu. Quand le système d'exploitation reçoit l'instruction il sort le processus de l'attente.
Il est en pret si il peut être élu mais qu'il attend son tour.
Il est bloqué si une condition (libération d'une ressource ou attente d'un périphérique par exemple) l’empêche de devenir élu.
terminé.
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).
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 :
En les plaçant dans une file. Donc le premier processus arrivé sera le premier sortie.
En lançant le processus le plus court d'abord.
En découpant le temps en parties (quantum) puis lançant une partie des processus après l'autre. Si le changement d'état entre processus n'est pas assez faible par rapport au quantum de temps alors le temps d'execution des processus va trop se ralonger (dans l'exemple animé suivant le changement prend 40% d'un quantum) et l'ensemble des processus se terminera en 9.4s contre 6.8s sinon.
En reprenant la facon précédente mais en ajoutant des priorités, celà est utile si un processus doit se finir à un temps donné (dans les systèmes embarqués).
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 :