Architecture et technologie des ordinateurs II G. Tempesti Semaine

Transcription

Architecture et technologie des ordinateurs II G. Tempesti Semaine
Architecture et technologie des ordinateurs II
Instructions
®
®
®
Types d’instructions
Séquencement
Contrôle
MÉMOIRE
MÉMOIRE
PRINCIPALE
PRINCIPALE
IO
IO IO
IO IO
IO
BUS SYSTÈME
Cache
Instructions
Unité
Unitéde
de
Contrôle
Contrôle
Décodeur
CPU
Unité
Unitéde
de
Traitement
Traitement
Cache
Données
ALU
Unité
Flottante
PC
Registres
Registres
Contrôle de l’unité de traitement
OUTPORT
UNITÉ
DE
CONTRÔLE
3
3
3
3
3
OEN
SEL
AL[2:0]
SH[2:0]
RA[2:0]
RB[2:0]
WEN
WA[2:0]
OEN
SEL AL[2:0]
AL[2:0]
OENSEL
SEL
1 0
AL2
AL1
AL0
I0
I1
Z
Zπ0
SH2
SH1
SH0
RA 3
RB 3
WEN
WA 3
Zπ0
INPORT
OEN
SH[2:0]
SH[2:0] WEN
WEN
SHIFTER
R0 R1 R2 R3 R4 R5 R6 R7
RA[2:0]
RA[2:0]
OPÉRATION
RB[2:0]
RB[2:0]
WA[2:0]
WA[2:0]
OPÉRANDES
Contrôle par instructions - Décodage
Adresse
SLC
SLC
RAM
RAM
Contrôle
0:data ¨ inport
1:ocount ¨ 0
2:mask ¨ 1
3:while data π 0
¨data AND mask
4:temp¨
¨ocount+temp
5:ocount¨
6:data ¨ data >> 1
end while
CK
7:outport ¨ ocount
Fanions
SLC
SLC
Opérandes
nn BASCULES
BASCULES
Opcode
Opcode Opérandes
Opérandes
Instruction
0:0|1
1:2
2:3
3:4
4:5
5:6
6:7|4
7:0
0:R1
1:R0,R2
2:R0,R3
3:
4:R1,R3,R4
5:R2,R4,R2
6:R1,R1
7:R2
¨IN
0:A¨
¨A
1:B¨
¨A+1
2:B¨
3:NOP
4:
5:
6:
7:
¨A&B
C¨
¨A+B
C¨
¨A>>1
B¨
¨A
OUT¨
Chaque instruction doit permettre de générer les bits de contrôle pour
l’unité de traitement ainsi que l’adresse de l’instruction suivante.
G. Tempesti
Semaine V
1
Architecture et technologie des ordinateurs II
Format des instructions: exemple
Le codage des instructions est, en général, arbitraire:
LOAD
MOVE
INC
BRA
AND
ADD
SHR
BRA
STORE
ADR, R1
R0, R2
R0, R3
ADR, COND
R1, R3, R4
R2, R4, R2
R1, R1
ADR, COND
ADR, R2
OPCODE
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
0 1 1
1 1 1
OPER1 OPER2
Adresse[5:0]
0 0 0 0 1 0
0 0 0 0 1 1
Adresse[5:0]
0 0 1 0 1 1
0 1 0 1 0 0
0 0 1 0 0 1
Adresse[5:0]
Adresse[5:0]
OPER3
0 0 1
ø ø ø
ø ø ø
data=0
1 0 0
0 1 0
ø ø ø
vrai
0 1 0
Compilation
program
program toto;
toto;
var
var
A,
A, B,
B, CC :: array
array [1...1000]
[1...1000] of
of integer;
integer;
ii :: integer
integer
begin
begin
...
...
for
for i:=1
i:=1 to
to 1000
1000 do
do
C[i]
C[i] :=
:= A[i]
A[i] ++ B[i];
B[i];
...
...
end
end
COMPILATEUR
COMPILATEUR
Algorithme
Algorithme
flfl
Langage
Langage de
de haut-niveau
haut-niveau
flfl
Langage
Langage machine
machine
==jeu
jeud’instructions
d’instructions
...
...
MOVE.L
MOVE.L #2001,A0
#2001,A0
MOVE.L
MOVE.L #3001,A1
#3001,A1
MOVE.L
MOVE.L #4001,A2
#4001,A2
START:
START: ABCD
ABCD -(A0),-(A1)
-(A0),-(A1)
MOVE.B
MOVE.B (A1),(A2)
(A1),(A2)
TEST:
TEST: CMPA
CMPA #1001,
#1001, A0
A0
BNE
START
BNE
START
...
...
Opération du processeur - Opcodes
Un processeur non-spécialisé (general-purpose) doit avoir un
jeu d’instructions qui soit:
¾ Complet:
il doit pouvoir exécuter toute fonction calculable;
il doit exécuter rapidement les fonctions les plus utilisées;
¾ Régulier: il doit contenir les fonctions attendues (p.ex., s’il y a un
décalage à gauche, il doit y avoir un décalage à droite);
¾ Compatible?: si nécessaire, il doit être compatible avec le jeu d’une
machine existante.
¾ Efficace:
Tout algorithme est réalisé par une séquence (série)
d’instructions.
G. Tempesti
Semaine V
2
Architecture et technologie des ordinateurs II
Boucle de traitement
Début
Début
Instructions
Instructions
en
enattente?
attente?
OUI
NON
Chargement
Chargement
Les instructions sont stockées en mémoire,
comme n’importe quelle donnée. À chaque
instruction correspond donc un adresse.
Chaque instruction est chargée dans le
processeur, décodée pour déterminer sa
fonction et les bits de contrôle pour l’unité de
traitement sont générés en conséquence.
Décodage
Décodage
NON
Interruptions
Interruptions
en
enattente?
attente?
OUI
Traitement
Traitement
L’unité de traitement effectue l’opération
désirée sur les données.
Si une interruption est en attente, elle a
normalement précédence sur les instructions,
et elle est donc traitée immédiatement.
Types d’instructions - Opcode
¾ Transfert
ƒ
de données
Transferts d’informations entre positions mémoire (interne ou
externe au processeur)
¾ Arithmétique
ƒ
Opérations sur données numériques
¾ Logique
ƒ
Opérations booléennes et autres
¾ Entrées/sorties
ƒ
(I/O)
Transferts d’informations entre le processeur ou la RAM et les
unités externes
¾ Contrôle
ƒ
Instructions qui modifient le flot d’instructions
Format des instructions: exemple
data ¨ inport
ocount ¨ 0
mask ¨ 1
while data π 0
temp ¨ data AND mask
ocount ¨ ocount + temp
data ¨ data >> 1
end while
outport ¨ ocount
G. Tempesti
=
=
=
=
=
=
=
=
=
LOAD
MOVE
INC
BRA
AND
ADD
SHR
BRA
STORE
ADR, R1
R0, R2
R0, R3
COND, ADR
R1, R3, R4
R2, R4, R2
R1, R1
1, ADR
ADR, R2
[T]
[T]
[A]
[C]
[L]
[A]
[L]
[C]
[T]
Semaine V
3
Architecture et technologie des ordinateurs II
Format des instructions
Opcode
Conditions Opérandes
Opérandes (3)
(3) Prochaine(s)
Prochaine(s) instruction(s)
instruction(s)
Opcode Conditions
Beaucoup d’information! P.ex., une architecture avec 256 instructions,
16 fanions, 64 registres et un bus (adresse) de 32 bits aurait besoin,
même si tous les opérandes sont des registres (ce qui n’est pas le cas),
de
8 + 4 + 6x3 + 32x2 = 94 bits!
Une solution est de coder les instructions sur plusieurs mots mémoire.
Ce fut une technique très utilisée dans le passé (processeurs 8 et 16
bits) et le reste aujourd’hui pour certains types d’instructions. Elle
introduit cependant beaucoup de délai (plusieurs coups d’horloge par
instruction, décodage complexe).
Des simplifications sont nécessaires!
Format des instructions - Simplifications
Première simplification: chaque type d’instruction nécessite des
informations différentes.
Transferts de données: 78 bits (un opérande peut être une adresse)
Opcode
Prochaine
Opérandes (2)
(2)
Prochaine instruction
instruction
Opcode Opérandes
Opérations arithmétiques et logiques: 58 bits (que des registres)
Opcode
Opcode
Opérandes
Opérandes (3)
(3)
Prochaine
Prochaine instruction
instruction
Opérations d’entrée/sortie: 78 bits (un opérande peut être une adresse)
Opcode
Opcode
Opérandes
Opérandes (2)
(2)
Prochaine
Prochaine instruction
instruction
Instructions de contrôle: 76 bits
Opcode
Opcode Conditions
ConditionsProchaine(s)
Prochaine(s) instruction(s)
instruction(s)
Format des instructions - Simplifications
Deuxième simplification: par défaut, on peut définir la prochaine
instruction comme étant l’instruction suivante en mémoire.
Adresse
0:+1|0
1:+1
2:+1
3:+1
Fanions
G. Tempesti
SLC
SLC
RAM
RAM
Contrôle
CK
SL
SL
Opérandes
0:data ¨ inport
1:ocount ¨ 0
2:mask ¨ 1
3:while data π 0
¨data AND mask
4:temp¨
¨ocount+temp
5:ocount¨
6:data ¨ data >> 1
end while
7:outport ¨ ocount
nn BASCULES
BASCULES
Opcode
Opcode Opérandes
Opérandes
Instruction
4:+1
5:+1
6:+1|4
7:0
Semaine V
4
Architecture et technologie des ordinateurs II
Séquenceur
Adresse
SLC
SLC
Fanions
Contrôle
RAM
RAM
CK
Adresse
PC
Opérandes
nn BASCULES
BASCULES
Opcode
Opcode Opérandes
Opérandes
Instruction
Séquenceur
Séquenceur
CK
+1
CK
Opérande
Opcode
Condition
Fanions
SLC
Format des instructions - Simplifications
Transferts de données: 46 bits (un opérande peut être une adresse)
Opcode
Opcode Opérandes
Opérandes (2)
(2)
Opérations arithmétiques et logiques: 26 bits (que des registres)
Opcode
Opcode Opérandes
Opérandes (3)
(3)
Opérations d’entrée/sortie: 46 bits (un opérande peut être une adresse)
Opcode
Opcode Opérandes
Opérandes (2)
(2)
Instructions de contrôle: 44 bits
Opcode
Opcode Condition
Condition Prochaine
Prochaine instruction
instruction
Toujours trop grandes! Il faut trouver d’autres simplifications.
Opérations arithmétiques et logiques
Les opérations arithmétiques et logiques peuvent, en théorie, être
effectuées directement sur des données en mémoire (CISC):
add adr1,adr2,adr3
(8+32x3=104 bits!)
En pratique, pour simplifier le contrôle du processeur, ce type
d’opérations est toujours fait avec des données préalablement placées
dans les registres du processeur (RISC):
add rx,ry,rz
(8+6x3=26 bits)
Grâce à cette approche, 32 bits sont normalement suffisants pour
stocker une instruction complète. Pour des processeurs plus petits
(16 bits), on peut toujours réduire le nombre d’opérandes à deux:
move rx,rz
add ry,rz
G. Tempesti
Semaine V
5
Architecture et technologie des ordinateurs II
Transferts de données et I/O
Pour les transferts de données et pour le traitement des entrées/sorties,
on ne peut pas se passer de références à la mémoire principale.
L’instruction doit coder soit les données elles-mêmes, soit des
indications sur comment l’unité de traitement peux les retrouver.
Encore une fois, les transferts de données peuvent, en théorie, être
effectués directement sur des adresses mémoire:
move adr1,adr2
(8+32x2=72 bits)
En pratique, pour simplifier le contrôle du processeur, un des
opérandes (la source ou la destination, indifféremment) dans ce type
d’opérations est toujours un des registres du processeur:
(8+ 32+6=46 bits)
move adr,rx
Cette approche réduit le nombre de bits nécessaires pour codes ces
instructions, mais pas suffisamment. Le problème est résolu (plus ou
moins) par l’utilisations de modes d’adressage.
Modes d'adressage
Pour les transferts de données et pour le traitement des entrées/sorties,
on suppose donc que l’un des opérandes est un registre. L’autre
opérande doit coder soit les données elles-mêmes, soit leur
emplacement dans la mémoire principale (adresse).
Petit exemple:
MAX = 100;
CNTR = MAX/2;
ARR = MALLOC(MAX*sizeof(INT));
START_VAL = *(ARR);
END_VAL = *(ARR + 100);
CNTR_VAL = *(ARR + CNTR);
START = ARR;
END = ARR + MAX;
FOR (I=0; I<CNTR; I++) {
BOTTOM_HALF += *(START);
START += sizeof(INT);
TOP_HALF += *(END-sizeof(INT));
...
}
Adressage immédiat
Si les données sont stockées directement dans l'instruction elle-même,
on parle d’adressage immédiat ou littéral:
move data,rx
Opcode
Opcode
Data
Data
Destination
Destination (Rx)
(Rx)
Il faut remarquer que les données de ce type d’instruction ont
forcément une taille limitée par largeur de l’instruction (dans notre
exemple, 32 - 8 - 6 = 18 bits).
Dans notre exemple:
MAX = 100;
G. Tempesti
Semaine V
6
Architecture et technologie des ordinateurs II
Adressage par registre
Les données peuvent être préalablement stockées dans un des
registres du processeur. On parle dans ce cas d’adressage par
registre:
move ry,rx
Opcode
Opcode
Source
Source(Ry)
(Ry)
Destination
Destination (Rx)
(Rx)
Banc
Bancdes
des
registres
registres
Opérande
Les données dans ce type d’instructions ont une taille égale à la
largeur des registres.
Dans notre exemple:
CNTR = MAX/2;
Adressage direct
Si le deuxième opérande doit indiquer l’emplacement des données en
mémoire principale, on peut coder directement l’adresse dans
l’instruction. On parle dans ce cas d’adressage direct ou absolu:
move adr,rx
Opcode
Opcode
Source
Source (adresse)
(adresse)
Destination
Destination (Rx)
(Rx)
Mémoire
Mémoire
MMU
MMU
Opérande
La taille des adresses est ici limitée par la largeur de l’instruction.
Les bits restants sont implicites (ajoutés par la MMU).
Ce mode d'adressage est très rarement utilisé dans les programmes
écrits par l'utilisateur. Par contre, il est très commun dans les OS:
ARR = MALLOC(MAX*sizeof(INT));
Adressage indirect par registre
L’emplacement (adresse) des données en mémoire principale peut
aussi être préalablement stocké dans un des registres du processeur.
On parle dans ce cas d’adressage indirect par registre:
move (ry),rx
Opcode
Opcode
Source
Source(Ry)
(Ry)
Destination
Destination (Rx)
(Rx)
Banc
Bancdes
des
registres
registres
Mémoire
Mémoire
Adresse
Opérande
Les adresses dans ce type d’instructions ont une taille égale à la
largeur des registres.
Dans notre exemple:
START_VAL = *(ARR);
G. Tempesti
Semaine V
7
Architecture et technologie des ordinateurs II
Adressage indirect via mémoire
L’emplacement (adresse) des données en mémoire principale peut
être lui-même stocké en mémoire principale. On parle dans ce cas
d’adressage indirect via mémoire:
move (adr),rx
Opcode
Opcode
Source
Source (adresse)
(adresse)
Destination
Destination (Rx)
(Rx)
Mémoire
Mémoire
Opérande
MMU
MMU
Adresse
La taille des adresses est ici limitée par la largeur de l’instruction. Les
bits restants sont implicites (ajoutés par la MMU).
Comme l'adressage direct, ce mode d'adressage est très rarement
utilisé dans les programmes écrits par l'utilisateur mais il est très
commun dans les OS.
Adressage avec déplacement
L’emplacement (adresse) des données en mémoire principale peut
être défini comme un déplacement (offset) par rapport à une adresse
de base stockée dans un des registres. Si le déplacement est stocké
dans l'instruction, on parle d’adressage avec déplacement ou basé:
move dpl(ry),rx
Opcode
Offset
Base
Destination
Offset
Base(Ry)
(Ry)
Destination (Rx)
(Rx)
Opcode
Banc
Bancdes
des
registres
registres
Adresse
Mémoire
Mémoire
++
Opérande
La taille des adresses est égale à la largeur des registres. Par contre, la
taille du déplacement est limitée par la taille de l'instruction.
Dans notre exemple:
END_VAL = *(ARR + 100);
Adressage indexé
L’emplacement (adresse) des données en mémoire principale peut
être défini par la somme d’une adresse de base stockée dans un
registre et d’un déplacement (index) stocké dans un autre registre.
On parle dans ce cas d’adressage indexé:
move (ry+rz),rx
Opcode
Base
Index
Destination
Base(Ry)
(Ry)
Index(Rz)
(Rz)
Opcode
Destination (Rx)
(Rx)
Mémoire
Mémoire
Banc
Bancdes
des
registres
registres
Offset
++
Opérande
Adresse
Les adresses et le déplacements dans ce type d’instructions ont une
taille égale à la largeur des registres.
Dans notre exemple:
CNTR_VAL = *(ARR + CNTR);
G. Tempesti
Semaine V
8
Architecture et technologie des ordinateurs II
Adressage auto-incrémenté
Pour parcourir une série de positions mémoire successives (p.ex. lors
de l’accès à une table), il est utile d’incrémenter une adresse avant ou
après chaque accès. Il s'agit de l’adressage auto-incrémenté.
Post-incrément:
Opcode
Opcode
move (ry)+,rx
Source
Source(Ry)
(Ry)
Destination
Destination (Rx)
(Rx)
Banc
Bancdes
des
registres
registres
Mémoire
Mémoire
Adresse
Opérande
++
Les adresses dans ce type d’instructions ont une taille égale à la
largeur des registres.
Taille de la donnée
Dans notre exemple:
BOTTOM_HALF += *(START); START += sizeof(INT);
Adressage auto-décrémenté
Pour parcourir une série de positions mémoire successives à partir de
la fin, il est utile de décrémenter une adresse avant ou après chaque
accès. On parle dans ce cas d’adressage auto-décrémenté.
Pre-décrément:
move -(ry),rx
Opcode
Source
Destination
Source(Ry)
(Ry)
Destination (Rx)
(Rx)
Opcode
Taille de la donnée
Banc
Bancdes
des
registres
registres
Adresse
Mémoire
Mémoire
--
Opérande
Les adresses dans ce type d’instructions ont une taille égale à la
largeur des registres.
Dans notre exemple:
TOP_HALF += *(END-sizeof(INT));
Petit exemple bien compliqué
program toto;
var
A, B, C : array [1...1000] of integer;
i : integer
begin
for i:=1 to 1000 do
C[i] := A[i] + B[i];
end
...
MOVE.L #2001,A0
Charger l’adresse 2001 dans le registre A0
(pointeur sur le vecteur A)
MOVE.L #3001,A1
Charger l’adresse 2001 dans le registre A1
(pointeur sur le vecteur B)
MOVE.L #4001,A2
Charger l’adresse 2001 dans le registre A2
(pointeur sur le vecteur C)
START: ABCD
-(A0),-(A1)
Décrémenter le contenu de A0 et A1 (adresses),
puis additionner les données (1 byte BCD)
MOVE.B (A1),-(A2)
Décrémenter A2 et stocker le résultat (1 octet)
dans le vecteur C
TEST: CMPA
#1001, A0
Comparer le contenu de A0 (adresse) avec 1001;
Z=1 si les deux valeurs sont égales, Z=0 sinon
BNE
START
Sauter à START si Z n’est pas égal à 1
...
G. Tempesti
Semaine V
9
Architecture et technologie des ordinateurs II
Instructions de contrôle
Les instructions de contrôle (essentiellement des branchements)
doivent nécessairement indiquer une adresse (la cible du
branchement):
if (cond) then [continue] else [branche]
Opcode
Condition
Opcode Condition
Adresse
Adressecible
cible
En théorie, cette cible pourrait être n’importe quelle position mémoire.
En pratique, dans la grande majorité des cas, il s’agit d’un saut à une
instruction dont la position mémoire est relativement proche de
l’instruction qui est en train de s’exécuter.
Par conséquent, le mode d’adressage couramment utilisé pour les
instructions de contrôle est l’adressage par déplacement, où la base est
définie implicitement comme étant le PC.
Opcode
Offset
Condition
Offset
Opcode Condition
Branchement par déplacement
0:+1|+0
1:+1
2:+1
3:+1
SLC
SLC
Opérandes
RAM
RAM
Contrôle
nn BASCULES
BASCULES
Opcode
Opcode Opérandes
Opérandes
Instruction
0:data ¨ inport
1:ocount ¨ 0
2:mask ¨ 1
3:while data π 0
¨data AND mask
4:temp¨
¨ocount+temp
5:ocount¨
6:data ¨ data >> 1
end while
7:outport ¨ ocount
Séquenceur
Séquenceur
Adresse
CK
CK
Fanions
4:+1
5:+1
6:+1|-2
7:-7
Séquenceur
Adresse
Fanions
G. Tempesti
RAM
RAM
Contrôle
CK
Adresse
PC
+1
CK
+
SLC
SLC
Opérandes
nn BASCULES
BASCULES
Opcode
Opcode Opérandes
Opérandes
Instruction
Séquenceur
Séquenceur
CK
Offset
Opcode
Condition
Fanions
SLC
Semaine V
10