Vous êtes sur la page 1sur 45

L’ARCHITECTURE DE VON NEUMANN

COMPILATION
Organisation de base
d'une machine de von Neumann

Eduardo Sanchez
EPFL

Le logiciel
variables
int data = 0x123456;
int result = 0;
int mask = 1;
int count = 0;
int temp; data: 0x123456

result: 0
while (count < 32) {
temp = data & mask; mask: 1
result = result + temp;
data = data >> 1; count: 0
count = count + 1;
}; temp: undef

/* result = 9 */

opérations et affectations
contrôle

Eduardo Sanchez 2
opérations et affectations

0  mov $r0, 0x123456 # $r0  data


1  mov $r1, 0 # $r1  result
2  mov $r2, 1 # $r2  mask
3  mov $r3, 0 # $r3  count

4  loop: and $r4, $r0, $r2 # $r4 = $r0 & $r2


5  add $r1, $r1, $r4 # $r1 = $r1 + $r4
6  srl $r0, $r0, 1 # $r0 = $r0 + 1
7  add $r3, $r3, 1 # $r3 = $r3 + 1
8  bne $r3, 32, loop # $r3 != 32  loop

9  fin:

variables
contrôle

Eduardo Sanchez 3

Architecture des ordinateurs

• Les données traitées par un ordinateur sont stockées dans sa


mémoire
• L'élément de l'ordinateur qui réalise les opérations de traitement
des données est le processeur ou CPU (Central Processing Unit)
• Le processeur peut être divisé en deux parties:
• l'unité de traitement: ensemble d'opérateurs arithmétiques et logiques,
groupés autour d'une ou plusieurs ALUs (Arithmetic and Logic Unit);
• l'unité de contrôle: coordonnateur des différentes activités du processeur
• En plus, le processeur possède ses propres unités de stockage
d'information, plus rapides que la mémoire, mais moins
nombreuses: les registres

Eduardo Sanchez 4
processeur

unité de traitement
unité mémoire
de bus
contrôle

ALU registres

• Le transfert des données entre la mémoire et le processeur se fait


via un ensemble de lignes d'interconnexion: le bus
• Le processeur est capable de lire ou d'écrire une donnée dans la
mémoire: il doit envoyer l'adresse de la donnée et un signal
indiquant le type d'opération

Eduardo Sanchez 5

• L'exécution d'une tâche, aussi simple soit-elle, implique une série


d'opérations, réalisées dans l'unité de traitement et coordonnées
par l'unité de contrôle, avec des transferts de données entre la
mémoire et le processeur
• L'addition de deux nombres, par exemple, pourrait se faire en 5 pas:
• chercher le premier nombre dans la mémoire et le placer dans un registre du
processeur
• chercher le deuxième nombre dans la mémoire et le placer dans un autre
registre
• activer l'additionneur avec les deux registres précédents comme sources;
stocker le résultat dans un registre
• sauver le résultat dans la mémoire
• arrêter

Eduardo Sanchez 6
A
W Registres ALU

B Op

AW Wr AA AB

5  add $r1, $r1, $r4

$r1 $r1
+
'1' $r4

Eduardo Sanchez 7

$r1 $r1
+
'1' $r4

logique de contrôle
add $r1, $r1, $r4

5 Dout
compteur de
D programme (PC) Q A
mémoire
d'instruction
6
+
1

Eduardo Sanchez 8
undef $r3
!=
'0' 32

logique de contrôle
bne $r3, 32, loop
4 (= loop)
8 Dout
compteur de
D programme (PC) Q A
mémoire
9 d'instruction
+
1

Eduardo Sanchez 9

Architecture de von Neumann

• Dans les premiers ordinateurs, les différents pas nécessaires à


l'exécution d'une tâche, le programme, étaient directement câblés
dans l'unité de contrôle
• Un grand progrès a été effectué lorsque le programme, comme
les données, a été codé et stocké dans la mémoire principale: c'est
l'architecture appelée de von Neumann
• La fonction de l'unité de contrôle est de lire le programme de la
mémoire, décoder les instructions et commander leur exécution
• Un changement de programme se fait maintenant par une simple
réécriture de la mémoire

Eduardo Sanchez 10
architecture de Harvard architecture de von Neumann

mémoire mémoire
d'instruction de données mémoire unifiée

imA imD dmA dmD A D

processeur processeur

Eduardo Sanchez 11

Langage machine
• Les processeurs doivent reconnaître des instructions codifiées sous la
forme de groupes de bits
• L'ensemble des instructions reconnues par un processeur et son
système de codage forment ce qu'on appelle le langage machine du
processeur
• Il y a deux grandes familles de processeurs, selon la complexité de son
langage machine:
• processeurs CISC (Complex Instruction Set Computer). Exemple: Pentium
• processeurs RISC (Reduced Instruction Set Computer). Exemples: Sparc, PowerPC,
MIPS
• Il y a trois grands types d'instruction:
• transfert de données
• opérations arithmétiques/logiques
• contrôle
Eduardo Sanchez 12
registre
opcode source1

DIV 0011

registre registre
destination source2

opcode

STOP 0100

Eduardo Sanchez 13

• Notre programme codé serait alors:

1 LOAD R0,M[0] 0000


2 LOAD R1,M[1] 0101
3 JUMP zéro,6 2006
4 DIV R2,R0,R1 3201
5 STORE M[2],R2 1202
6 STOP 4000

Eduardo Sanchez 14
Exécution du programme

• Pour exécuter un programme, l'unité de contrôle du processeur


doit lire chaque instruction, la décoder et ensuite l'exécuter. C'est
le cycle exécuté sans arrêt par un processeur: fetch-decode-
execute
• Pour cela, l'unité de contrôle dispose de deux registres spécialisés:
le compteur de programme (PC) et le registre d'instruction (IR)
• Le PC contient l'adresse de la prochaine instruction à exécuter. Le
IR contient le code de l'instruction en exécution
• Pour notre exemple précédent, le fetch implique la lecture de
deux mots de la mémoire. Toute instruction, sauf le JUMP, fait
donc une incrémentation par deux du PC

Eduardo Sanchez 15

Exercice

• Supposez que vous voulez multiplier deux variables a et b,


stockées dans les positions de mémoire M[20] et M[21],
respectivement, pour affecter cette valeur à la variable toto,
stockée à la position de mémoire M[40]
• C'est-à-dire, vous voulez effectuer l'opération:
toto = a*b
ou:
M[40] = M[20]*M[21]

Eduardo Sanchez 16
• Le processeur possède 8 registres (R0...R7). Le registre R0
contient toujours la valeur 0
• Les instructions du langage machine du processeur sont:
• LOAD Rd, M[adr] Rd  M[adr]
• STORE M[adr], Rs M[adr]  Rs
• ADD Rd, Rs1, Rs2 Rd  Rs1 + Rs2
• SUB Rd, Rs1, Rs2 Rd  Rs1 – Rs2
• DEC R R R - 1
• JUMP zero, adr si zero alors sauter à adr
• Avant d'écrire le programme, nous devons trouver un algorithme
réalisant la tâche voulue
• Un algorithme possible serait:

Eduardo Sanchez 17

lecture de a et b

résultat = 0

a=0

b=0

résultat = résultat+a

écriture du résultat décrémenter b

Eduardo Sanchez 18
AE 7

Un modèle d’exécution
-
Von Neumann
Introduction

De quoi traite l’Informatique


Ø
Computer Science

compute = calculer

Ø
Informatique = Information + Automatique

traitement automatique de l’information


Modèle de Von
Neumann

Ø
John Von Neumann 1943-45
Ø
Lignes essentielles pour construire une
machine électronique. (Projet ENIAC)
Ø
Appliqués jusqu'à nos jours
Ø
Quatre blocs fonctionnels:
Ø
Le processeur (ALU + Control Unit)
Ø
La mémoire
Ø
Le bus
Ø
Les I/O
Du câblé au programmé..

Ø
Premiers ordinateurs les pas d’exécution du programme
étaient directement câblés dans le circuit
Ø
Aujourd'hui on parlerait d’accélérateur matériel
Ø
On invente le programme vu comme des données
stockées dans la mémoire principale
Ø
l’architecture de Von Neumann
Ø
La fonction de l’unité de contrôle est de
Ø
lire le programme de la mémoire
Ø
décoder les instructions
Ø
commander leur exécution
Ø
Un changement de programme se fait par une simple
réécriture de la mémoire
Du calcul sur des données…
Notion d’instruction
Mémoire banalisée
Quels échanges dans la machine?
Zoom inside

Bascule
mémoire

Décodeur

Fonction
logique

9
Un ordinateur simplifié…

IP ~
CO~
CP~
PC
Lecture de l’instruction
L’instruction arrive
on prépare la suite…
Les opérandes arrivent!
Prêt pour le calcul!!!
On range le résultat 
et on recommence …
Et si on en exécute plusieurs?

Ø
Le processeur exécute (interprète) les
instructions élémentaires à la suite
Ø
Une séquence d'opérations peut décrire
tous les problèmes

notion de Programme
Déroulement du programme

Ø
Le déroulement du programme est
contrôlé par le Compteur Ordinal qui
pointe vers la prochaine instruction à
exécuter.

Ø
La séquentialité est intrinsèque au
modèle VN 

Ø
Les instructions sont exécutées en
séquence sauf en cas de saut. (Jump)
Les données

Ø
La mémoire conserve les données et les
instructions, on parle de mémoire
banalisée.

Ø
Les instructions sont amenées une à une
vers le processeur

Ø
Les échanges entre mémoire /
processeur se font via le système de
communication : souvent le bus
Von Neumann vs. Harvard

Ø
Von Neumann MÉMOIRE CPU
IO IO IO
•••••

BUS SYSTÈME

BUS INSTRUCTIONS

Ø
Harvard
MÉMOIRE MÉMOIRE
CPU IO IO IO
DONNÉES INSTR •••••

BUS DONNÉES
Séquencement des instructions

Ø
L'exécution d'une instruction passe par
plusieurs étapes successives, chacune
étant considérée comme une micro-
opération.

Ø
Certaines de ces actions correspondent à
une activité mémoire, d'autres à une
activité processeur.

Ø
Pour effectuer une instruction, il faut
toujours effectuer les actions suivantes:
Séquencement des instructions

1. Aller chercher l'instruction en mémoire;


2. Calculer l'adresse de la prochaine
instruction, incrémenter le compteur
ordinal
3. Décoder le code de l'opération
4. Calculer les adresses des opérandes si
nécessaire
5. Extraire les opérandes éventuelles de la
mémoire
6. Exécuter l'instruction
7. Calculer l'adresse du résultat
8. Ranger le résultat en mémoire
Phases 1 2 3

Ø
1: Lit instruction suivante
Ø
Bus Adresse  PC
Ø
Bus Commande  « Lire instruction »
Ø
RI  Bus Donnée
Ø
2: Incrémente compteur ordinal
Ø
PC  PC + taille(instruction)
Ø
3 :Décode Instruction ex: Add A,(123)
Ø
A  A + contenu @123.
Phases 4 5

Ø
4 et 5 : Lit données (facultatif)
Ø
Bus A  123
Ø
Bus C  « lire donnée »
Ø
tmp  Bus D
Ø
Transfert données  UAL
Ø
UAL.E1  A
Ø
UAL.E2  tmp
Ø
UAL.Inst  « addition »
Phases 6 7 8

Ø
6: UAL calcule opération
Ø
Activation de l’additionneur intégral
Ø
 tmp’
Ø
7 et 8 : UC range résultat
Ø
A  tmp’

Ø
Recommence
Ø
Lit & Exécute instruction suivante

Ø
Pas de repos pour un processeur…
Activités Activités
Processeur Mémoire
(1)
(2) Fetch instr
Incrément

Phase de
(3) chargement
Decode instr

Cycle
(4) (5) instruction
Calcul adr Op Fetch operand
Opérandes multiples

(6) Phase d'


Execution exécution

(7) (8)
Calcul adr res Store résultat
Résultats multiples

Instruction sur des chaînes


Instruction terminée
Aller chercher l'instruction en
mémoire
Calculer l'adresse de la prochaine
instruction
Décoder le code de l'opération
Calculer les adresses des
opérandes si nécessaire
Extraire les opérandes éventuelles
de la mémoire
Exécuter l'instruction
Calculer l'adresse du résultat
Ranger le résultat en mémoire
Cycle du processeur

Ø
L'exécution d'une instruction peut être
découpée en plusieurs phases
successives.
Ø
Deux phases au moins sont définies:
Ø
la phase de chargement 'Fetch' et
Ø
phase d'exécution 'Execute''
Différentes classes
d’instruction

Vous aimerez peut-être aussi