Recherche, informatique, industrie : Comprendre l'architecture von Neumann (6/12 - année 2021)
Publié par ACONIT (Association pour un Conservatoire de l'Informatique et de la Télématique), le 1 juin 2021 14k
Figure d'en-tête : John von Neumann dans les années 1940, à gauche, et schéma de la première configuration qui portera son nom, à droite.
Par René Gindre et Jean-Louis Gondol (membres du bureau de l’ACONIT)
Né le 28 décembre 1903 à Budapest et mort le 8 février 1957 à Washington, John von Neumann est un mathématicien et physicien Américano-hongrois. Avec Alan Turing, von Neumann peut être considéré comme le père des ordinateurs et de l'informatique moderne. Aujourd'hui encore, l'architecture de la majorité des ordinateurs est dite « de type von Neumann ».
Ce scientifique a en effet apporté d’importantes contributions en mécanique quantique, analyse fonctionnelle, théorie des ensembles et dans beaucoup d'autres domaines des mathématiques et de la physique. Mais c'est son apport dans la structuration fonctionnelle des premiers ordinateurs qui fit sa postérité.
L'architecture (c'est-à-dire l'organisation interne) des ordinateurs définie par von Neumann en juin 1945 dans le cadre du projet EDVAC (Electronic Discrete Variable Automatic Computer) se caractérise par la capacité d'une machine numérique à stocker ses programmes dans le même espace mémoire que les données. Alan Turing, John von Neumann ainsi que John William Mauchly et John Eckert, durant leurs travaux sur l’ENIAC (Electronic Numerical Integrator And Computer), ont utilisé ce concept indépendamment.
Herman Goldstine (un collègue de John von Neumann) en fit circuler une description inachevée intitulée Première ébauche d'un rapport sur l’EDVAC, sous le seul nom de von Neumann, mais basée en réalité sur des travaux attribués à Eckert et Mauchly. Le document a été lu par des dizaines de collègues de von Neumann en Amérique et en Europe et a inspiré plusieurs machines alors en construction.
Cette architecture utilise une unité de traitement (CPU) comprenant l’unité de contrôle et l’unité arithmétique et logique, ainsi qu’une unité de stockage mémoire constituée de la mémoire ROM (données immuables) et de la mémoire RAM, dans laquelle sont logées les instructions et les données. Des registres permettent le stockage temporaire des données ou des instructions, lesquelles transitent grâce aux bus entre les différentes unités.
L’ACONIT (Association pour un CONservatoire de l’Informatique et de la Télématique) a mis en œuvre un panneau interactif décrivant cette architecture particulière. Il permet la réalisation d’une simulation d’un programme d’addition A+B = C. Il montre la progression des instructions en utilisant un bouton pas à pas, afin de mettre en évidence le rôle des divers éléments composant une architecture de type von Neumann.
Panneau de l'ACONIT représentant l'organisation d'une architecture von Neumann ; les 4 parties principales (chiffres de droite) sont détaillées ci-dessous.
L’architecture von Neumann décompose l’ordinateur en 4 parties distinctes :
-
l’unité arithmétique et logique (UAL, ou ALU en anglais) ou unité de traitement : son rôle est d’effectuer les opérations de base ;
-
l’unité de contrôle est, elle, chargée du « séquençage » de ces opérations ;
-
la mémoire contient à la fois les données et le programme qui indiquera à l’unité de contrôle quels sont les calculs à faire sur ces données. La mémoire se divise entre mémoire volatile (programmes et données en cours de fonctionnement) et mémoire permanente (programmes et données de base de la machine) ;
-
les dispositifs d’entrée-sortie permettent de communiquer avec le monde extérieur.
En traitant les instructions de la même façon que les données, un ordinateur possédant un programme stocké en mémoire peut facilement modifier ses instructions. Une des raisons importantes ayant induit une telle possibilité fut le besoin repéré au niveau d'un programme d’incrémenter ou de modifier le champ adresse des instructions (pour faire des boucles par exemple). Cette raison est devenue moins importante avec l'apparition et l’utilisation ultérieure de registres d’index et de l’adressage indirect, en tant que caractéristique standard des processeurs.
L’architecture actuelle des ordinateurs rend désormais inutile la modification à faible échelle des instructions du programme — son « code » —, car cela rendrait inefficaces les techniques de gestion de l’antémémoire et du pipeline dans le processeur. Cette pratique est donc devenue de nos jours obsolète.
Un peu d’histoire sur les architectures
L'architecture Harvard
La toute première architecture définie pour un ordinateur fut l’architecture dite « Harvard », du nom de la célèbre université qui la mit en oeuvre et l'utilisa. Cette architecture comporte des mémoires séparées pour ses programmes et ses données. Cela permet d’alimenter simultanément l’unité centrale en instructions du programme et en données associées. Cette architecture comporte donc deux bus, l’un pour les programmes et l’autre pour les données. Les entrées sorties sont gérées directement par le noyau central qui comporte l’unité de calcul. Cette architecture a été réalisée en 1944 pour une machine dénommée Mark 1.
L'architecture Havard procède d'une disposition simple et intuitive.
La première architecture von Neumann
Cette architecture se caractérise par le fait que les programmes et les données sont situés dans le même espace d'adressage. Elle a été publiée en 1945 par von Neumann et mise en œuvre pour la réalisation du premier ordinateur portant le nom d'ENIAC. L'unité de contrôle gère le séquençage de la mémoire, de l'Unité arithmétique et des entrée-sortie. Dans cette architecture, tous les transferts de données passent par l'accumulateur. En 1945, étant donnée l'état de la technologie de l'époque, cette architecture présentait l'avantage de demander nettement moins de matériel que l'architecture Harvard.
De conception plus élaborée que la précédente, cette première approche de l'architecture von Neumann est aussi fonctionnellement plus efficace.
L'architecture von Neumann modifiée
Dans l’architecture originale, l’unité de contrôle fait exécuter les instructions du programme à un rythme régulier et doit gérer les entrées sorties qui, pour leur part, proposent des rythmes aléatoires. Pour résoudre cette difficulté, ont été ajoutées en 1960 des interfaces de périphériques qui, vues depuis le contrôle, sont identiques à des mémoires, mais dont l’électronique gère l’aspect temporel des périphériques.
Cette disposition modifiée de l'architecture von Neumann propose l'ajout d'un organe d'interface de gestion des entrées/sorties.
Évolution et comparaison
Par la suite, dans le but de répondre à des événements extérieurs ou d'accélérer l'exécution interne des programmes, des possibilités ont été ajoutées à ce synoptique, tel que les interruptions, le pipeline, le DMA (direct memory access), les mémoires caches, etc.
A technologie identique, l'architecture Harvard, moins élaborée, est cependant plus rapide que l'architecture von Neumann, mais elle exige plus de matériel et son unité de contrôle est plus complexe. L'architecture Harvard continue cependant d'être utilisée dans les DSP (digital signal processor) et dans les microcontrôleurs.
-----
(Mise en forme finale : Xavier Hiron)