Le logiciel - Logic Systems Laboratory

Transcription

Le logiciel - Logic Systems Laboratory
Organisation de base d’une
machine de von Neumann
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Le logiciel
variables
int
int
int
int
int
data = 0x123456;
result = 0;
mask = 1;
count = 0;
temp;
data: 0x123456
result:
while (count < 32) {
temp = data & mask;
result = result + temp;
data = data >> 1;
count = count + 1;
};
mask:
count:
temp:
0
1
0
undef
/* result = 9 */
opérations et affectations
contrôle
Page 2
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
opérations et affectations
0
1
2
3
mov
mov
mov
mov
$r0,
$r1,
$r2,
$r3,
0x123456
0
1
0
#
#
#
#
$r0
$r1
$r2
$r3
4
5
6
7
8
loop: and
add
srl
add
bne
$r4,
$r1,
$r0,
$r3,
$r3,
$r0, $r2
$r1, $r4
$r0, 1
$r3, 1
32, loop
#
#
#
#
#
$r4
$r1
$r0
$r3
$r3
= $r0
= $r1
= $r0
= $r3
!= 32
9 & $r2
+ $r4
+ 1
+ 1
loop
fin:
contrôle
Page 3
data
result
mask
count
variables
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
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
Page 4
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
processeur
unité de traitement
unité
de
contrôle
ALU
mémoire
bus
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
Page 5
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
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
Page 6
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
A
ALU
W Registres
Op
B
AW Wr AA AB
5 add $r1, $r1, $r4
$r1 $r1
'1' $r4
+
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Page 7
$r1 $r1
'1' $r4
+
logique de contrôle
add $r1, $r1, $r4
D
compteur de
programme (PC)
6
Page 8
Dout
5
Q
A
mémoire
d'instruction
+
1
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
undef $r3
'0'
32
!=
logique de contrôle
bne
$r3, 32, loop
4 (= loop)
D
compteur de
programme (PC)
9
Page 9
Dout
8
Q
A
mémoire
d'instruction
+
1
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
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
Page 10
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
architecture de Harvard
mémoire
d'instruction
imA
imD
architecture de von Neumann
mémoire
de données
mémoire unifiée
dmA dmD
A
processeur
Page 11
D
processeur
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
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
Page 12
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Exemple
Supposons un processeur traitant des données à 8 bits, avec 16
registres internes et une mémoire externe avec 256 positions ou
cellules de stockage
Les registres et les positions de mémoire reçoivent des adresses à
partir de 0
mémoire
00
01
02
03
04
05
processeur
unité de traitement
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
unité
de
contrôle
bus
.
.
.
.
.
.
FC
FD
FE
FF
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Page 13
Un programme qui divise deux données stockées en mémoire
pourrait être:
•
•
•
•
1: charger un registre avec la première donnée: instruction LOAD
2: charger un autre registre avec la deuxième donnée: instruction LOAD
3: si la deuxième valeur est zéro, aller au pas 6: instruction JUMP
4: diviser les contenus des deux registres et stocker le résultat dans un
troisième registre: instruction DIV
• 5: sauver le résultat dans une position de mémoire: instruction STORE
• 6: arrêter
Si l'on précise les adresses de registre et de mémoire, le programme
serait:
1
2
3
4
5
6
Page 14
LOAD
LOAD
JUMP
DIV
STORE
STOP
R0,M[0]
R1,M[1]
zéro,6
R2,R0,R1
M[2],R2
R0 M[0]
R1 M[1]
si 0 aller à 6
R2 R0/R1
M[2] R2
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Chaque instruction possède entre 2 et 3 opérandes. Si l'on veut
coder chaque instruction comme une chaîne de bits, il faut
décider le nombre total de bits de l'instruction, le nombre de bits
pour chaque opérande et la position dans la chaîne: c'est le
format de l'instruction
opérande 1
opcode
opérande 3
opérande 2
L'opcode est le code de l'instruction
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Page 15
Pour notre exemple, nous pouvons utiliser 16 bits pour chaque
instruction et les formats suivants:
opcode
LOAD
adresse de la mémoire
0000
adresse du registre
opcode
STORE
adresse de la mémoire
0001
adresse du registre
opcode
JUMP
adresse de saut
0010
condition
Page 16
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
opcode
DIV
registre
source1
0011
registre
destination
registre
source2
opcode
STOP
0100
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Page 17
Notre programme codé serait alors:
1
2
3
4
5
6
Page 18
LOAD
LOAD
JUMP
DIV
STORE
STOP
R0,M[0]
R1,M[1]
zéro,6
R2,R0,R1
M[2],R2
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
0000
0101
2006
3201
1202
4000
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-decodeexecute
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
Page 19
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
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]
Page 20
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Le processeur possède 8 registres (R0...R7). Le registre R0
contient toujours la valeur 0
Les instructions du langage machine du processeur sont:
•
•
•
•
•
•
Rd M[adr]
M[adr] Rs
Rd Rs1 + Rs2
Rd Rs1 – Rs2
R R - 1
si zero alors sauter à adr
LOAD Rd, M[adr]
STORE M[adr], Rs
ADD Rd, Rs1, Rs2
SUB Rd, Rs1, Rs2
DEC R
JUMP zero, adr
Avant d'écrire le programme, nous devons trouver un algorithme
réalisant la tâche voulue
Un algorithme possible serait:
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Page 21
lecture de a et b
résultat = 0
a=0
b=0
résultat = résultat+a
écriture du résultat
Page 22
décrémenter b
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne