cours1 min de lecture

Le modèle de von Neumann

Le plan d'architecture posé en 1945 qui structure encore tous les ordinateurs modernes — CPU, mémoire, bus, cycle d'exécution.
programme

Introduction

En 1945, le mathématicien hongrois John von Neumann rédige un texte court qui va devenir le plan de l'ordinateur moderne. Avant lui, les machines comme l'ENIAC étaient programmées en branchant et débranchant des câbles — changer de programme demandait plusieurs jours. L'idée révolutionnaire de von Neumann tient en une phrase : stocker le programme dans la mémoire au même titre que les données. Plus de quatre-vingts ans plus tard, votre smartphone, votre console et le serveur qui héberge ce cours fonctionnent toujours selon ce modèle.

Les quatre grands constituants

Une machine de von Neumann comporte quatre blocs reliés par des bus, des faisceaux de fils qui transportent les informations.

ConstituantRôle
Unité centrale de traitement (CPU)Exécute les instructions une par une.
MémoireStocke les instructions du programme et les données.
Périphériques d'entrée/sortieCommuniquent avec l'extérieur (clavier, écran, disque, réseau).
BusTransportent données, adresses et signaux de contrôle entre les blocs.
Point central à retenir : dans le modèle de von Neumann, programme et données partagent la même mémoire. C'est ce qui permet à un ordinateur d'être universel — il peut charger n'importe quel programme sans modification matérielle.
bus de donnéesbus d'adressesbus de contrôleCPU

Unité de contrôle (UC)

Unité arithmétique
et logique (UAL)

Mémoire
(programme + données)

Périphériques d'entrée/sortie

Architecture de von Neumann

Le CPU et ses deux sous-unités

Le processeur (CPU) se décompose lui-même en deux blocs essentiels.

  • L'unité de contrôle (UC) lit l'instruction en mémoire, la décode, et donne les ordres aux autres composants.
  • L'unité arithmétique et logique (UAL) effectue les calculs (additions, comparaisons, opérations booléennes).

Le CPU dispose aussi de petites mémoires internes très rapides appelées registres — par exemple le compteur de programme (PC), qui contient l'adresse de la prochaine instruction à exécuter.

Quel registre indique la prochaine instruction à exécuter ?

La mémoire : un grand tableau d'octets

La mémoire centrale (RAM) est organisée comme un immense tableau de cases numérotées. Chaque case contient un octet (8 bits) et possède une adresse unique.

AdresseContenu (octet)Interprétation possible
0x001010110000Instruction « charger valeur »
0x001100000101La valeur 5
0x001200000111Instruction « ajouter »
0x001300000011La valeur 3

La même suite d'octets peut représenter une instruction ou une donnée, selon le contexte où le CPU la lit. C'est précisément cette uniformité qui définit l'architecture de von Neumann.

Goulot d'étranglement de von Neumann : le CPU et la mémoire communiquent par un seul bus partagé. Quand le processeur est très rapide et la mémoire relativement lente, ce bus devient le frein principal des performances. Les processeurs modernes contournent ce problème avec des caches (mémoires intermédiaires très rapides).

Le cycle d'exécution

Le CPU répète indéfiniment trois étapes, appelées cycle fetch–decode–execute.

  1. Fetch (chercher) — le CPU lit en mémoire l'instruction pointée par le compteur de programme.
  2. Decode (décoder) — l'unité de contrôle interprète cette instruction pour savoir quelle opération réaliser.
  3. Execute (exécuter) — l'UAL effectue le calcul, ou le CPU déplace une donnée, ou il saute à une autre adresse. Puis le compteur de programme avance vers l'instruction suivante.
instruction suivante

Fetch
lire l'instruction
pointée par le PC

Decode
interpréter
l'instruction

Execute
réaliser l'opération
puis PC ← PC + 1

Cycle fetch-decode-execute

Un exemple en pseudo-langage machine

Imaginons un mini-programme qui calcule c = a + b avec a à l'adresse 10, b à l'adresse 11, et c à l'adresse 12.

LOAD  R1, [10]   ; charger la valeur de l'adresse 10 dans le registre R1
LOAD  R2, [11]   ; charger la valeur de l'adresse 11 dans le registre R2
ADD   R3, R1, R2 ; R3 reçoit R1 + R2 (UAL au travail)
STORE R3, [12]   ; ranger R3 à l'adresse 12

Le CPU exécute ces quatre lignes l'une après l'autre. À haut niveau, c'est ce que vous écrivez en Python avec un simple c = a + b — l'interpréteur Python finit par produire l'équivalent de ces instructions élémentaires.

Combien d'étapes compose un cycle d'exécution standard ?

Mono-processeur et multi-processeur

Pendant des décennies, un ordinateur ne contenait qu'un seul processeur. Depuis les années 2005, la limite physique de la cadence (vers 4 GHz) a poussé les fondeurs à mettre plusieurs cœurs sur une même puce. Un processeur quad-core est en réalité une puce qui contient quatre UAL et quatre unités de contrôle quasi-indépendantes, partageant une mémoire commune.

Plus de cœurs ne signifie pas automatiquement plus vite. Un programme doit être explicitement écrit pour répartir son travail sur plusieurs cœurs. Sinon, seul un cœur travaille pendant que les autres se tournent les pouces.

Pour aller plus loin

L'architecture Harvard (utilisée notamment dans certains microcontrôleurs) sépare physiquement la mémoire des instructions et celle des données, ce qui évite le goulot d'étranglement de von Neumann au prix d'une moindre flexibilité. Vous croiserez aussi le terme RISC (jeu d'instructions réduit, comme les processeurs ARM de votre smartphone) opposé à CISC (jeu d'instructions étendu, comme les processeurs Intel x86). Ce sont des variantes qui restent fidèles au plan général posé par von Neumann.