L’architecture dite de von Neumann est un modèle d'ordinateur qui utilise une structure de stockage unique pour conserver à la fois les instructions et les données demandées ou produites par le calcul. De telles machines sont aussi connues sous le nom d’ordinateur à programme enregistré. La séparation entre le stockage et le processeur est implicite dans ce modèle.
Cette architecture est appelée ainsi en référence au mathématicien John von Neumann qui a élaboré la première description d’un ordinateur dont le programme est stocké dans sa mémoire (publiée en juin 1945). Le terme « architecture de von Neumann » est néanmoins discuté, car ses collaborateurs, notamment John William Mauchly et John Eckert ont utilisé ce concept pendant leurs travaux sur l’ENIAC, et cette dénomiation est donc maintenant plutôt proscrite.
L'architecture de von Neumann décompose l’ordinateur en 4 parties distinctes :
L'unité de traitement est composée de circuit électronique qui permettent de réaliser les instructios arithmétiques et logiques de bases, ainsi que les opérations de stockage et de récupération des données.
Elle comporte également un certain nombre de Registres, qui sont des zones de stockages temporaires, d'accès rapide, lui permettant d'effectuer les opérations. Ce sont en quelque sorte des variables élémentaires à disposition du programmeur pour faire ses calculs. Dans l'exemple ci-dessous, le processeur dispose des registres R0,R1,R2,R3.
Dans la mémoire d'un ordinateur on peut stocker des données (Entiers, flottants, booléens, caractères,...) sous forme binaire. Par exemple 00100110 correspond au nombre entier 38. Mais on peut également y stocker des instructions à destination de l'unité de traitement. Ce même code binaire 00100110 pourrait très bien correspondre au code d'une instruction machine, par exemple "Stopper le programme".
C'est le rôle du système d'exploitation (windows,linux,...) et du programmeur de faire en sorte de distinguer en mémoire ce qui correspond à des instructions ou des donnéees.
Une instruction machine se présente de la façon suivante :
Chaque instruction peut occuper 1 ou plusieurs mots dans la mémoire d'un ordinateur. On rappel qu'un mot correspond à l'unité de base pouvant être traitée par le processeur. Avec un proceseur 8 bits la taille du mot correspond à 8 bits soit 1 octet. Avec un processeur 64 bits la taille du mots correspond à 64 bits soit 4 octets.
Au début de l'informatique les programmeurs devait coder leur programme directement en binaire (langage machine). Par exemple, le code :
[01001100][00100101]
Ici le premier octet [01001100] correspond au code de l'opération à effectuer (opcode) , à savoir ajouter la valeur suivante soit [00100101] (37 en décimal) au registre R1.
La programmation en binaire étant loin d'être évidente pour un humain, on a inventé le langage Assembleur qui permet d'écrire les instructions de manière plus compréhensible. Dans notre exemple le code [01001100][00100101] est remplacé par :
ADD R1,37
Ce qui vous l'avouerez est tout de même déjà beaucoup plus lisible !
Voici un exemple de programme Assembleur
INP R0,2 INP R1,2 ADD R2,R1,R0 OUT R2,4 HALT
Il faut donc un moyen de traduire un tel programme en codes machines binaires qui est le seul "langage" compris par le processeur. Ce travail de traduction est réalisé par les compilateurs/interpréteurs.