L’architecture de von Neumann désigne l’un des modèles fondamentaux de
l’informatique moderne. Formalisée au milieu des années 1940 dans le
contexte des premiers ordinateurs électroniques, elle repose sur une
idée aujourd’hui presque évidente : les instructions d’un programme
peuvent être stockées en mémoire, au même titre que les données qu’elles
manipulent.
Ce principe du programme enregistré a profondément changé la
conception des ordinateurs. Une même machine pouvait désormais effectuer
des tâches très différentes simplement en chargeant un nouveau
programme, sans qu’il soit nécessaire de modifier physiquement son
câblage.
Plus de quatre-vingts ans après les premiers travaux sur l’EDVAC, les
processeurs sont devenus infiniment plus complexes. Pourtant, les
notions de mémoire, d’unité de calcul, d’unité de contrôle et
d’entrées-sorties restent au cœur de leur fonctionnement.
Avant le programme enregistré
Les premières machines de calcul automatiques n’étaient pas
nécessairement programmées comme nos ordinateurs actuels.
Sur certaines machines, modifier le calcul à effectuer impliquait de
changer des connexions, de déplacer des câbles, de régler des
commutateurs ou de préparer de nouveaux supports physiques. L’ENIAC, mis
au point aux États-Unis pendant la Seconde Guerre mondiale, en constitue
un exemple célèbre : sa configuration initiale nécessitait un important
travail manuel.
Ces machines pouvaient effectuer des calculs extrêmement rapidement pour
leur époque, mais passer d’un problème à un autre restait contraignant.
Une question devient alors essentielle :
Et si les instructions indiquant à la machine ce qu’elle doit faire
étaient elles-mêmes enregistrées dans sa mémoire ?
Le programme ne serait plus uniquement représenté par la configuration
physique de la machine. Il deviendrait une information que l’ordinateur
pourrait charger et lire.
Cette idée constitue le cœur du concept de programme enregistré.
Le projet EDVAC et le rapport de 1945
En 1945, alors que l’ENIAC n’est pas encore officiellement présenté au
public, ses concepteurs travaillent déjà à son successeur : l’EDVAC,
pour Electronic Discrete Variable Automatic Computer.
John von Neumann rejoint les
discussions autour du projet et rédige un document devenu célèbre, le
First Draft of a Report on the EDVAC.
Le rapport décrit une machine électronique organisée autour de plusieurs
grandes fonctions : calcul, contrôle, mémoire et communication avec
l’extérieur. Il expose surtout le principe selon lequel les instructions
peuvent être représentées sous une forme numérique et conservées en
mémoire.
Le document circule largement et contribue fortement à diffuser cette
nouvelle manière de concevoir un ordinateur.
C’est notamment pour cette raison que l’expression « architecture de
von Neumann » s’imposera progressivement.
Cette appellation mérite cependant une précision historique importante.
Une invention qui ne repose pas sur un seul homme
Présenter John von Neumann comme l’unique inventeur de cette
architecture serait trompeur.
Les réflexions autour du programme enregistré émergent dans un
environnement scientifique beaucoup plus large. Les ingénieurs J.
Presper Eckert et John Mauchly, qui travaillent sur l’ENIAC puis
l’EDVAC, participent directement à la conception de ces nouvelles
machines.
D’autres chercheurs contribuent également à l’évolution des idées
concernant les calculateurs électroniques et programmables.
Von Neumann joue néanmoins un rôle déterminant dans leur formalisation
et surtout dans leur diffusion. Le First Draft porte son nom et
circule largement auprès des chercheurs travaillant sur les futurs
ordinateurs.
Le terme historique est donc resté.
Parler aujourd’hui d’architecture de von Neumann reste parfaitement
légitime, à condition de garder à l’esprit que la naissance de
l’ordinateur moderne est le résultat d’un travail collectif.
Les cinq grandes fonctions d’un ordinateur
Dans une représentation simplifiée, une machine de type von Neumann
comprend plusieurs éléments essentiels :
une unité arithmétique et logique ;
une unité de contrôle ;
une mémoire ;
des dispositifs d’entrée ;
des dispositifs de sortie.
L’unité arithmétique et logique, souvent appelée UAL ou ALU en
anglais, effectue les opérations demandées : additions, soustractions,
comparaisons ou opérations logiques.
L’unité de contrôle orchestre le fonctionnement de la machine. Elle
détermine quelle instruction doit être exécutée et commande les autres
composants.
Dans les ordinateurs modernes, ces deux fonctions font partie du
processeur, ou CPU.
La mémoire conserve les informations dont la machine a besoin. Elle peut
contenir aussi bien les données à traiter que les instructions du
programme.
Enfin, les entrées et sorties permettent à l’ordinateur de communiquer
avec le monde extérieur : clavier, écran, stockage, réseau, capteurs ou
de nombreux autres périphériques.
Cette représentation est volontairement simplifiée, mais elle fournit
encore aujourd’hui une excellente grille de lecture pour comprendre un
ordinateur.
L’idée décisive : instructions et données en mémoire
La caractéristique la plus célèbre du modèle réside dans la manière dont
la mémoire est utilisée.
Dans une architecture de von Neumann classique, les données et les
instructions peuvent être stockées dans la même mémoire.
Prenons un programme extrêmement simple chargé d’additionner deux
nombres.
La mémoire peut contenir :
les deux nombres à additionner ;
l’instruction demandant leur addition ;
l’instruction indiquant où enregistrer le résultat ;
puis le résultat lui-même.
Pour la machine, une instruction est donc elle aussi représentée par des
informations numériques.
Cette idée ouvre des possibilités considérables.
Changer de programme ne nécessite plus nécessairement de reconstruire ou
de recâbler l’ordinateur. Il suffit de placer de nouvelles instructions
dans sa mémoire.
Une même machine physique devient ainsi capable d’exécuter un traitement
comptable, un calcul scientifique, un jeu ou un éditeur de texte
simplement en utilisant des programmes différents.
C’est l’un des principes qui rendent possible l’ordinateur
généraliste.
Comment le processeur exécute-t-il un programme ?
Le fonctionnement peut être représenté par un cycle souvent appelé
fetch-decode-execute, ou recherche-décodage-exécution.
Imaginons qu’un programme soit déjà chargé en mémoire.
1. Rechercher l’instruction
Le processeur doit d’abord savoir quelle instruction exécuter.
Un registre particulier, généralement appelé compteur ordinal ou
program counter, contient l’adresse de la prochaine instruction.
Le processeur va chercher cette instruction en mémoire.
2. Décoder l’instruction
Une fois chargée, l’instruction doit être interprétée.
L’unité de contrôle détermine l’opération demandée : effectuer une
addition, comparer deux valeurs, déplacer une donnée, lire une zone de
mémoire ou modifier l’ordre d’exécution du programme.
3. Exécuter l’opération
L’opération est ensuite réalisée.
Si un calcul est nécessaire, l’unité arithmétique et logique peut
intervenir. Si l’instruction demande une donnée, le processeur peut la
récupérer en mémoire.
4. Enregistrer le résultat
Le résultat peut être placé dans un registre, écrit en mémoire ou
transmis à un autre composant.
Le processeur passe ensuite à l’instruction suivante.
À plusieurs milliards de cycles par seconde sur certains processeurs
actuels, cette succession d’opérations devient invisible pour
l’utilisateur.
Les registres : une mémoire au plus près du calcul
La mémoire principale n’est pas le seul endroit où le processeur
conserve des informations.
Il possède également de petites zones de stockage extrêmement rapides
appelées registres.
Ils peuvent contenir temporairement :
des valeurs utilisées dans un calcul ;
des adresses mémoire ;
des résultats intermédiaires ;
l’instruction en cours ;
l’adresse de la prochaine instruction.
Leur capacité est minuscule comparée à celle de la mémoire vive, mais
leur proximité avec les unités de calcul les rend beaucoup plus rapides.
Cette différence illustre un problème qui devient de plus en plus
important à mesure que les processeurs accélèrent : le calcul peut
devenir plus rapide que l’accès aux données dont il a besoin.
Le goulot d’étranglement de von Neumann
Dans le modèle classique, instructions et données partagent la mémoire
et les voies permettant de communiquer avec le processeur.
Le processeur doit donc continuellement récupérer de nouvelles
instructions et les données nécessaires à leur exécution, puis
éventuellement renvoyer les résultats vers la mémoire.
Même si le processeur est extrêmement rapide, ses performances peuvent
être limitées par la vitesse à laquelle les informations circulent entre
la mémoire et les unités de calcul.
Ce phénomène est connu sous le nom de goulot d’étranglement de von
Neumann.
L’expression sera notamment popularisée par l’informaticien John Backus
dans les années 1970.
Le problème n’a pas disparu avec les ordinateurs modernes. L’écart de
performances entre processeurs et mémoire a longtemps constitué l’un des
principaux défis de l’architecture informatique.
Les caches pour rapprocher les données du processeur
L’une des réponses à ce problème consiste à ajouter plusieurs niveaux de
mémoire cache.
Un cache est beaucoup plus petit que la mémoire vive, mais également
beaucoup plus rapide.
Le processeur tente d’y conserver les instructions et données qu’il
estime susceptibles d’être utilisées prochainement.
Les processeurs modernes disposent généralement de plusieurs niveaux :
cache L1, très petit et extrêmement rapide ;
cache L2, plus important ;
cache L3, encore plus grand et souvent partagé entre plusieurs
cœurs.
L’objectif est simple : éviter autant que possible d’attendre la mémoire
principale.
Cette hiérarchie montre à quel point les machines modernes se sont
éloignées du schéma élémentaire des années 1940 tout en essayant de
résoudre une difficulté directement liée à celui-ci.
Architecture von Neumann et architecture Harvard
Une autre organisation importante est l’architecture Harvard.
Dans une architecture Harvard stricte, les instructions et les données
utilisent des mémoires distinctes et peuvent disposer de chemins de
communication séparés.
Cela permet notamment de récupérer simultanément une instruction et une
donnée.
La différence théorique peut donc être résumée ainsi :
von Neumann : instructions et données partagent un espace mémoire.
Harvard : instructions et données sont séparées.
Dans la pratique, les ordinateurs modernes brouillent largement cette
distinction.
Un processeur peut présenter au programmeur un espace mémoire unifié
correspondant au modèle de von Neumann tout en possédant, en interne,
des caches séparés pour les instructions et les données.
On parle parfois d’architecture Harvard modifiée.
De nombreux microcontrôleurs et processeurs spécialisés utilisent
également différentes variantes de cette organisation.
Il serait donc incorrect d’imaginer que chaque ordinateur actuel
correspond exactement à l’un ou l’autre des deux schémas.
Les processeurs modernes ne travaillent plus instruction après instruction
Le cycle recherche-décodage-exécution constitue un excellent modèle
pédagogique, mais un processeur moderne est beaucoup plus sophistiqué.
Pour améliorer les performances, il peut commencer à traiter une
nouvelle instruction avant que la précédente soit complètement terminée.
C’est le principe du pipeline d’instructions.
Il peut également disposer de plusieurs unités capables d’effectuer
différentes opérations simultanément.
Certains processeurs réorganisent même l’ordre d’exécution des
instructions lorsque cela permet d’utiliser plus efficacement leurs
ressources, tout en veillant à produire le résultat attendu par le
programme.
L’exécution spéculative permet quant à elle d’anticiper le chemin
qu’un programme risque d’emprunter et de commencer certains calculs
avant même de savoir s’ils seront nécessaires.
Enfin, les processeurs actuels possèdent souvent plusieurs cœurs,
chacun capable d’exécuter ses propres flux d’instructions.
Un ordinateur moderne est donc très loin du diagramme élémentaire
processeur-mémoire-entrées-sorties.
Pourtant, au niveau logiciel, nous retrouvons toujours une idée
fondamentale : des instructions enregistrées dirigent une machine
généraliste qui manipule des données.
Le programme peut lui-même devenir une donnée
Le principe du programme enregistré possède une conséquence
particulièrement importante : puisqu’un programme est représenté en
mémoire sous forme numérique, un programme peut manipuler un autre
programme.
Un compilateur peut par exemple lire du code source et produire un
programme exécutable.
Un système d’exploitation peut charger un programme depuis un stockage
vers la mémoire.
Un éditeur peut modifier un fichier contenant du code.
Un programme peut même générer automatiquement de nouvelles
instructions.
La frontière entre « programme » et « donnée » dépend donc en partie de
la manière dont l’information est interprétée.
Cette caractéristique est devenue essentielle au développement des
systèmes d’exploitation, des compilateurs, des langages de programmation
et, plus largement, de l’industrie du logiciel.
Du matériel spécialisé à la machine universelle
Le programme enregistré contribue à une transformation majeure.
Au lieu de construire une machine différente pour chaque problème, il
devient possible de construire une machine généraliste et de
modifier son comportement grâce au logiciel.
Cette idée entretient un lien conceptuel fort avec les travaux d’Alan
Turing.
En 1936, plusieurs années avant l’EDVAC, Turing décrit une machine
abstraite capable d’exécuter des opérations définies symboliquement. Il
montre notamment qu’une machine universelle peut simuler le
fonctionnement de nombreuses autres machines dès lors qu’elle reçoit
leur description.
La machine de Turing est un modèle
mathématique, tandis que l’architecture de von Neumann concerne
l’organisation pratique d’ordinateurs électroniques.
Les deux concepts ne doivent donc pas être confondus.
Ils participent néanmoins à la même révolution intellectuelle : une
machine n’a pas besoin d’être construite pour une seule tâche ; son
comportement peut être déterminé par l’information qu’on lui fournit.
Pourquoi l’architecture de von Neumann reste-t-elle importante ?
Les ordinateurs actuels possèdent des GPU, plusieurs cœurs, des caches
complexes, des contrôleurs spécialisés, des accélérateurs d’intelligence
artificielle et de nombreux mécanismes inexistants dans les années 1940.
Dire qu’un ordinateur moderne est simplement « une machine de von
Neumann » serait donc très réducteur.
Mais le modèle reste extrêmement utile.
Il permet de comprendre pourquoi un ordinateur possède une mémoire et un
processeur, comment un programme est exécuté, pourquoi les données
doivent circuler entre différents composants et pourquoi la vitesse de
la mémoire influence les performances.
Il constitue également une étape majeure dans l’histoire de
l’informatique : celle où le programme devient une information stockable
et modifiable plutôt qu’une simple configuration matérielle.
Cette idée paraît tellement naturelle aujourd’hui qu’il est facile
d’oublier à quel point elle était déterminante.
Lorsque nous installons une application, lançons un jeu, chargeons une
page Web ou exécutons quelques lignes de code, nous utilisons toujours
cette propriété fondamentale : une même machine peut devenir autre
chose simplement parce qu’on lui donne de nouvelles instructions.
À retenir
L’architecture de von Neumann ne correspond pas au plan exact des
ordinateurs modernes. C’est avant tout un modèle historique et
conceptuel.
Ses principes essentiels restent cependant fondamentaux :
une machine possède des unités de calcul et de contrôle ;
elle utilise une mémoire pour conserver des informations ;
les instructions d’un programme peuvent être enregistrées en mémoire
;
ces instructions dirigent les opérations réalisées sur les données ;
une même machine peut ainsi exécuter des programmes très différents.
Son influence dépasse donc largement le schéma classique représentant un
processeur relié à une mémoire.
Le programme enregistré a contribué à faire de l’ordinateur une
machine polyvalente définie autant par son logiciel que par son
matériel.
Questions fréquentes
John von Neumann a-t-il inventé seul cette architecture ?
Non. Von Neumann a joué un rôle majeur dans sa formalisation et sa
diffusion, notamment grâce au First Draft of a Report on the EDVAC de
1945. Mais les concepts associés à l’EDVAC résultent d’un travail
collectif auquel participèrent notamment J. Presper Eckert et John
Mauchly.
Quelle est l’idée principale de l’architecture de von Neumann ?
Le principe essentiel est celui du programme enregistré : les
instructions peuvent être représentées numériquement et conservées en
mémoire, ce qui permet à une même machine d’exécuter différents
programmes.
Quelle est la différence entre von Neumann et Harvard ?
Dans le modèle de von Neumann classique, instructions et données
partagent la mémoire. Dans une architecture Harvard, elles disposent de
mémoires ou de chemins distincts. De nombreux processeurs modernes
utilisent une organisation hybride.
Qu’est-ce que le goulot d’étranglement de von Neumann ?
Il désigne la limitation provoquée par les échanges entre le processeur
et la mémoire. Un processeur très rapide peut devoir attendre les
instructions ou les données nécessaires à ses calculs.
Les ordinateurs actuels utilisent-ils encore cette architecture ?
Ils en conservent plusieurs principes fondamentaux, notamment celui du
programme enregistré, mais utilisent de nombreuses optimisations :
caches, pipelines, exécution parallèle, plusieurs cœurs et parfois
séparation interne des instructions et des données.
Découvrez l’architecture de la machine analytique de Charles Babbage : magasin, moulin, cartes perforées, boucles et principes d’un ordinateur programmable.