Aller au contenu principal

Fonctionnement du processeur

1. Relation entre instruction et processeur​

Lorsque le code d'un programme est compilé, il doit être compilé pour une architecture de processeur. Les instructions peuvent être exécutées uniquement par l'architecture ciblée.

L'architecture du processeur est en partie le nombre de bits, mais également son type.

Dans les ordinateurs domestiques, l'architecture actuelle est AMD 64bits. Intel partage également la même architecture pour ses processeurs 64bits.

Il existe d'autres architectures comme ARM. Il n'est donc pas possible d'exécuter du code compilé pour Intel/AMD.

2. Architecture de Von Neumann​

L'architecture de John Von Neemann a été élaborée en 1945. Les processeurs et ordinateurs modernes sont maintenant beaucoup plus complexes, mais ils dérivent tout de même de ce modèle.

Cette architecture démontre bien le fonctionnement d'un ordinateur et de base.

L'architecture est séparée en plusieurs parties.

  • Unité de contrôle

    L'unité de contrôle s'occupe du séquençage des opérations. Il est le chef d'orchestre du processeur.

  • Unité arithmétique et logique ou Unité de traitement.

    Le terme ALU est utilisé en anglais pour désigner l'unité arithmétique. Son rôle est d'exécuter les instructions.

    Il est en mesure d'effectuer les opérations mathématiques (addition, soustraction...) et les opérations logiques (Et, Ou...)

  • Registre

    Un registre est une zone de mémoire interne au processeur. Son accès est très rapide, car le registre est intégré au processeur.

    Il existe un registre pour contenir l'adresse mémoire pour la prochaine instruction (compteur ordinal) et le pointeur de pile.

  • Accumulateur

    C'est un registre interne du processeur. Son rôle est d'enregistrer les résultats intermédiaires pour les instructions qui sont effectuées par l'ALU.

  • Mémoire

    La mémoire contient les instructions des programmes et les données.

  • Dispositifs d'entrée et sorties

    Ce sont les périphériques qui permettent à l'ordinateur de recevoir les données de l'utilisateur (entrée) et de lui retourner (sortie).

Source : https://commons.wikimedia.org/wiki/File:Von_Neumann_architecture.svg

3. Instruction​

Une instruction est une action que le processeur doit exécuter.

Le processus contient une série d'instructions pour effectuer une tâche.

Une instruction est séparée en 2 parties.

  • Opération -> Elle consiste à l'action
  • Opérande -> Ele consiste à la valeur

Le processeur exécute l'instruction et retourne un résultat.

Prenons par exemple cette opération mathématique 2 + 6 = 8. Elle contient 3 instructions.

La première instruction est de récupérer la valeur 2.

  • L'opération est récupérée.
  • L'opérande est 2.

La deuxième instruction est d'additionner 6.

  • L'opération est l'addition.
  • L'opérande est 6.

La troisième instruction est d'enregistrer le résultat en mémoire.

  • L'opération est enregistrer.
  • L'opérande est 8.

4. Fréquence d'horloge du processeur​

Pour fonctionner, le processeur a besoin d'une fréquence. Cette fréquence détermine le nombre d'impulsions ou cycles par seconde que le processeur peut effectuer.

L'unité de mesure de la fréquence est le hertz (Hz).

Un processeur que son horloge a une fréquence de 2,4 GHz, sera en mesure de faire 2 400 000 000 de cycles par seconde.

À chaque cycle ou impulsion électrique, le processeur est en mesure d'avoir un état et d'effectuer des actions en fonction de cet état. À la prochaine impulsion, l'état change et d'autres actions sont effectuées.

Il y a un lien direct entre la fréquence d'horloge et la rapidité du processeur. Mais, il y a 20 ans, les Pentium 4 pouvaient aller jusqu'à 3 GHz et aujourd'hui, les processeurs à 1,7 Ghz sont beaucoup plus rapides. Le processeur d'aujourd'hui a plusieurs coeurs, des bus plus rapides, une plus grande capacité de mémoire cache.... Comparer uniquement la fréquence entre 2 processeurs n'est pas suffisant pour déterminer celui qui est plus rapide. Mais si tous les autres paramètres sont identiques, celui avec une plus grande fréquence sera effectivement plus rapide.

5. Opérations fondamentales​

Le processeur a 3 opérations fondamentales. Une opération fondamentale est une action de base que le processeur doit être en mesure d'effectuer.

  • Extraire ou Fetch

    L'opération Extraire consiste à récupérer l'instruction dans la mémoire.

    Cette instruction est enregistrée dans un registre du processeur.

    C'est l'unité de contrôle qui s'occupe de l'extraction.

  • Décoder ou Decode

    L'opération Décoder consiste à lire l'instruction et à préparer son exécution.

    C'est l'unité de contrôle qui s'occupe de l'extraction.

  • Exécuter ou Execute

    L'opération Executer consiste à exécuter l'instruction. C'est l'unité arithmétique qui exécute l'instruction.

Donc il faut 3 cycles pour exécuter une instruction. Si le programme a 2 instructions, il faut 6 cycles.

InstructionCycle 1Cycle 2Cycle 3Cycle 4Cycle 5Cycle 6
#1ExtraireDécoderExécuter
#2ExtraireDécoderExécuter

5.1. Relation entre instruction et cycle/fréquence​

Donc il est possible de faire une relation entre les instructions et le cycle d'horloge.

Si le programme contient 10 instructions, il lui faut 30 cycles pour l'exécuter complètement.

10 instructions * 3 cycles par instruction = 30 cycles

Un processeur qui a une fréquence de 3 000 000 Hz ou 3 MHz peut effectuer 1 000 000 d'instructions.

3 000 000 cycles / 3 cycles par instruction = 1 000 000 instructions

5.2. Exemple 1​

Le programme doit exécuter le code ci-dessous :

int terme1 = 2;

int resultat = terme1 + 6;

Lors de l'exécution du programme, le processus a maintenant ses instructions dans la mémoire vive, il y aura ceci au début du processus. Il y a 3 instructions. Le programme va prendre 9 cycles pour s'exécuter. => 3 instructions * 3 cycles par instruction = 9 cycles.

AdresseValeur
#0Récupérer la valeur de l'adresse #3
#1Additionner la valeur de l'adresse #4
#2Enregistrer la valeur à l'adresse #5
#32
#46
#5

Cycle 1

Le pointeur ordinal est à l'adresse #0.

L'unité de contrôle extrait l'instruction de l'adresse #0 et il le met dans le registre d'instruction.

Cycle 2

L'unité de contrôle décode l'instruction dans le registre.

L'instruction est Récupérer la valeur de l'adresse #3.

Cycle 3

L'unité arithmétique exécute l'instruction Récupérer la valeur de l'adresse #3.

Il place dans son accumulateur la valeur 2.

Cycle 4

Le pointeur ordinal est à l'adresse #1.

L'unité de contrôle extrait l'instruction de l'adresse #1 et il le met dans le registre d'instruction.

Cycle 5

L'unité de contrôle décode l'instruction dans le registre.

L'instruction est Additionner la valeur de l'adresse #4.

Cycle 6

L'unité arithmétique exécute l'instruction Additionner la valeur de l'adresse #4.

L'unité arithmétique prend la valeur actuelle dans son accumulateur (2) et ajoute la valeur (6).

Il place dans son accumulateur la valeur 8.

Cycle 7

Le pointeur ordinal est à l'adresse #2.

L'unité de contrôle extrait l'instruction de l'adresse #2 et il le met dans le registre d'instruction.

Cycle 8

L'unité de contrôle décode l'instruction dans le registre.

L'instruction est Enregister la valeur à l'adresse #5.

Cycle 9

L'unité arithmétique exécute l'instruction Enregister la valeur à l'adresse #5.

Il prend la valeur de son accumulateur (8) et cette valeur à l'adresse #5 de la mémoire vive.

À la fin du cycle 8, la mémoire vive est comme ceci. L'Adresse #5 de la mémoire vive a maintenant une valeur.

AdresseValeur
#0Récupérer la valeur de l'adresse #3
#1Additionner la valeur de l'adresse #4
#2Enregistrer la valeur à l'adresse #5
#32
#46
#58

Le processus est maintenant terminé.

5.3. Exemple 2​

Voici un vidéo en anglais qui explique bien le fonctionnement de ce code. https://www.youtube.com/watch?v=Z5JC9Ve1sfI

int x = 1;
while(true) {
x = x + 1;
}

6. Pipeline​

Afin d'accélérer le fonctionnement du processeur, le principe de pipeline a été introduit. Les opérations fondamentales peuvent fonctionner en parallèle. Le processeur est en mesure de faire un Fetch, Execute et Decode pour 3 instructions simultanément à chaque cycle.

Lors de la création de l'instance, le premier cycle sert uniquement à extraire la première instruction.

Au deuxième cycle, la première instruction est décodée et la deuxième instruction est extraite.

Au troisième cycle, la première instruction est exécutée, la deuxième instruction est décodée et la troisième est extraite. À partir de la 3e instruction, le parallélisme est optimal.

Au quatrième cycle, la deuxième instruction est exécutée, la troisième instruction est décodée et la quatrième est extraite.

Lorsque le processeur est rendu à la fin des instructions, les 2 derniers cycles ne font pas tous les opérations fondamentales comme pour les 2 premiers.

Voici un exemple pour 4 instructions qui sont exécutées en mode pipeline.

InstructionCycle 1Cycle 2Cycle 3Cycle 4Cycle 5Cycle 6
#1ExtraireDécoderExécuter
#2ExtraireDécoderExécuter
#3ExtraireDécoderExécuter
#4ExtraireDécoderExécuter

Les cycles 3 et 4 sont optimaux, car toutes les opérations fondamentales sont utilisées.

Pour calculer le nombre de cycles nécessaires en mode pipeline, c'est le nombre d'instructions + 2.

Pour calculer le nombre de cycles nécessaires en mode pipeline, c'est le nombre d'instructions * 3.

Pour 100 instructions :

  • Normal

    100 instructions * 3 = 300 cycles.

  • Pipeline

    100 instructions + 2 = 102 cycles.

Le gain en mode pipeline est très significatif.

6.1. Exemple​

Voici un exemple d'exécution en mode pipeline. Le programme doit exécuter le code ci-dessous :

int terme1 = 2;

int resultat = terme1 + 6;

Lors de l'exécution du programme, le processus a maintenant ses instructions dans la mémoire vive, il y aura ceci au début du processus. Il y a 3 instructions. Le programme va prendre 5 cycles pour s'exécuter.

AdresseValeur
#0Récupérer la valeur de l'adresse #3
#1Additionner la valeur de l'adresse #4
#2Enregistrer la valeur à l'adresse #5
#32
#46
#5

Cycle 1

Le pointeur ordinal est à l'adresse #0.

L'unité de contrôle extrait l'instruction de l'adresse #0 et il le met dans le registre d'instruction.

Cycle 2

L'unité de contrôle décode l'instruction dans le registre.

L'instruction est Récupérer la valeur de l'adresse #3.


Le pointeur ordinal est à l'adresse #1.

L'unité de contrôle extrait l'instruction de l'adresse #1 et il le met dans le registre d'instruction.

Cycle 3

L'unité arithmétique exécute l'instruction Récupérer la valeur de l'adresse #3.

Il place dans son accumulateur la valeur 2.


L'unité de contrôle décode l'instruction dans le registre.

L'instruction est Additionner la valeur de l'adresse #4.


Le pointeur ordinal est à l'adresse #2.

L'unité de contrôle extrait l'instruction de l'adresse #2 et il le met dans le registre d'instruction.

Cycle 4

L'unité de contrôle décode l'instruction dans le registre.

L'instruction est Enregister la valeur à l'adresse #5.


L'unité arithmétique exécute l'instruction Additionner la valeur de l'adresse #4.

L'unité arithmétique prend la valeur actuelle dans son accumulateur (2) et ajoute la valeur (6).

Il place dans son accumulateur la valeur 8.

Cycle 5

L'unité arithmétique exécute l'instruction Enregister la valeur à l'adresse #5.

Il prend la valeur de son accumulateur (8) et cette valeur à l'adresse #5 de la mémoire vive.

À la fin du cycle 5, la mémoire vive est comme ceci. L'Adresse #5 de la mémoire vive a maintenant une valeur.

AdresseValeur
#0Récupérer la valeur de l'adresse #3
#1Additionner la valeur de l'adresse #4
#2Enregistrer la valeur à l'adresse #5
#32
#46
#58

Le processus est maintenant terminé.

7. Lectures et références​

  1. Wikipedia, Architecture de von Neumann, https://fr.wikipedia.org/wiki/Architecture_de_von_Neumann, 2022-08-24

  2. Wikipedia, Instruction pipelining, https://en.wikipedia.org/wiki/Instruction_pipelining, 2022-08-24

  3. Wikipedia, Processusinformatique, https://fr.wikipedia.org/wiki/Processus(informatique), 2022-08-24

  4. Wikipedia, Ordonnancement dans les systèmes d'exploitation, https://fr.wikipedia.org/wiki/Ordonnancement_dans_les_syst%C3%A8mes_d%27exploitation, 2022-08-24