Pour aller plus loin : sous le capot
Quand lire cette page, et pourquoi elle est à part
Le cours Architecture de von Neumann nomme les trois bus et les trois temps du cycle. Cette page les détaille, et ajoute les exercices qui vont avec.
Viens-y après les défis LMC, pas avant : le cycle se comprend beaucoup mieux quand on a déjà écrit et fait tourner ses propres programmes. Rien ici n'est nécessaire pour les défis.
Le programme de première borne le cours aux concepts généraux du modèle. Ce qui est exigible tient donc dans la page de cours ; ce qui suit est du détail utile, et les deux dernières sections sont franchement hors programme.
1. Les trois bus en détail
Un bus n'est pas un tuyau dans lequel les informations circulent les unes après les autres : c'est un groupe de fils parallèles qui portent chacun, en permanence, un signal électrique dans l'un de ses deux états possibles.
Chaque bus est un groupe de fils physiquement séparé des autres. À chaque instant, la mémoire "voit" l'état de tous les fils simultanément. Il n'y a pas de mélange possible : chaque information voyage sur son propre groupe de fils.
C'est le signal sur le bus de contrôle qui déclenche l'action. Sans lui, la mémoire ne fait rien, même si une adresse est présente sur le bus d'adresses.
Exemple : ajouter 2 à la valeur stockée à l'adresse 42
Supposons que la case mémoire 42 contient la valeur 10. Le CPU doit calculer 10 + 2 et réécrire le résultat en mémoire.
Les trois bus travaillent simultanément à chaque étape. C'est leur combinaison qui donne un sens à l'opération : le bus de contrôle dit quoi faire, le bus d'adresses dit où, et le bus de données transporte le contenu.
Étape 1 : Lire la valeur en mémoire
CPU ══[ LIRE ]══► Mémoire (bus de contrôle : le CPU demande une lecture)
CPU ══[ 42 ]══► Mémoire (bus d'adresses : le CPU envoie l'adresse)
CPU ◄═[ 10 ]═══ Mémoire (bus de données : la mémoire répond avec la valeur)
Le CPU envoie en même temps l'ordre LIRE et l'adresse 42. La mémoire répond en plaçant la valeur 10 sur le bus de données. Le CPU la récupère dans l'accumulateur.
Étape 2 : Le calcul
L'UAL effectue 10 + 2 = 12. Cette étape est interne au CPU, les bus ne sont pas sollicités.
Étape 3 : Écrire le résultat en mémoire
CPU ══[ ÉCRIRE ]══► Mémoire (bus de contrôle : le CPU demande une écriture)
CPU ══[ 42 ]══► Mémoire (bus d'adresses : le CPU envoie l'adresse)
CPU ══[ 12 ]══► Mémoire (bus de données : le CPU envoie la valeur)
Le CPU envoie en même temps l'ordre ÉCRIRE, l'adresse 42 et la valeur 12. La mémoire reçoit les trois informations et écrit 12 à l'adresse 42.
À retenir : À l'étape 1, le bus de données va de la mémoire vers le CPU (la mémoire répond). À l'étape 3, il va du CPU vers la mémoire (le CPU envoie). Les bus d'adresses et de contrôle vont toujours du CPU vers la mémoire : c'est le CPU qui commande.
La case mémoire 42 contient maintenant 12.
Exercices sur les bus
Le CPU veut lire la valeur stockée à l'adresse 7
Complète le tableau :
| Bus | Valeur transportée | Sens |
|---|---|---|
| Bus d'adresses | ? | ? → ? |
| Bus de contrôle | ? | ? → ? |
| Bus de données | ? | ? → ? |
Réponse
| Bus | Valeur transportée | Sens |
|---|---|---|
| Bus d'adresses | 7 | CPU → Mémoire |
| Bus de contrôle | LIRE | CPU → Mémoire |
| Bus de données | la valeur à l'adresse 7 | Mémoire → CPU |
Le bus de données va de la mémoire vers le CPU car c'est une lecture : la mémoire répond.
Le CPU veut écrire la valeur 25 à l'adresse 3
Complète le tableau :
| Bus | Valeur transportée | Sens |
|---|---|---|
| Bus d'adresses | ? | ? → ? |
| Bus de contrôle | ? | ? → ? |
| Bus de données | ? | ? → ? |
Réponse
| Bus | Valeur transportée | Sens |
|---|---|---|
| Bus d'adresses | 3 | CPU → Mémoire |
| Bus de contrôle | ÉCRIRE | CPU → Mémoire |
| Bus de données | 25 | CPU → Mémoire |
Cette fois, les trois bus vont dans le même sens : le CPU envoie tout. C'est la différence avec la lecture.
Qu'est-ce qui changerait si on supprimait le bus de contrôle ?
On garde le bus d'adresses et le bus de données. Le CPU envoie l'adresse 3 et la valeur 25.
La mémoire doit-elle lire ou écrire ? Peut-elle le savoir ?
Réponse
Non, elle ne peut pas le savoir. Sans bus de contrôle, la mémoire voit une adresse (3) et une donnée (25) mais ne sait pas si elle doit :
- lire la valeur à l'adresse 3 et la mettre sur le bus de données, ou
- écrire 25 à l'adresse 3
Le bus de contrôle est indispensable pour lever cette ambiguïté.
2. Le cycle fetch-decode-execute en détail
Le cours dit que le processeur répète un cycle en trois temps. Voici ce que chaque temps recouvre exactement.
2.1 Fetch (recherche)
- L'UC lit l'adresse de la prochaine instruction dans le compteur ordinal (ou Program Counter)
- L'instruction est chargée depuis la mémoire vers le registre d'instruction
- Le compteur ordinal est incrémenté pour pointer vers l'instruction suivante
2.2 Decode (décodage)
L'UC analyse l'instruction pour déterminer :
- Quelle opération effectuer
- Quelles données utiliser (adresses, registres)
2.3 Execute (exécution)
L'UC commande l'UAL ou les autres composants pour réaliser l'opération.
Le cycle complet, sur une instruction LMC
Programme : additionner 3 + 5
00: LDA 10 // Charger la valeur à l'adresse 10
01: ADD 11 // Ajouter la valeur à l'adresse 11
02: STA 12 // Stocker le résultat à l'adresse 12
03: HLT // Arrêter
...
10: DAT 3 // Première valeur
11: DAT 5 // Deuxième valeur
12: DAT 0 // Résultat (initialement 0)
Déroulement du cycle pour l'instruction ADD 11 (adresse 01) :
-
Fetch :
- Le PC contient 01
- L'UC lit l'instruction à l'adresse 01 :
ADD 11(code machine :1011) - L'instruction est chargée dans le registre d'instruction
- Le PC est incrémenté : PC = 02
-
Decode :
- L'UC décode
1011: le premier chiffre,1, désigne l'instructionADD - Opérande : adresse 11
- Opération à effectuer : ajouter le contenu de l'adresse 11 à l'accumulateur
- L'UC décode
-
Execute :
- L'UC lit la valeur à l'adresse 11 : 5
- L'UAL additionne : accumulateur (3) + 5 = 8
- Le résultat 8 est stocké dans l'accumulateur
Puis le cycle recommence avec l'instruction suivante à l'adresse 02 (STA 12).
Exercices sur le cycle
Dérouler un programme, phase par phase
Reprends le programme du cours :
Adresse | Instruction Adresse | Valeur
--------|------------ --------|-------
0 | LDA 10 10 | 5
1 | ADD 11 11 | 3
2 | STA 12 12 | ?
3 | HLT
Recopie et remplis ce tableau. Cette fois, détaille les trois phases pour chaque instruction :
| Instruction | PC avant le fetch | Fetch | Decode | Execute | ACC après |
|---|---|---|---|---|---|
LDA 10 |
|||||
ADD 11 |
|||||
STA 12 |
|||||
HLT |
Une fois ton tableau rempli, saisis ce programme dans le simulateur, lance-le en mode pas à pas, et vérifie ta trace.
Avant d'ouvrir la correction
Explique en une phrase ce que tu as prédit pour l'accumulateur après ADD 11, et pourquoi. Puis compare.
Réponse
Instruction 0 : LDA 10
- PC = 0 avant le fetch
- Fetch : charge l'instruction à l'adresse 0 dans le registre d'instruction. PC passe à 1.
- Decode : identifie
LDA(code opération5), adresse source = 10 - Execute : lit la valeur à l'adresse 10 (= 5), la place dans l'accumulateur
- ACC = 5
Instruction 1 : ADD 11
- PC = 1 avant le fetch
- Fetch : charge l'instruction à l'adresse 1. PC passe à 2.
- Decode : identifie
ADD(code opération1), adresse source = 11 - Execute : lit la valeur à l'adresse 11 (= 3), l'additionne à l'accumulateur (5 + 3)
- ACC = 8
Instruction 2 : STA 12
- PC = 2 avant le fetch
- Fetch : charge l'instruction à l'adresse 2. PC passe à 3.
- Decode : identifie
STA(code opération3), adresse destination = 12 - Execute : écrit la valeur de l'accumulateur (8) à l'adresse 12
- La case mémoire 12 contient maintenant 8
Instruction 3 : HLT. Le programme s'arrête.
Les bus pendant le fetch
Toujours sur le même programme. Lors de la phase fetch de l'instruction rangée en 1 (ADD 11) :
- Que transporte le bus d'adresses ? Dans quel sens ?
- Que transporte le bus de contrôle ?
- Que transporte le bus de données ? Dans quel sens ?
Réponse
- Le bus d'adresses transporte 1 (l'adresse de l'instruction à charger, celle contenue dans le PC). Sens : CPU → Mémoire.
- Le bus de contrôle transporte LIRE (le CPU veut récupérer l'instruction). Sens : CPU → Mémoire.
- Le bus de données transporte l'instruction
ADD 11, c'est-à-dire le nombre1011. Sens : Mémoire → CPU.
Le fetch est toujours une lecture en mémoire : le CPU va chercher l'instruction.
3. Les registres
Les registres sont de petites mémoires ultra-rapides intégrées au processeur. Le cours n'en nomme que deux, le compteur ordinal et l'accumulateur. Voici la liste complète de ceux qui interviennent dans le cycle :
- Compteur ordinal (PC) : contient l'adresse de la prochaine instruction
- Registre d'instruction (RI) : contient l'instruction en cours d'exécution
- Accumulateur : contient la valeur sur laquelle l'UAL travaille, et le résultat de son calcul
- Registres généraux : stockent temporairement des données pour les calculs
Le LMC n'a qu'un seul registre de travail, l'accumulateur : c'est ce qui rend ses programmes si contraignants à écrire, et c'est voulu. Un processeur réel en possède plusieurs dizaines.
4. Le goulot de von Neumann
Hors programme.
Les instructions et les données partagent la même mémoire et les mêmes bus. Le processeur passe donc une partie de son temps à attendre la mémoire, et cette attente devient le facteur limitant : c'est le goulot de von Neumann.
Trois réponses courantes, qui ne suppriment pas le problème mais le réduisent :
- la mémoire cache, petite et très rapide, placée entre le processeur et la mémoire vive ;
- l'architecture Harvard, qui sépare la mémoire des instructions de celle des données ;
- le pipeline, qui commence le fetch de l'instruction suivante pendant qu'on exécute la courante.
5. Jeux d'instructions et architectures
Hors programme.
- Jeu d'instructions : l'ensemble des opérations qu'un processeur sait exécuter. Les familles CISC (beaucoup d'instructions, complexes) et RISC (peu d'instructions, simples et rapides) reposent sur deux paris opposés.
- Architectures alternatives : Harvard, et les variantes dites de von Neumann modifiée.
Sources :
- von Neumann, J. (1945). First Draft of a Report on the EDVAC. University of Pennsylvania.
- Tanenbaum, A. S. (2013). Structured Computer Organization (6e éd.). Pearson.