Académique Documents
Professionnel Documents
Culture Documents
Chapitre 2 Microprocesseurs
Chapitre 2 Microprocesseurs
Le microprocesseur
2
Un microprocesseur est un circuit intégré complexe caractérisé par une très
grande intégration et doté des facultés d'interprétation et d'exécution des instructions d'un programme.
Il est chargé d’organiser les tâches précisées par le programme et d’assurer leur exécution. Il doit
aussi prendre en compte les informations extérieures au système et assurer leur traitement. C’est le
cerveau du système.
A l’heure actuelle, un microprocesseur regroupe sur quelques millimètre carré des
fonctionnalités toujours plus complexes. Leur puissance continue de s’accroître et leur encombrement
diminue régulièrement respectant toujours, pour le moment, la fameuse loi de Moore (1).
associés à des registres chargées de stocker les différentes informations à traiter. Ces trois éléments
sont reliés entre eux par des bus interne permettant les échanges d’informations.
Bus d’adresses
Programme
Unité de Unité de
traitement commande
Données
Bus de données
Remarques :
Il existe deux types de registres :
le compteur de programme constitué par un registre dont le contenu est initialisé avec
l'adresse de la première instruction du programme. Il contient toujours l’adresse de
l’instruction à exécuter.
(1) Moore (un des co-fondateurs de la société Intel) a émis l'hypothèse que les capacités technologiques permettraient de
multiplier par 2 tous les 18 mois le nombre de transistors intégrés sur les circuits.
1.1 L’unité de commande
a) Rôle
L’unité de commande a pour rôle de gérer le bon déroulement du programme. Elle doit donc
prendre en compte, les unes après les autres, chacune des instructions ; décoder l’instruction
en cours, lancer les ordres (micro-commandes) aux composants du système qui participent à
la réalisation de cette instruction ; puis aller chercher une nouvelle instruction et
recommencer.
Pour cela l’unité de commande est constituée d’un certain nombre de composants internes qui
assurent chacun une fonction bien déterminée.
L’instruction que l’unité de commande va devoir traiter est chargée préalablement dans un
registre particulier appelé registre instruction.
> Le séquenceur
En fonction de l’instruction à traiter – qui vient d’être chargée dans le registre instruction –
l’unité de commande va devoir émettre un certain nombre de microcommandes vers les
autres composants du système.
Ces ordres ne devront bien évidemment pas être émis n’importe quand, ni vers n’importe quel
composants, mais respecter une chronologie bien précise selon le type d’instruction à
exécuter. Cette chronologie (ce séquencement) est rythmée par une horloge interne au
système, quartz oscillant à une fréquence comprise à l’heure actuelle entre 2 et 3.2 GHz. On
comprend intuitivement que plus cette fréquence est élevée et plus l’unité centrale de
traitement travaille « vite » -- mais ce n’est pas le seul facteur de rapidité.
Le composant qui émet ces microcommandes (en fonction du code opération (préalablement
décodé) de l’instruction située dans le registre instruction) est le séquenceur, qui comme son
nom le laisse entendre, envoie une séquence de microcommandes vers les composants
impliqués par l’instruction.
Pour exécuter correctement son travail, le séquenceur doit, en outre, connaître l’état d’un
certain nombre d’autres composants et disposer d’informations concernant la ou les
opérations qui ont déjà été exécutées (par exemple, doit-on tenir compte dans l’addition en
cours d’une éventuelle retenue préalable générée par une addition précédente). La
connaissance de ces informations se fait à l’aide d’un autre composant appelé registre
indicateur ou, plus couramment registre d’état, et qui, grâce à des indicateurs (drapeaux ou
flags), qui ne sont en fait que des registres de bascules, mémorisera certaines informations
telles que retenue préalable, imparité, résultat nul, etc.
Par la suite, à chaque fois qu’une instruction a été chargée dans le registre instruction et
qu’elle s’apprête à être exécutée, ce compteur ordinal est incrémenté (augmenté) de manière
à pointer sur l’adresse de la prochaine instruction à exécuter.
le registre d'instruction et le décodeur d'instruction : chacune des instructions à exécuter
est rangée dans le registre instruction puis est décodée par le décodeur d’instruction.
L’Unité Arithmétique et Logique (UAL) est un circuit complexe qui assure les fonctions
logiques (ET, OU, Comparaison, Décalage , etc…) ou arithmétique (Addition, soustraction).
Les accumulateurs sont des registres de travail qui servent à stocker une opérande au début
d'une opération arithmétique et le résultat à la fin de l'opération.
Bus d’adresses
Registre d’@
Acc.
Registre PC
d’états
Programme
UAL Bus de
commande
Bloc logique de commande
Données
Registre Décodeur
d’instruction d’instruction
Registre Données
Bus de données
2. Cycle d’exécution d’une instruction
Le microprocesseur ne comprend qu’un certain nombre d’instructions qui sont codées en
binaire. Le traitement d’une instruction peut être décomposé en trois phases.
1. Le PC contient l'adresse de l'instruction suivante du programme. Cette valeur est placée sur le
bus d'adresses par l'unité de commande qui émet un ordre de lecture.
2. Au bout d'un certain temps (temps d'accès à la mémoire), le contenu de la case mémoire
sélectionnée est disponible sur le bus des données.
3. L'instruction est stockée dans le registre instruction du processeur.
1
microprocesseur
PC $2000 mémoire
@ $2000
$2000 Instr. 1
RI Instr. 1
$2001 Opér. 1
3
$2002 Instr. 2
Décodeur
d’instruction $2003 Instr. 3
2
$2004
Inst. 1
$FFFF
Le registre d'instruction contient maintenant le premier mot de l'instruction qui peut être codée sur
plusieurs mots. Ce premier mot contient le code opératoire qui définit la nature de l'opération à
effectuer (addition, rotation,...) et le nombre de mots de l'instruction.
$2002 Instr. 2
Décodeur
d’instruction $2003 Instr. 3
1 $2004
UAL
microprocesseur
PC $2002 mémoire
Bloc
logique de 3 $2000 Instr. 1
commande Instr. 1
RI $2001 Opér. 1
$2002 Instr. 2
Décodeur
d’instruction $2003 Instr. 3
$2004
UAL Z=1 C=0 …
1 2
Result. Opér. 1
$FFFF
3. Les instructions-machine.
Notons que le langage machine est le seul langage directement assimilable par un ordinateur.
Les difficultés de programmation directe en langage machine ont cependant conduit à concevoir
des langages s'éloignant peu à peu de la machine réelle: langages d'assemblage d'abord (de bas
niveau), jusqu'aux langages dits évolués (FORTRAN, COBOL, PASCAL, C, ...). Ces langages
évolués sont traduits par des compilateurs et des éditeurs de lien pour former des versions
exécutables en langage machine, donc des suites d'instructions machine.
Si le langage machine peut être différent d'une machine à une autre, c'est que certaines
caractéristiques des instructions peuvent varier, entre autres:
Le constructeur de la machine doit donc faire plusieurs choix. Ces choix sont en relation avec
d'autres choix qui déterminent d'autres caractéristiques d'une machine, par exemple la capacité de
la mémoire, la longueur des mots mémoire, le débit binaire des unités, etc. Ainsi, la longueur de
l'instruction détermine le nombre de mots machine qui seront nécessaires pour la stocker.
1
La façon dont le nombre de bits qui forment l'instruction est réparti entre le code opération et les
opérandes est aussi capitale: chaque opérande doit avoir une longueur suffisante pour que toutes
les cellules mémoire soient accessibles et la longueur du code d'opération détermine le nombre
d'instructions disponibles. Nous verrons plus les répercussions de cette répartition des bits sur la
puissance et la capacité d'une machine.
Enfin, le nombre d'opérandes peut varier, ce qui suppose des différences de fonctionnement
considérables. Nous examinerons des exemples d'instructions à 4, 3, 2, 1 et même 0 opérandes.
Notons qu'une même machine peut avoir plusieurs formats d'instruction différents.
n bits
.
Cette instruction comporte un code d'opération, et 3 "spécificateurs d'opérande". Une instruction
peut en contenir 0, 1 ou plusieurs spécificateurs d'opérande, en général des adresses d'opérande.
C'est donc dire que cette instruction contient 3 adresses et un code d'opération. Toutes les
adresses doivent avoir la même longueur (m bits dans le schéma). Si l'instruction est codée sur n
bits, il reste donc:
n bits - 3m bits (l'espace occupé par les adresses) pour le code d'opération.
¾ si chaque adresse est codée sur m bits, une adresse peut faire référence à 2m cellules
différentes (en mode d'adressage direct), soient les cellules dont l'adresse est comprise entre
0 et 2m-1.
¾ si le code opération est codé sur k bits (n - 3m bits), l'ordinateur pourra avoir 2k opérations
différentes.
L'ensemble des instructions qu'une machine peut exécuter constitue son répertoire d'instructions
ou jeu d'instructions. Le choix des instructions et leur nombre dépend naturellement du type de
travail que l'ordinateur aura à exécuter: plus le travail est diversifié et complexe, plus la liste a de
chances d'être longue et l'ordinateur coûteux car l'implantation de la plupart des opérations est
faite de façon câblée (électroniquement).
2
La longueur du code opération détermine le nombre d'opérations différentes qui constituent le
répertoire. Plus le code opération est court, plus le répertoire sera limité. Il doit cependant
contenir au moins une instruction pour
¾ communiquer avec l'extérieur
¾ entrer et sortir des données
¾ effectuer une rupture de séquence ou un test
À l'inverse, plus le code opération est long, plus le répertoire d'instruction de la machine est
grand, ce qui permet d'ajouter au répertoire de base d'autres instructions plus sophistiquées, et par
le fait-même, d'en accroître la complexité.
Le constructeur se retrouve ici encore devant des choix à faire: il doit trouver un équilibre entre la
sophistication et la simplicité. Ces choix ont des répercussions énormes sur l'architecture de la
machine et sur son coût. En effet, le choix des instructions et leur nombre fixe de façon définitive
la structure de l'unité de contrôle et celle de l'unité de calcul; on ne peut modifier le répertoire
d'instructions une fois l'ordinateur construit.
Voici un répertoire d'instructions très simple. Les instructions de cette machine fictive sont
codées sur 18 bits répartis de la façon suivante:
18 bits
Tableau 1
3
Rupture
100 Inconditionnelle RUP compteur ordinal Å C
Lire un nombre octal et le ranger dans
101 Lecture LIR A;
si B ≠ 0 en lire un second
si C ≠ 0 en lire un troisième
110 Écriture ECR Imprimer (A);
si B ≠ 0 alors imprimer (B)
si C ≠ 0 alors imprimer (C)
111 Arrêt ARR Ne plus exécuter d'instructions
Dans ce tableau, la première colonne donne le code d'opération binaire (sur 3 bits); chaque
opération est symbolisée par le mnémonique correspondant. Les lettres A, B et C désignent des
adresses symboliques et (A), (B) et (C) désignent le contenu des cellules d'adresses A, B et C (les
adresses effectives). Les affectations sont représentées par Å : C Å (A) signifie de placer à
l'adresse C le contenu de la cellule d'adresse A.
ADD A, B, SOMME
À partir des adresses des opérandes et du code opération, nous pouvons construire l'instruction
machine de la façon suivante:
ADD A, B, Somme
adresse décimale 12 18 29
binaire 000 01100 10010 11101
4
000 011 001 001 011 101
octal 0 3 1 1 3 5
Imaginons que l'instruction machine soit logée à l'adresse Z de la mémoire centrale. Pour que
cette instruction soit exécutée, le travail de l'unité de contrôle s'effectuerait selon la séquence
d'événements suivante:
Au temps T0:
L'unité centrale de traitement traite l'instruction logée à l'adresse Z-1 de la mémoire
Figure 1
5
ADRESSES DONNÉES
MÉMOIRE
12 000010
REGISTRE
•••
D'ADRESSE
18 000004
Ž-1
•••
29
•••
REGISTRE
DE DONNÉES Ž-1 ??????
?????? Ž 031135
REGISTRE R4
D'INSTRUCTION
?????? R3
DÉCODEUR D'INSTRUCTION R2
R1
REGISTRE DE DONNÉES
COMPTEUR
ORDINAL
SÉQUENCEUR
Ž-1 REGISTRE D'ADRESSE
6
Au temps T1:
ADRESSES DONNÉES
MÉMOIRE
12 000010
REGISTRE
•••
D'ADRESSE
18 000004 4
12
•••
29
5
•••
REGISTRE 3
DE DONNÉES
Ž-1 ??????
Ž 031135 000010
REGISTRE R4
D'INSTRUCTION
031135 R3
1
DÉCODEUR D'INSTRUCTION 7 R2 000010
ADD 12
R1
REGISTRE DE DONNÉES
COMPTEUR
ORDINAL 000010
SÉQUENCEUR 2
Ž REGISTRE D'ADRESSE
12
Figure 2 1
7
Au temps T2:
9 L'unité de contrôle coordonne le chargement du contenu de l'adresse B dans le registre
R3 de l'ALU:
Figure 17
ADRESSES DONNÉES
MÉMOIRE
12 000010
REGISTRE
•••
D'ADRESSE
18 000004
4 18
•••
29
5
•••
REGISTRE 3
DE DONNÉES
Ž-1 ??????
000004
Ž 031135
REGISTRE R4
D'INSTRUCTION
031135 7 R3 000004
8
Au temps T3: (voir figure 18)
9 l'unité de contrôle décode l'adresse de SOMME,
9 l'adresse de SOMME ainsi que le code d'opération sont transmis à l'ALU.
9 L'ALU exécute l'opération à l'aide de son additionneur et range la valeur du résultat dans
le registre R4,
9 la valeur du résultat est copiée dans le registre de données,
9 la valeur du résultat est copiée à l'adresse SOMME de la mémoire.
Figure 3
ADRESSES DONNÉES
MÉMOIRE
12 000010
REGISTRE
•••
D'ADRESSE
18 000004
29
•••
29 000014
•••
REGISTRE
DE DONNÉES
Ž-1 ??????
000014
Ž 031135
REGISTRE R4 000014
D'INSTRUCTION
031135 R3
ADDITIONNEUR
000004
REGISTRE DE DONNÉES
COMPTEUR
ORDINAL 000014
SÉQUENCEUR
Ž REGISTRE D'ADRESSE
29
9
3.3 Nombre d'opérandes.
Figure 28
n bits
Exemple : ADD X, Y, Z, W
Les instructions à 4 adresses sont très rares, car elles sont très longues. Les constructeurs
préfèrent prévoir un compteur ordinal dans l'unité de contrôle qu'un opérande servant à indiquer
l'adresse de la prochaine instruction.
4.2.6.2.Instruction à 3 adresses.
Figure 29
n bits
.
Ces instructions ont le même format que celles utilisées dans les exemples de programmes vus
précédemment. Un processeur fonctionnant avec de telles instructions localise l'instruction
19
suivante à l'aide d'un registre compteur ordinal. Le compteur ordinal doit comporter m bits de
position, car il est destiné à recevoir des adresses.
Figure 3
n bits
Les instructions à 2 adresses sont les plus courantes. L'adresse du résultat est implicitement
choisie: celui-ci est rangé à l'adresse du 2ième opérande ou à celle du premier opérande selon le
choix fait par le constructeur.
INSTRUCTION PSEUDO-CODE
Pour illustrer ces avantages, reprenons la machine imaginée à la section 2.2. Cette machine avait
des instructions sur 18 bits. Chaque instruction avait 3 opérandes de 5 bits et un code d'opération
sur 3 bits, ce qui lui donnait les caractéristiques suivantes:
20
Imaginons la même machine, mais avec 2 opérandes au lieu de 3. Les 18 bits de l'instruction
pourraient, par exemple, se répartir ainsi: 2 opérandes de 7 bits et un code d'opération de 4 bits,
ce qui donnerait les caractéristiques suivantes:
En fait, dans les instructions à 3 adresses, le 3ème opérande ne sert qu'à indiquer l'adresse de
rangement du résultat, puisque les opérations logiques et arithmétiques s'effectuent sur deux
opérandes à la fois. La suppression du 3ème opérande ne nuit donc pas au travail de l'ALU.
Évidemment, il peut être ennuyeux de perdre la valeur du 2ème opérande en lui substituant le
résultat, mais on peut remédier à cela en faisant une copie du deuxième opérande dans une autre
cellule de mémoire si cette valeur doit être conservée.
Figure 4
CODE ADRESSE DE
OPÉRATION L' OPÉRANDE
n bits
.
Une instruction à une adresse nécessite non seulement un compteur ordinal, mais aussi un registre
supplémentaire pour stocker temporairement les valeurs intermédiaires pendant le calcul. Ce
registre, appelé accumulateur (ACC.) peut contenir la donnée source ou le résultat du calcul.
INSTRUCTIONS SIGNIFICATION
21
3.3.4. Instruction à 0 adresse
Le processeur à 0 adresse possède un accumulateur particulier qu'on nomme pile. Une pile est un
rangement par ordre chronologique. Contrairement à un accumulateur ordinaire, placer une
donnée dans une pile ne détruit pas son contenu précédent: celui-ci sera plutôt repoussé au fond
de la pile. Généralement, l'accès aux données se fait dans l'ordre inverse où celles-ci ont été
rangées dans la pile; on désigne souvent ce type d'accès par le sigle anglais LIFO (Last In, First
Out). Cela implique qu'on a accès qu'à la donnée qui est au sommet de la pile (soit la dernière
entrée) ou aux données se trouvant dans des emplacements consécutifs à partir du sommet.
Figure 31
PILE
8 7 6 5 4 3 2 1
8 7 6 5 4 3 2 1
ORDRE DE SORTIE
ORDRE D'ENTRÉE
L'instruction à 0 adresse permet de modifier la pile en effectuant une opération sur les deux
données à partir du sommet, et en plaçant le résultat de l'opération au sommet de la pile.
Exemple: ADD signifie: additionner les valeurs du sommet de la pile et placer le résultat
dans la pile.
Figure 32
valeur de X
ADD valeur de X + valeur de Y
valeur de Y
valeur de Z
valeur de Z
Pour ranger des données dans la pile ou pour les en retirer, on utilise deux instructions :
22
PUSH A: place le contenu de A dans la pile (et pousse les contenus précédents vers le fond de
la pile)
POP A: retire la valeur située au sommet de la pile et la range à l'adresse A (et fait "remonter" les
contenus précédents d'une position vers le sommet)
Exemple: Le calcul de l'expression (R) = ((R) + (Y))/((A) + (B)) peut être programmée de la
façon suivante:
La figure suivante montre quel est le contenu de la pile après chacune des opérations:
1. 2. 3. 4.
(Y)
(B)
5. 6. 7.
(R)
23
4. Les modes d’adressage
Les modes d’adressages permettent de déterminer la manière avec laquelle, accéder à une position en
mémoire. Ce qui correspond au calcul de l’adresse effective (EA : Effective Address) de cette position.
L’adresse effective étant le déplacement (offset) de la case mémoire dans le segment.
Voici quelques modes d'adressages:
1- Adressage implicite : L’instruction contient seulement le code opération.
Exemple : NOT AX ; permet de complémenter le contenu du registre AX.
5- Adressage indirect par registre ou basé (et basé avec déplacement) : L’offset est contenu dans un registre
de base BX ou BP. EA= (BP) ; EA= (BX) (contenu de BP ou de BX).
Exemples :
- MOV AL, [BX] ; transfère la donnée dont l’offset est contenu dans le registre de base BX vers le registre AL.
Le segment associé par défaut au registre BX est le segment de données DS ;
- MOV AL, ES : [BX] ; transfère dans registre AL, la donnée dont l’offset est contenu dans le registre de base
BX du segment de données supplémentaires ES ;
- MOV AL, [BP] ; le segment par défaut associé au registre de base BP est le segment de pile.
Dans le cas de l’adressage basé avec déplacement, une constante est additionnée au contenu du registre de
base. EA= (BP) + d ; EA= (BX) + d.
Exemple : MOV [BX+100h], AX ; L’adresse effective est donnée par (BX) + 100h.
Exemple de programme :
le CPI (Cycle Par Instruction) qui représente le nombre moyen de cycles d’horloge
nécessaire pour l’exécution d’une instruction pour un microprocesseur donné.
FH avec FH en MHz
MIPS=
CPI
Pour augmenter les performances d’un microprocesseur, on peut donc soit augmenter la fréquence
d'horloge (limitation matérielle), soit diminuer le CPI (choix d'un jeu d'instruction adapté).
6.1.1 Pourquoi
Par le passé la conception de machines CISC était la seule envisageable. En effet, vue que la
mémoire travaillait très lentement par rapport au processeur, on pensait qu’il était plus intéressant de
soumettre au microprocesseur des instructions complexes. Ainsi, plutôt que de coder une opération
complexe par plusieurs instructions plus petites (qui demanderaient autant d’accès mémoire très lent),
il semblait préférable d’ajouter au jeu d’instructions du microprocesseur une instruction complexe qui
se chargerait de réaliser cette opération. De plus, le développement des langages de haut niveau
posa de nombreux problèmes quant à la conception de compilateurs. On a donc eu tendance à
incorporer au niveau processeur des instructions plus proches de la structure de ces langages.
6.1.2 Comment
C’est donc une architecture avec un grand nombre d’instructions où le microprocesseur doit
exécuter des tâches complexes par instruction unique. Pour une tâche donnée, une machine CISC
exécute ainsi un petit nombre d’instructions mais chacune nécessite un plus grand nombre de cycles
d’horloge. Le code machine de ces instructions varie d’une instruction à l’autre et nécessite donc un
décodeur complexe (micro-code)
6.2.1 Pourquoi
Des études statistiques menées au cours des années 70 ont clairement montré que les
programmes générés par les compilateurs se contentaient le plus souvent d'affectations, d'additions et
de multiplications par des constantes. Ainsi, 80% des traitements des langages de haut niveau
faisaient appel à seulement 20% des instructions du microprocesseur. D’où l’idée de réduire le jeu
d’instructions à celles le plus couramment utilisées et d’en améliorer la vitesse de traitement.
6.2.2 Comment
C’est donc une architecture dans laquelle les instructions sont en nombre réduit (chargement,
branchement, appel sous-programme). Les architectures RISC peuvent donc être réalisées à partir de
séquenceur câblé. Leur réalisation libère de la surface permettant d’augmenter le nombres de
registres ou d’unités de traitement par exemple. Chacune de ces instructions s’exécutent ainsi en un
cycle d’horloge. Bien souvent, ces instructions ne disposent que d’un seul mode d’adressage. Les
accès à la mémoire s’effectue seulement à partir de deux instructions (Load et Store). Par contre, les
instructions complexes doivent être réalisées à partir de séquences basées sur les instructions
élémentaires, ce qui nécessite un compilateur très évolué dans le cas de programmation en langage
de haut niveau.
6.3 Comparaison
Le choix dépendra des applications visées. En effet, si on diminue le nombre d'instructions, on
crée des instructions complexes (CISC) qui nécessitent plus de cycles pour être décodées et si on
diminue le nombre de cycles par instruction, on crée des instructions simples (RISC) mais on
augmente alors le nombre d'instructions nécessaires pour réaliser le même traitement.
7.1.1 Principe
L’exécution d’une instruction est décomposée en une succession d’étapes et chaque étape
correspond à l’utilisation d’une des fonctions du microprocesseur. Lorsqu’une instruction se trouve
dans l’une des étapes, les composants associés aux autres étapes ne sont pas utilisés. Le
fonctionnement d’un microprocesseur simple n’est donc pas efficace.
L’architecture pipeline permet d’améliorer l’efficacité du microprocesseur. En effet, lorsque la
première étape de l’exécution d’une instruction est achevée, l’instruction entre dans la seconde étape
de son exécution et la première phase de l’exécution de l’instruction suivante débute. Il peut donc y
avoir une instruction en cours d’exécution dans chacune des étapes et chacun des composants du
microprocesseur peut être utilisé à chaque cycle d’horloge. L’efficacité est maximale. Le temps
d’exécution d’une instruction n’est pas réduit mais le débit d’exécution des instructions est
considérablement augmenté. Une machine pipeline se caractérise par le nombre d’étapes utilisées
pour l’exécution d’une instruction, on appelle aussi ce nombre d’étapes le nombre d’étages du
pipeline.
Exemple de l’exécution en 4 phases d’une instruction :
Modèle classique :
R1 R2 R3
D1 D2 D3
E1 E2 E3
S1 S2 S3
Nbre de
1 2 3 4 5 6 7 8 9 10 11 12 Cycles
Modèle pipeliné :
R1 R2 R3 R4 R5 R6 R7 R8 R9
D1 D2 D3 D4 D5 D6 D7 D8 D9
E1 E2 E3 E4 E5 E6 E7 E8 E9
S1 S2 S3 S4 S5 S6 S7 S8 S9
Nbre de
1 2 3 4 5 6 7 8 9 10 11 12 Cycles
Remarques :
Le temps de traitement dans chaque unité doit être à peu près égal sinon les unités rapides doivent
attendre les unités lentes.
Exemples :
L’Athlon d’AMD comprend un pipeline de 11 étages.
Les Pentium 2, 3 et 4 d’Intel comprennent respectivement un pipeline de 12, 10 et 20 étages.
7.1.3 Problèmes
La mise en place d’un pipeline pose plusieurs problèmes. En fait, plus le pipeline est long,
plus le nombre de cas où il n’est pas possible d’atteindre la performance maximale est élevé. Il existe
3 principaux cas où la performance d’un processeur pipeliné peut être dégradé ; ces cas de
dégradations de performances sont appelés des aléas :
aléa structurel qui correspond au cas où deux instructions ont besoin d’utiliser la
même ressource du processeur (conflit de dépendance),
R1 R2 R3 R4 R4 R4 R4 R5 R6 Bulles (NOP)
D1 D2 D3 D3 D3 D3 D4 D5 D6
E1 E2 E3 E4 E5 E6
S1 S2 S3 S4 S5 S6
Nbre de
1 2 3 4 5 6 7 8 9 10 11 12 Cycles
Lorsqu’un aléa se produit, cela signifie qu’une instruction ne peut continuer à progresser dans
le pipeline. Pendant un ou plusieurs cycles, l’instruction va rester bloquée dans un étage du pipeline,
mais les instructions situées plus en avant pourront continuer à s’exécuter jusqu’à ce que l’aléa ait
disparu. Plus le pipeline possède d’étages, plus la pénalité est grande. Les compilateurs s’efforcent
d’engendrer des séquences d’instructions permettant de maximiser le remplissage du pipeline. Les
étages vacants du pipeline sont appelés des « bulles » de pipeline, en pratique une bulle correspond
en fait à une instruction NOP (No OPeration) émise à la place de l’instruction bloquée.
Soit la donnée ou l’instruction requise est présente dans le cache et elle est alors envoyée
directement au microprocesseur. On parle de succès de cache. (a)
soit la donnée ou l’instruction n’est pas dans le cache, et le contrôleur de cache envoie
alors une requête à la mémoire principale. Une fois l’information récupérée, il la renvoie
au microprocesseur tout en la stockant dans le cache. On parle de défaut de cache. (b)
a) up
1
mémoire
Unité de Unité de Cache
traitement commande
b) up
1 2
mémoire
Unité de Unité de Cache
traitement commande
4 3
Bien entendu, le cache mémoire n’apporte un gain de performance que dans le premier cas. Sa
performance est donc entièrement liée à son taux de succès. Il est courant de rencontrer des taux de
succès moyen de l’ordre de 80 à 90%.
Remarques :
Un cache utilisera une carte pour savoir quels sont les mots de la mémoire principale dont il
possède une copie. Cette carte devra avoir une structure simple.
Il existe dans le système deux copies de la même information : l’originale dans la mémoire
principale et la copie dans le cache. Si le microprocesseur modifie la donnée présente dans le cache,
il faudra prévoir une mise à jour de la mémoire principale.
Lorsque le cache doit stocker une donnée, il est amené à en effacer une autre. Il existe donc un
contrôleur permettant de savoir quand les données ont été utilisées pour la dernière fois. La plus
ancienne non utilisée est alors remplacée par la nouvelle.
A noter que l’on peut reprendre le même principe pour les disques durs et CD/DVD.
7.3 Architecture superscalaire
Une autre façon de gagner en performance est d’exécuter plusieurs instructions en même
temps. L'approche superscalaire consiste à doter le microprocesseur de plusieurs unités de traitement
travaillant en parallèle. Les instructions sont alors réparties entre les différentes unités d'exécution. Il
faut donc pouvoir soutenir un flot important d’instructions et pour cela disposer d’un cache performant.
Architecture scalaire :
Unité de
I1 I2 I3 I4 I5 I6 I7 I8
traitement
N cycles
Architecture superscalaire :
Unité de
I1 I3 I5 I6 I8
traitement 1
Unité de
I2 I4 I7
traitement 2
N/2 cycles
Remarque :
C'est le type d'architecture mise en oeuvre dans les premiers Pentium d'Intel apparus en 1993.
Nbre de
1 2 3 4 5 6 7 8 9 10 11 Cycles
Résumé Augmentation des performances
des microprocesseurs
Fréquence de fonctionnement
Mémoire cache (L1, L2, L3)
Parallélisation et optimisation des séquences
d'instructions
9 Pipeline
9 Architecture superscalaire
9 Jeu d'instructions (MMX, SSE, 3DNow !)
9 Exécution dynamique (Prédiction des branchements,
Analyse du flux de données, Exécution spéculative)
9 Architecture à deux bus indépendants (DIB, Dual
Independent Bus)
9 Technologie Hyper-Threading (simuler plusieurs
processeurs logiques)
9 Technologie multicoeur (utiliser plusieurs processeurs
physiques)
8.1 Le microcontrôleur
Ce sont des systèmes minimum sur une seule puce. Ils contiennent un CPU, de la RAM, de la
ROM et des ports d’Entrée/Sorties (parallèles, séries, I2C, etc..). Ils comportent aussi des fonctions
spécifiques comme des compteurs programmables pour effectuer des mesures de durées, des CAN
voir des CNA pour s’insérer au sein de chaînes d’acquisition, des interfaces pour réseaux de terrain,
etc ...
Il est adapté pour répondre au mieux aux besoin des applications embarquées (appareil
électroménagers, chaîne d’acquisition, lecteur carte à puce, etc...). Il est par contre généralement
moins puissant en terme de rapidité, de taille de données traitables ou de taille de mémoire
adressable qu’un microprocesseur.
9 Exemples
Voici deux exemples d’architecture de deux processeurs qui tenaient le haut du pavé lors de
leur sortie en 1999 : l’Athlon d’AMD et le Pentium III d’Intel. (f ≈500MHz)
Contrôleur de cache L2 supportant de 512Ko à 8Mo avec vitesse programmable (1/2 ou 1/3
de la vitesse CPU)
22 millions de transistors
31
Caractéristiques :
5 pipelines de 10 étages
32