L'architecture est basée sur un partage de la mémoire entre le programme et les données. Von Neumann a donné le principe en 1945.
Dans la machine de Babbage il y avait des cartes perforées pour le programme et des cartes pour les données, dans l'Eniac les données étaient des cartes et le programme devait se faire en branchant des fils.
L'architecture de Von Neumann est un tournant majeur au niveau de la conception de l'ordinateur et actuellement quasi tous les ordinateurs sont basés sur ce principe.
Principe
Pour illustrer le cours on se basera sur le simulateur cardiac adapté par Alain Ketterlin et Cedric Bastoul de l'université de Strasbourg. Le modèle utilise la notation décimale et à très peu de mémoire. Il se décompose en trois parties principales :
La mémoire centrale : elle est constituée de 100 cases mémoire, chaque case est numérotée (on dit qu'elle a une adresse). Le fait d'avoir 100 cases n'est pas un hasard, le modèle cardiac où les nombres proposés sont au maximum égaux à 100 ne permet pas d'en gérer plus. Sur votre ordinateur c'est la même chose il y a une limite maximale à la mémoire centrale possible (environ 4 Giga en 32 bits et beaucoup plus en 64 bits).
Le processeur, il comporte lui aussi des zones de mémoire appelées registres. Le processeur est capable d'effectuer un certain nombre d'opération de façon "hardware" (opposé à software) c'est à dire à travers de circuits électroniques. Le modèle cardiac peut effectuer 10 opération, là aussi c'est la limite possible pour le processeur cardiac. On peut séparer le processeur en trois parties :
Unité de contrôle qui coordonne l'ensemble des opérations, l'unité de contrôle sait où se trouve l'instruction à effectuer dans la mémoire, la récupère, l'analyse et utilise éventuellement l'unité de traitement.
Unité de traitement effectue des calculs arithmétiques et logiques via des circuit électroniques sur des registres particuliers
L'horloge : nécessaire à la coordination des opérations quand la cadence du processeur est de 1 Ghz alors un tic d'horloge correspond à 0.000000001 s = 1ns.
Les entrées sorties.
La communication entre les parties se fait à travers de bus.
La mémoire, les bus et le processeur n'ont pas la même horloge, il se peut que l'un soit bridé par l'autre.
Un exemple
Considérons l'état de la mémoire suivant :
Celà correspond au code assembleur suivant :
.at 20
a: .word 000
b: .word 000
somme: .word 000
INP a
INP b
LDA a
ADD b
STA somme
OUT somme
HRS 000
Fixons le compteur ordinal du processeur à 23 et donnons 4 et 3 en entrée.
Voyons les étapes successives :
Les boucles
Considérons l'état de la mémoire suivant :
Celà correspond au code assembleur suivant :
.at 40
a: .word 000
un: .word 001
i: .word 000
INP a
loop: OUT i
LDA i
ADD un
STA i
SUB a
JAZ loop
HRS 00
Fixons le compteur ordinal du processeur à 43 et donnons 2 en entrée.