Dans un ordinateur, le processeur (ou CPU pour Central Processing Unit en anglais) est l'unité centrale. Il est appelé "cerveau" de l'ordinateur et a pour but d'exécuter des programmes avec l'aide de la mémoire vive : la RAM. Un processeur construit en un seul circuit intégré est un microprocesseur.
Il est facile de confondre les deux termes, après tout une seule lettre les différencie. Cela dit, les différences techniques sont notables car chacune remplit une fonction différente.
Un CPU, c'est ni plus ni moins le processeur, le cerveau de l'ordinateur. Le GPU (Graphics Processing Unit) s'occupe des tâches graphiques telles que le rendu des images en cours de jeu, la manipulation des données vidéo lors de la création de contenu, ou encore le traitement des résultats des charges de travail d'IA intensives. Que ce soit GPU ou CPU, les deux sont des composants extrêmement sollicités et sont tout aussi importants l'un et l'autre.
Dans un processeur, on retrouve 5 composants différents, chacun jouant un rôle précis.
L'unité de commande (ou unité de contrôle) se charge de gérer le processeur. Elle peut décoder les instructions, choisir les registres à utiliser, gérer les interruptions ou initialiser les registres au démarrage. L'unité de commande envoie des instructions aux autres composants du processeur afin qu'ils effectuent les opérations requises.
L'Unité Arithmétique et Logique (ou ALU en anglais pour Arithmetic Logical Unit) exécute des opérations arithmétiques de base (addition, soustraction, multiplication et division) et des opérations logiques (AND, OR et NOT) sur les données. Elle reçoit les données des registres du processeur, les traite en fonction des instructions de l'unité de commande et en génère le résultat.
Les registres sont des mémoires à haute vitesse garantissant un accès rapide aux données. Ils contiennent les données sur lesquelles le processeur travaille actuellement.
Le processeur possède plusieurs types de registres :
Le processeur utilise un signal d'horloge régulier pour synchroniser ses opérations internes. Elle est présente dans les processeurs synchrones mais absente des processeurs asynchrones et des processeurs auto-synchrones.
Selon l'architecture du processeur, il peut y avoir une unité d'interface de bus ou une unité de gestion de mémoire distincte. Ces composants gèrent les tâches liées à la mémoire, telles que la gestion des interactions entre le processeur et la RAM. Ils gèrent également la mémoire cache (une petite unité de mémoire rapide située dans le processeur) et la mémoire virtuelle dont le processeur a besoin pour le traitement des données.
Le fonctionnement d'un processeur peut être décomposé en plusieurs étapes, communément appelées le cycle d'exécution :
1. Extraction (Fetch) : Le processeur récupère l'instruction à exécuter depuis la mémoire (RAM ou cache).
2. Décodage (Decode) : L'unité de commande décode l'instruction pour déterminer quelle opération doit être effectuée.
3. Exécution (Execute) : L'UAL exécute l'opération sur les données concernées.
4. Stockage (Store) : Le résultat de l'opération est stocké dans la mémoire ou dans un registre.
Ce cycle se répète des milliards de fois par seconde, la vitesse étant déterminée par la fréquence d'horloge du processeur, exprimée en gigahertz (GHz). Un processeur à 3 GHz peut effectuer jusqu'à 3 milliards de cycles par seconde.
Le marché des processeurs est dominé par deux grands fabricants :
Intel : Fondé en 1968, Intel est longtemps resté le leader incontesté du marché des processeurs. Ses gammes incluent les Core i3, i5, i7 et i9 pour les ordinateurs personnels, ainsi que les Xeon pour les serveurs.
AMD : Concurrent historique d'Intel, AMD a connu une renaissance avec ses processeurs Ryzen, offrant un excellent rapport qualité-prix et surpassant parfois Intel dans certaines tâches multitâches.
Les processeurs ont considérablement évolué depuis leur création. Comprendre les différences entre les processeurs mono-cœur et multi-cœur est essentiel pour choisir le bon composant.
Les premiers processeurs étaient tous mono-cœur, c'est-à-dire qu'ils ne possédaient qu'une seule unité de traitement capable d'exécuter des instructions. Ces processeurs ne pouvaient traiter qu'une seule tâche à la fois, ce qui limitait leurs performances lorsque plusieurs applications étaient utilisées simultanément. Pour augmenter les performances, les fabricants ont d'abord augmenté la fréquence d'horloge, mais cette approche a atteint ses limites en raison de la dissipation thermique et de la consommation énergétique.
Les processeurs multi-cœur intègrent plusieurs unités de traitement (cœurs) sur une même puce. Chaque cœur fonctionne comme un processeur indépendant, permettant au système d'exécuter plusieurs tâches en parallèle. Un processeur dual-core possède 2 cœurs, un quad-core en possède 4, un octo-core en possède 8, et ainsi de suite.
L'avantage majeur des processeurs multi-cœur est leur capacité à gérer le multitâche de manière bien plus efficace. Un ordinateur avec un processeur quad-core peut théoriquement effectuer quatre tâches simultanément, ce qui améliore considérablement les performances dans les applications modernes, notamment le montage vidéo, les jeux vidéo et les tâches de rendu 3D.
Cependant, tous les logiciels bénéficient automatiquement des multiples cœurs. Les programmes doivent être spécifiquement optimisés pour tirer parti du parallélisme. Certains logiciels anciens ou mal optimisés ne fonctionneront pas nécessairement plus vite sur un processeur avec plus de cœurs.
L'histoire des processeurs montre une évolution constante vers plus de cœurs et une meilleure efficacité énergétique. Les premiers processeurs grand public (comme l'Intel Pentium ou l'AMD Athlon) étaient mono-cœur. La transition vers le multi-cœur a commencé au début des années 2000 avec les premiers processeurs dual-core. Aujourd'hui, les processeurs grand public peuvent avoir jusqu'à 24 cœurs (comme l'Intel Core i9-14900K), tandis que les processeurs serveur peuvent en avoir bien plus.
L'ordonnanceur (ou scheduler en anglais) est un composant essentiel des systèmes d'exploitation. Il joue un rôle crucial dans la gestion des processus et l'utilisation efficace des ressources du processeur.
L'ordonnanceur est responsable de décider quels processus doivent s'exécuter et à quel moment. Il gère la file d'attente des processus prêts à s'exécuter et alloue le temps CPU à chacun d'entre eux. Son objectif principal est d'optimiser l'utilisation du processeur tout en garantissant une répartition équitable des ressources.
Il existe plusieurs algorithmes d'ordonnancement :
Ordonnancement FIFO (First In, First Out) : Le premier processus à arriver est le premier à être exécuté. Simple mais peut mener à de longs temps d'attente pour les processus courts.
Ordonnancement par priorité : Les processus sont exécutés selon leur priorité. Les processus plus importants sont traités en premier, ce qui peut cependant priver les processus de faible priorité de temps d'exécution.
Ordonnancement round-robin : Chaque processus obtient un quantum de temps CPU équitable. Idéal pour les systèmes multitâches où tous les processus ont une importance égale.
Ordonnancement multi-niveaux : Combine plusieurs algorithmes pour optimiser les performances selon le type de processus.
Sans ordonnanceur, un système d'exploitation ne pourrait pas gérer efficacement plusieurs programmes simultanément. L'ordonnanceur permet de :
- Optimiser l'utilisation du processeur en minimisant les temps d'inactivité
- Garantir que tous les processus reçoivent un temps d'exécution équitable
- Réduire les temps de réponse pour les interactions utilisateur
- Gérer les priorités entre les processus critiques et non critiques
- Assurer une transition fluide entre les différentes tâches
Dans les systèmes modernes avec des processeurs multi-cœurs, l'ordonnanceur doit également décider sur quel cœur chaque processus doit s'exécuter, en tenant compte de facteurs comme la charge de chaque cœur et les besoins spécifiques du processus.