Architecture des Ordinateurs

publicité
!
INSA-3IF
Architecture des
Ordinateurs!
Séance 1!
Christian Wolf,!
INSA-Lyon, Dép. IF!
# 1 C. Wolf
Au Menu!
CM1! ISA : Introduction. Jeux d’instructions,
assembleur.!
TD!
La « Micromachine » : réalisation d’un processeur
simple sur papier!
CM2! ISA : Encodage; Histoire!
TP!
Réalisation de la micromachine sous Logicworks!
CM3! Approfondissements, typologie, comparaisons!
CM4! Parallélisme : pipeline, processeurs superscalaires !
CM5! Hiérarchie mémoire!
TP!
Prise en main du controleur MSP 430
CM6! Les GPU !
TD!
Micromachine sur papier : les interruptions
TP!
MSP 430 : pile, timer, interruptions
# 2 C. Wolf
Bibliographie!
Hennessy et Patterson, Architecture des
Ordinateurs!
# 3 C. Wolf
ppels
Mon premier ordinateur!
hine de von Neumann c’est un processeur relié à une mémoire.
adresse
Processeur
Mémoire
données
F IGURE 8.1 – Mon premier ordinateur
oire est adressable par mot (de 8, 16, 32 ou 64 bits de nos jours), et gra
dre de 109 , ou 230 mots). La mémoire est non typée : chaque mot peut êt
manières.
# 4 C.un
Wolf coin
sseur exécute le cycle de von Neumann. Pour cela, il garde dans
ppels
La mémoire!
Instrmémoire.
1!
hine de von Neumann c’est un processeur relié à une
adresse
Processeur
Instr 2!
Instr 3!
Instr 4!
Instr 5!
Instr 6!
Mémoire
données
donnée!
donnée!
donnée!
donnée!
donnée!
F IGURE 8.1 – Mon premier ordinateur
ire est adressable par mot (de 8, 16, 32 ou 64 bits de nos jours), et gra
Adressable
9
30par mot (8, 16, 32, 64 bits)!
dre de 10
, ou(10
2 9 = mots).
Grande
230 mots)!La mémoire est non typée : chaque mot peut êt
manières.
Non typé!
# 5 C.un
Wolf coin
seur exécute le cycle de von Neumann. Pour cela, il garde dans
C’est l’heure de l’historie!
An
Ajouter le nombre qui est
dans la case mémoire n à
l’accumulateur!
!
En
Si le nombre dans
l’accumulateur est positif
ou nul, exécuter
l’instruction dans la case
mémoire n; sinon exécuter
en séquence (=continuer).!
!
Z
EDSAC (1949)
Arrêter la machine et
déclencher la sonnette
d’alarme.!
# 6 C. Wolf
ppels
Le cycle de von Neumann!
Instrmémoire.
1!
hine de von Neumann c’est un processeur relié à une
adresse
Processeur
Instr 2!
Instr 3!
Instr 4!
Instr 5!
Instr 6!
Mémoire
données
donnée!
donnée!
donnée!
donnée!
donnée!
F IGURE 8.1 – Mon premier ordinateur
Garder l’adresse de l’instruction courante dans le « Program Counter » (PC)!
Lire le contenu
la cellule
adressée
PC!bits de nos jours), et gra
ire est 1. 
adressable
parde
mot
(de 8,
16, 32par
oule64
2.  9PC
= PC
dre de 10
, ou
230+1!
mots). La mémoire est non typée : chaque mot peut êt
3.  Interpréter contenu comme une instruction, et l’exécuter!
manières.
4.  Recommencer!
# 7 C.un
Wolf coin
seur exécute le cycle de von Neumann. Pour cela, il garde dans
Interprétation d’une instruction!
Instr 6!
1110 0001 1010 0000 0011 0000 0000 0111
e1a03007!
mov r3, r7
Binaire
Hex
Code mnémonique !
=> « assembleur »
# 8 C. Wolf
Jeux d’instruction!
Objectifs :!
-  Universel / Turing-complet – permet d’exprimer tout
programme exprimable!
-  Facilite de construire le processeur!
-  Facilite d’écrire des programmes!
Deux familles :!
-  RISC (Reduced instruction set computer)!
–  Instructions courtes, toutes de la même taille. !
–  Exemples : MIPS, ARM, MSP 430 (traité en TP)!
-  CISC (Reduced instruction set computer)!
–  Instructions complexes, de taille variable!
–  Exemples : x86!
# 9 C. Wolf
Exemple : x86 (.c è.asm)!
gcc –S toto.c
# 10
C. Wolf
Exemple : x86 (.c è.asm)!
Linux :
Mac:
objdump –d a.out
otool -tV a.out
# 11
C. Wolf
Exemple : x86!
Produit avec : http://gcc.godbolt.org
# 12
C. Wolf
Exemple : ARM!
# 13
C. Wolf
Le C combine la vitesse de l’assembleur !
avec l’élégance de l’assembleur.!
!
(Ancien proverbe des Aztèques)!
# 14
C. Wolf
L’Importance du jeu d’instructions!
2006 : Apple passe de l’architecture IBM Power à Intel x86!
# 15
C. Wolf
Usage de la mémoire!
Jeux d’instructions mémoire-mémoire :!
-  Add adresseX, adresseY
-  Add adresseX, adresseY, adresseZ!
Beaucoup de trafic mémoire (lent)!
L’adressage des cases mémoire prend beaucoup de place
dans l’instruction!
Jeux d’instructions registre-mémoire, registre-registre :!
-  Mov RX, adresseX
-  Mov adresseX, RX
-  Add RX adresse1
-  Add RX, RY, RZ
-  …!
# 16
C. Wolf
ppels
Les registres!
Instrmémoire.
1!
hine de von Neumann c’est un processeur relié à une
r2!
r0!
r1!
r5!
r3!
r4!
r8!
r6!
r7!
Processeur
r9! r10! r11!
r12! r13! r14!
adresse
Instr 2!
Instr 3!
Instr 4!
Instr 5!
Instr 6!
Mémoire
données
donnée!
donnée!
donnée!
donnée!
donnée!
F IGURE 8.1 – Mon premier ordinateur
ire est adressable par mot (de 8, 16, 32 ou 64 bits de nos jours), et gra
Non
9 adressables!
dre de 10
ou 230 mots).
La…)!
mémoire est non typée : chaque mot peut êt
Peu,nombreux
(4, 16, 32
manières.
Non typé!
# 17 C.un
Wolf coin
seur exécute le cycle de von Neumann. Pour cela, il garde dans
Les registres!
Certains registres sont visibles au programmeur/
compilateur.!
Certains registres sont gérés automatiquement par le
processeur. Lesquels?!
!
Solution :!
! -  PC (program counter)!
-  SP (stack pointer)!
-  Registres internes / non-visibles!
# 18
C. Wolf
Exemple : ARM!
R0!
Utilisable*!
R1!
Utilisable*!
R2!
Utilisable*!
R3!
Utilisable*!
R4!
Utilisable*!
R5!
Utilisable*!
R6!
Utilisable*!
R7!
Utilisable*!
R8!
Utilisable*!
R9!
Utilisable*!
R10!
Utilisable*!
R11!
Utilisable*!
R12!
Utilisable*!
R13!
SP : stack pointer!
R14!
Link register (return address)!
R15!
PC : Program counter!
Certains registres sont sujets
aux conventions (passage
de paramètre etc.)!
# 19
C. Wolf
Cahier de charges #1/2!
Si on souhaite construire un jeu d’instruction pour un
processeur « Turing complet », quelles sont les
instructions à prévoir?!
Solution :!
-  Opérations arithmétiques/logiques!
-  Opérations de chargement/rangement!
-  Branchements et branchements conditionnels!
# 20
C. Wolf
Cahier de charges #2/2!
Quelles sont les instructions supplémentaires souhaitables
pour un bon fonctionnement?!
Solution :!
-  Opérations arithmétiques/logiques!
-  Opérations de chargement/rangement!
-  Branchements et branchements conditionnels!
-  Opérations d’entrée/sortie!
-  Manipulation de la pile / appel de fonctions!
# 21
C. Wolf
Quelques exemples pour ARM!
-  Opérations arithmétiques/logiques!
– 
– 
– 
– 
add
adc
sub
and
Rd,
Rd,
Rd,
Rd,
Rn,
Rn,
Rn,
Rn,
Rm
Rm
Rm
Rm
// with carry
-  Opérations de chargement/rangement!
– 
– 
– 
– 
mov
mov
ldr
str
Rn,
Rn,
Rn,
Rn,
Rm
#XXXX
[Rm]
[Rm]
// Restrictions …
// Rn <- MEM[Rm]
// MEM[Rm] <- Rn
# 22
C. Wolf
Quelques exemples pour ARM!
-  Branchements et branchements conditionnels!
– 
– 
– 
– 
– 
– 
Conditions : état des « flags » Z, N, C etc.!
b <dest>
beq <dest>
// equal
bmi <dest>
// negative/minus
bgt <dest>
// greater than
bcs <dest>
// carry set
-  Opérations de test!
-  Cmp Rn, Rm
–  Les opérations aréthmétiques-logiques peuvent influencer les
flags si souhaité : !
•  add Rd, Rn, Rm
•  adds Rd, Rn, Rm
# 23
C. Wolf
Quelques exemples pour ARM!
-  Opérations d’entrée/sortie!
–  Non disponibles sur ARM : memory-mapped I/O!
–  Certaines architectures disposent d’instructions spécifiques
(e.g. x86)!
!
-  Manipulation de la pile / appel de fonctions!
– 
– 
– 
– 
push <Rn, Rm, …>
pop <Rn, Rm, …>
call <dest>
return
# 24
C. Wolf
Assembleur : échauffement #1!
Quel pourrait être le code
« assembleur » produit par un
compilateur C pour une
architecture choisie ?
mov r3, #3
mov r4, #5
add r5, r3, r4!
# 25
C. Wolf
Assembleur : échauffement #2!
Quel pourrait être le code
« assembleur » produit par un
compilateur C pour une
architecture choisie ?
mov
mov
cmp
ble
r2, #3
r3, #5
r2, r3
.L1:
mov r4, #2
b .L2
.L1:
mov r4, #3
.L2:
# 26
C. Wolf
Modes d’adressage!
-  Comment accéder aux données :!
– 
– 
– 
– 
constantes, contenu des registres, contenu de la mémoire!
directement!
Indexation (mode « tableau »)!
indirect (mode « pointeur »)!
-  Objectifs : souplesse, minimiser le nombre d’instructions!
-  Peuvent augmenter le nombre de cycles par instruction!
# 27
C. Wolf
Quelques exemples pour ARM!
-  Mode immédiat!
–  Utilisation d’une valeur concrète, numérique!
–  mov r2, #3
-  Mode registre!
–  Utilisation d’une valeur venant d’un autre registre!
–  mov r2, r7
-  Mode direct!
–  Utilisation d’une valeur venant de la mémoire en spécifiant son
adresse directement!
–  ldr r2, #8001
–  str r2, #8001
-  Mode registre indirect!
–  L’adresse est stockée dans un registre!
–  ldr r2, [r3]
!
# 28
C. Wolf
Quelques exemples pour ARM!
-  Mode indexé-indirect!
-  ldr r2, [r3, r4]
// r2 <- MEM[r3 + r4]
-  Mode indirect avec post-increment
–  ldr r1, [r3], #4
// r1 <- MEM[r3]; r3 += 4
!
-  Mode relatif au PC!
– 
– 
– 
– 
b .Label
…
.Label:
La destination du saut vers « .Label » est calculé relatif au PC, donc à
l’adresse de l’instruction même. Ce calcul est fait par l’assembleur.!
# 29
C. Wolf
Modes d’adressage : utilisation!
Reproduit de : Hennessy et Patterson
# 30
C. Wolf
Assembleur : échauffement #3!
mov
add
mov
r3, #adresse_arr
r0, r3, #40
r2, #0
.L2:
ldr
cmp
add
bne
r1, [r3], #4
r3, r0
r2, r2, r1
.L2
// r1 <- MEM[r3]; r3 += 4
# 31
C. Wolf
Démonstrations en direct!
-  http://gcc.godbolt.org!
–  Code simple, sans printf() du résultat, compiler en ARM!
–  Même code, avec –O3!
–  Ajouter printf(), avec –O3!
– 
– 
– 
– 
Un code se servant d’un tableau en variable globale!
Passer le tableau en variable locale du main!
Définir un pointeur vers le premier élément de ce tableau!
Quelles sont les différences dans les accès mémoire?!
# 32
C. Wolf
Téléchargement