Vous êtes sur la page 1sur 60

Chapitre 3 : Les processeurs

1
Introduction
 Processeur = traitement de base
 Co-processeurs = traitement spécifique

 Le premier processeur (Intel-1971) comporte 2300 transistors.

 46 instructions
 Les processeurs actuels comportent quelques dizaines de

millions de transistors.

2
Cycle d’un programme

 la programmation assembleur
 Compilateur
 Interpréteur
 Edition de liens

3
La programmation assembleur

Les premiers programmes sont écrites en code machine, c.-à-d.


des codes numériques correspondant aux instructions.
 Un processeur est programmé uniquement par des experts.
La programmation assembleur remplace les codes numériques par
des expressions symboliques
 Exemple: Au lieu de saisir le code (5EF4)16 ou son équivalent binaire en
écrivait: ADD A,B en assembleur.
=> plus compréhensible pour le programmeur, qui voyait tout de suite qu’il
s’agissait d’une addition entre deux nombres stockés quelque part.
 Plusieurs instructions spécifiques à une architecture de processeur. 4
La programmation assembleur

Inconvénient :
 il est fastidieux d’écrire des lignes de code car, les instructions étant
souvent peu puissantes, il faut en aligner beaucoup pour obtenir un
résultat, même simple.
Les instructions sont spécifiques à un modèle de processeur et tout
changement de machine implique une réécriture plus ou moins
complète du code.

5
Compilateur

 Apparition des langages évolués : C/C++, Java,…. il est rare d’avoir à programmer
directement en assembleur
 Tous ces langages disposent d’une structure de données et de contrôle qui facilitent la
tâche du programmeur.
 Instructions ne sont plus compréhensible directement par un processeur
⇒ Nécessité d’une phase de traduction : compilation
=> La compilation est un programme qui prend en entrée un fichier texte contenant le code
source écrit en langage évolué pour produire un fichier exécutable formé de codes
numériques propres à la machine
6
Interpréteur

 Perl, php, html, …


 Principe : Non pas traduire les instructions, mais à les exécuter au fur et à
mesure via un interpréteur.
 Exécution beaucoup plus lent qu’un programme compilé => Développement de
petits programmes

7
Editeur de liens

 Le compilateur génère un fichier objet (obj.), qui n’est pas immédiatement exécutable.
Ce fichier est bien constitué d’instructions machine, mais ne constitue pas forcément
l’intégralité du programme.
 Le fichier objet est découpé en modules séparés, chacun sous la forme de code source
 L’éditeur de liens permet de réunir tous les composants d’une application:
 Les fichiers objets
 Les bibliothèques qui fournissent des fonctionnalités standards.

8
Structure simplifiée d’un ordinateur

9
Le processeur

 Unité de commande : séquenceur + registres


Rôle : Ordres internes au processeur
 Unité Arithmétique et logique (UAL) : unité de
calcul + registres
Rôle : Calcul, opérations logiques

10
UAL

 L’UAL prend les opérandes des calculs depuis les registres et renvoie le résultat
également dans les registres.
 Registres accessibles par l’utilisateur.
 Plus ils sont nombreux, moins le programme fait appel à la MC, mais plus les
circuits prennent de la surface.
 On peut pas distinguer entre une donnée entière ou en virgule flottante =>
2 UAL, unité pour les entiers et une autre pour les nombres réels.

11
Les registres

 Les registres sont une zone de stockage temporaire des données située dans
le processeur
 Intérêt : accès beaucoup plus rapide que celles situées en mémoire principale.
 Registres généraux
 Registre d’instruction
 Compteur ordinal
 Registre d’état
 Registre pointeur de pile

12
Les registres
Les registres généraux
 Regroupés dans un banc de registres
 Les processeurs disposent d’une dizaine à une centaine de registres
généraux.
 Plus ils sont nombreux, moins le programme fait appel à la mémoire, mais
plus les circuits prennent de la place sur la puce.
 Ils sont à la disposition du programmeur
 Il n’y a aucun moyen de distinguer, une fois mis dans un registre, un nombre
entier d’un nombre flottant
13
Les registres

Registre d’instruction

 Contient l’instruction à exécuter par le processeur.


 Gérer totalement par l’unité de contrôle.
 Le programmeur n’a jamais accès.

14
Les registres

Compteur ordinal (CO/ PC)

 Un programme est mis en mémoire, ses instructions étant placées les unes à
la suite des autres
 Le compteur ordinal contient l’@ de la prochaine instruction à exécuter.
 Pas d’accès directe, le CO est modifié via les instructions de branchement
(exécution d’une instruction placée dans une zone mémoire distante)

15
Les registres

Compteur ordinal (CO/ PC) : instructions de branchement

 Pour exécuter une instruction, le processeur envoi un ordre de lecture mémoire


associé à la valeur contenue dans PC avant de récupérer l’instruction.
 Le processeur incrémente alors PC de la taille de l’instruction pour que le registre
pointe sur la suivante (rappelons que chaque adresse mémoire correspond à 1 octet
et qu’une instruction est longue de plusieurs octets ; PC doit donc être augmenté du
nombre d’octets de l’instruction, et non de 1).

16
Les registres

Compteur ordinal (CO/ PC) : instructions de branchement

1. La récupération de l’adresse
contenue dans PC

2. le stockage dans RI

3. l’incrémentation de PC

17
Les registres

Registre d’état (flags)

 Les bits servent comme indicateur sur l’état du processeur.


 Certains bits peuvent être positionnés par le programmeur (masquage des
interruptions).
 D’autres sont automatiquement mis à jour par le séquenceur : bits de
condition.
 Les bits de condition sont utilisés par les sauts conditionnels en liaison avec
les instructions de test et de comparaison 18
Les registres

Registre d’état (flags)


Bits de condition

 Le bit Z (Zero). Ce bit est à 1 si le résultat de l’instruction est nul, sinon il est mis à 0.
 Le bit C (Carry). Ce bit est à 1 si l’instruction génère une retenue finale, sinon il est mis à 0.
 Le bit N (Negative). Ce bit est à 1 si le résultat de l’instruction est négatif, sinon il est mis à
0
 Le bit V (oVerflow). Ce bit est à 1 si l’instruction génère un débordement arithmétique,
sinon il est mis à 0.
Utilisation : d’abord, on effectue un calcul, un test ou une comparaison, positionnant les
bits conditions suivant le résultat que l’on veut obtenir, puis l’on effectue un saut conditionnel
19
sur ces bits.
Les registres

Registre d’état (flags)


Bits de condition

 Le bit V (oVerflow) :Par exemple sur 8 bits en complément à 2, les nombres binaires sont
codés sur 8 bits. On peut coder les nombres variant de –128 (100000000) à
+127(01111111). Si on fait 107+28 cela donne 135 qui ne peut pas être représenté, d’ou
génération de débordement.
 Exemple

20
Exemple
 Supposons par exemple que l’on veuille tester si le registre r1 est nul.
ADD r0, r1, #0
JZS adresse_cible

 La première instruction additionne r1 et 0 et met le résultat dans r0. Ce résultat ne peut


être nul que si r1 lui même était nul au départ. Le bit Z n’est donc à 1 après cette
instruction que si r1 était nul.

 Le branchement n’est effectif que si le bit Z est à 1 (JZS « Jump if bit Z Set » = sauter
si le bit Z = 1).
 Deux exécutions différentes suivant la valeur de r1 :
• s’il est non nul, le processeur continue avec les instructions situées après le
branchement
• s’il est nul, le programme se poursuit à l’adresse cible indiquée dans le branchement
21
Les registres
Registre pointeur de pile
 Lors de l’exécution de programmes, ou d’appel de fonction le programme est dérouté pour
exécuter la fonction puis reprend normalement là où il s’était arrêté.
=> il faut alors mémoriser la valeur de CO avant d’exécuter la fonction pour pouvoir
reprendre le programme après l’appel.
 une pile « pointeur de pile » ou SP « Stack Pointer ») est implémentée en mémoire et un
registre pointeur pointe sur le haut de la pile,
 Ils empilent ou dépilent des informations, soit automatiquement par le séquenceur, soit à la
demande du programmeur.
 Des instructions spéciales (PUSH ou POP) sont à sa disposition, qui accèdent à la
22
mémoire via le registre SP par un adressage indirect.
Le séquenceur

 Le séquenceur est directement lié à la puissance du processeur puisqu’il est


responsable du bon déroulement des instructions.
 Il doit prendre en charge tous les transferts de données et l’envoi de toutes les
commandes aux autres composants internes

23
Le séquenceur

Cycle d’instructions

 Un cycle d’instruction est le cycle de fonctionnement de base d’un ordinateur.


 C’est le processus par lequel un ordinateur récupère une instruction de programme
à partir de sa mémoire, détermine les actions que l’instruction exige, et réalise ces
actions.
 Le cycle d’instruction est exécuté séquentiellement : chaque instruction est
complètement traitée avant que la suivante ne soit démarrée.

24
Le séquenceur

Cycle d’instructions

 L’exécution d’une instruction peut se décomposer en un certain nombre d’étapes


composant le cycle d’instruction :
• récupération de l’instruction et mise à jour de PC (Fetch 1) ;
• décodage de l’instruction (Decode) ;
• récupération des données (Fetch 2);
• exécution de l’instruction (Execute) ;
• écriture du résultat et modification des bits conditions (Write).
Chaque étape est gérée par le séquenceur et transformée en ordres internes. 25
Exemple: ADD r1,r2,r3

26
Le séquenceur

Cycle d’instructions
 Chaque instruction demande ainsi de nombreux ordres et transferts internes,
entièrement contrôlés par le séquenceur et rythmés par son horloge.
 Plus les instructions du processeur sont compliquées, plus elles nécessitent
d’étapes internes et plus le séquenceur est complexe.

27
Jeu d’instructions
 Le jeu d’instructions décrit l’ensemble des opérations élémentaires que le microprocesseur
pourra exécuter.
 Les instructions sont classées en 4 groupes :
 Transfert de données : pour charger ou sauver en mémoire, effectuer des transferts de
registre à registre, etc… .
 Opérations arithmétiques : addition, soustraction, division, multiplication
 Opérations logiques : ET, OU, NON, NAND, comparaison, test, etc…
 Contrôle de séquence : branchement, test, etc…

28
Codage d’instruction
 Une instruction est composée de deux champs :
 le code instruction, qu’indique au processeur quelle instruction réaliser
 le champ opérande qui contient la donnée, ou la référence à une donnée en mémoire
(son adresse).

29
Mode d’adressage
 Les opérandes sont spécifiées via un mode d’adressage: Permet d’indiquer où sont les
données:
 en mémoire,
 dans un registre,
 ou mises explicitement dans l’instruction.
 Les instructions utilisent un nombre variable de données.
 Toutes les données ne nécessitent pas le même nombre de bits.
=> Simplifier les instructions du processeur sous une forme fixe, souvent 32 bits

30
Mode d’adressage
 On distingue quatre modes d’adressage:
 Adressage immédiat: Préciser la donnée directement dans l’instruction sans avoir à la
stocker quelque part (mémoire ou registre).
Exemple : (ADD r1, r2, #3).
Inconvénient : la valeur doit être indépendante des calculs antérieurs,
=> c’est donc forcément une constante.
 Adressage par registre :
Pour utiliser un registre, il faut indiquer simplement son nom.

31
Mode d’adressage
 Adressage direct :
 Faire référence à une case mémoire directement dans l’instruction en donnant son
adresse.
Exemple : MOVE r1, 3afc.

Inconvénient de ce mode : il faut connaître l’adresse souhaitée lors de l’écriture du programme.


 Remplacer l’écriture littérale de l’adresse par une étiquette.
 Le programme d’assemblage assure la correspondance entre l’étiquette et l’adresse à
chaque exécution.

32
Mode d’adressage
 Adressage indirect par registre
 Au lieu d’utiliser directement une adresse mémoire, on peut indiquer où trouver cette
adresse, dans un registre.
 On note le mode d’adressage indirecte en mettant le registre entre parenthèse.
ADD r1, r2, (r3).
 Avantages :
 l’instruction nécessite moins de bits, car il n’y a qu’un numéro de registre à indique
 il est facile de changer cette adresse par une simple opération arithmétique sur le registre.

33
Mode d’adressage
 Adressage indirect par registre
 MOVE r3, (r2) : charge dans le registre r3 la valeur située en mémoire à
l’adresse se trouvant dans r2.

34
Mode d’adressage
 Adressage indirect avec déplacement
 On peut combiner le mode d’adressage indirect avec un décalage. C’est le mode indirect
avec déplacement. L’adresse de la donnée est la somme de l’adresse contenue dans un
registre (mode indirect) et d’un déplacement immédiat indiqué dans l’instruction.

MOVE r5,8(r2) met dans r5 la valeur dont l’adresse mémoire est obtenue en ajoutant 8 à
celle contenue dans r2.

35
Mode d’adressage
 Adressage indirect indexé
L’adressage indirect avec déplacement souffre du même défaut que l’adressage direct : la valeur
du déplacement doit être indiquée « en dur » dans l’instruction et ne peut pas être calculée
dynamiquement lors de l’exécution. Pour cela, il faudrait qu’elle soit dans un registre. C’est
exactement ce que permet l’adressage indirect indexé. L’adresse mémoire de la donnée est la
somme du contenu d’un registre de base (mode indirect) et d’un registre jouant le rôle d’un
déplacement : MOVE r7,(r2,r1)

36
Mode d’adressage
 EXERCICE :
Pour accéder à une donnée en mémoire, un processeur ne possède que le mode d’adressage
indirect : MOVE r1, (r2) qui récupère la donnée se trouvant à l’adresse mémoire indiquée dans r2
et la met dans r1. On souhaite simuler les autres modes d’adressage accédant à la mémoire. En
distinguant à chaque fois deux cas (instructions à deux ou trois données),

Ecrire les instructions correspondant aux exemples suivants utilisant d’autres modes d’adressage :

 Adressage indirect avec déplacement : MOVE r1, 8(r2). Il faut ajouter 8 à r2 pour pointer sur
la case mémoire correcte.

 Adressage indirect indexé : MOVE r1, (r2, r3). Il faut ajouter r3 à r2 pour pointer sur la case
mémoire correcte.

37
Mode d’adressage
 Adressage indirect avec déplacement : MOVE r1, 8(r2). Il faut ajouter 8 à r2 pour pointer
sur la case mémoire correcte.

Il faut ajouter 8 à r2 pour pointer sur la case mémoire correcte. Mais si l’on additionne
directement dans r2, il faut retrancher 8 pour retomber sur la valeur initiale (car la valeur de r2
n’est pas modifiée dans l’adressage indirect avec déplacement).

Si les instructions ont deux données, cela donne :


ADD r2,#8 ; modification de r2
MOVE r1,(r2)
SUB r2,#8 ; remise de r2 à sa valeur initiale
Si les instructions ont trois données, on peut prendre un autre registre inutilisé pour pointer en
mémoire :
ADD r3,r2,#8 ; r3 ← r2+8
MOVE r1,(r3) 38
Mode d’adressage
 Adressage indirect indexé :

 Comme pour l’adressage indirect avec déplacement, il ne faut pas modifier r2 et r3 (ou
remettre les valeurs initiales après l’accès mémoire).

Pour des instructions à deux données, on a :

ADD r2,r3 ; modification de r2

MOVE r1,(r2)

SUB r2,r3 ; remise de r2 à sa valeur initiale

Si trois données sont autorisées, on peut passer par un registre intermédiaire (inutilisé) :

ADD r4,r2,r3 ; r4 ← r2+r3

MOVE r1,(r4) 39

Mode d’adressage
Adressage indirect indexé avec déplacement :

 Pour des instructions à deux données, on a

MOVE r4,r2 ; r4 ← r2

ADD r4,r3 ; r4 ← (r2)+r3

ADD r4,#8 ; r4 ← (r2+r3)+8

MOVE r1,(r4)

Pour des instructions à trois données, On gagne une instruction avec trois données :

ADD r4,r2,r3 ; r4 ← r2+r3

ADD r4,r4,#8 ; r4 ← (r2+r3)+8

MOVE r1,(r4) 40
Amélioration des performances

Pour augmenter les performances d’un microprocesseur, on peut donc :

Augmenter la fréquence d’horloge


(limitation matérielle)

Améliorer l’organisation interne pour diminuer le CPU


(choix du jeu d’instruction et de l’architecture)

RISC ou CISC ?? Superscalaire, pipeline,


mémoire cache ??

Améliorer le compilateur
(diminution de IC ou du CPI)
41
Notion d’architecture RISC et CISC

 Actuellement l’architecture des microprocesseurs se composent de deux grandes


familles :
L’ architecture CISC (Complex Instruction Set Computer)
L’architecture RISC (Reduced Instruction Set Computer)

42
L’architecture CISC
 Pourquoi ?
 Avant les années 70, il existe que des machines CISC
 La mémoire travaille très lentement par rapport au processeur => soumettre au
microprocesseur des instructions complexes.
 Au lieu de coder une opération complexe par plusieurs instructions plus petites
(qui demanderaient autant d’accès mémoire très lent), une machine CISC ajoute
au jeu d’instructions du microprocesseur une instruction complexe qui se
chargerait de réaliser cette opération.
 Incorporer au niveau processeur des instructions plus proches de la structure
des langages évolués.
43
L’architecture CISC
 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)

44
L’architecture RISC
 Pourquoi ?
 Des études 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.

45
L’architecture RISC
 Comment ?
 RISC est une architecture dans laquelle les instructions sont en nombre réduit
(chargement, branchement, appel sous-programme).
 RISC => Simplifier le séquenceur => Accroitre la vitesse d’horloge et utiliser la
place libre pour augmenter le nombre de registres sur le processeur.
 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
46
RISC (Reduced Instruction Set Computer) contre CISC (Complex
Instruction Set Computer)

 La réduction du jeu d’instructions entraine un allongement des programmes (car


certaines instructions disponibles sur les processeurs CISC doivent être simulées
par plusieurs instructions successives sur les processeurs RISC),
 Le passage d’un processeur CISC à un RISC transfère la complexité du processeur
au compilateur
 Le ralentissement induit serait plus que compensé par l’accélération de la
performance du processeur.

47
RISC (Reduced Instruction Set Computer) contre CISC (Complex
Instruction Set Computer)

48
Amélioration des performances

• Notion de Mémoire cache


• La mémoire principale n’est pas capable de délivrer les
informations aussi rapidement que le microprocesseur est
capable de les traiter
• Tps accès mémoire >>> Tps cycle up
• Apparition d’un goulot d’étranglement pour les données

Solution : Disposer une mémoire très rapide entre la


mémoire principale et le microprocesseur

49
Amélioration des performances

 Notion de cache mémoire : fonctionnement

1
up

mémoire
Unité de Unité de cache
traitement commande

= succès de cache
50
Amélioration des performances

 Notion de cache mémoire : fonctionnement

1
up 2

mémoire
Unité de Unité de cache
traitement commande

3
4

= défaut de cache
51
Architectures évoluées

 Plusieurs techniques ont été introduites, visant à améliorer les performances et la


vitesse d’exécution des processeurs.
 progrès technologique autorisant la complication progressive des circuits.
 Deux techniques :
 Les opérations et les instructions spécialisées.
 La notion de pipeline.

52
Les opérations et les instructions spécialisées

 UAL flottante.
 Cette unité supporte des opérations mathématiques complexes.
 Racine carrée, fonctions trigonométriques et logarithmiques…
 Applications multimédias.
 Des instructions spécifiques à ces applications dans le jeu d’instruction du
processeur.
 Instructions mathématiques particulières et calcul vectoriel.
 SIMD (Single Instruction Multiple Data) un seul flot d’instructions et plusieurs
flots de données)
53
Traitement pipeline

 Chaque instruction est décomposée en plusieurs étapes (fetchI , décode, fetchII,


execute, …) .
 Chaque étape nécessite un circuit différent pour assurer son exécution.
 Chaque circuit travaille pendant une partie du temps d’exécution, mais reste inactifs
lorsque l’instruction n’est pas à l’étape concernée
 Traitement en pipeline.
 Le principe consiste à ne pas attendre la fin de l’exécution d’une instruction pour
lancer la suivante.
 c’est l’idée du travail à la chaîne. 54
Traitement pipeline

• Notion d’architecture Pipeline

recherche recherche
décodage décodage

exécution exécution

55
Traitement pipeline

• Notion d’architecture Superscalaire

56
Traitement pipeline

 Pipeline à 5 étapes
Le gain ne se fait pas directement sur la vitesse de traitement d’une instruction (elle

doit toujours passer par les cinq étapes du pipeline) mais sur le nombre
d’instructions par seconde qui sont exécutées.
le processeur peut traiter cinq fois plus d’instructions qu’un système non pipeliné

Circuits plus simples => horloge plus rapide

 On a intérêt à augmenter le nombre d’étapes.

57
Dépendance dans une pipeline
 Le pipeline fonctionne à plein rendement =>
 il faut décaler toutes les instructions simultanément d’une étape,

 ou autrement dit alimenter le pipeline continuellement (à chaque cycle) en

instructions.
 Celui-ci doit donc être conçu de sorte que tous les étapes durent le même

temps.
Ce n’est pas toujours le cas.

Les instructions successives dans le pipeline ne sont pas indépendantes.

On peut donc avoir un conflit si l’une d’entre elles a besoin d’une valeur calculée

par une autre.

58
Dépendance dans une pipeline

1. Move r0, #0
2. ADD r1, r2, r3
3. SUB r5, r1, r7
4. ADD r4, r5, r6
5. Move r8, #1

59
Dépendance dans une pipeline

 L’instruction 2 modifie le registre r1, utilisé (avec sa nouvelle valeur) par l’instruction 3.
 Celle-ci ne peut donc pas quitter l’étape de récupération des données (Fetch 2) avant que
r1 ne soit réécrit par l’instruction 2, c’est-à dire lorsqu’elle passe l’étape 5 (Write). Lorsque
le processeur modifie r1, il envoie en même temps la valeur à l’étape 3 pour l’instruction 3,
qui peut progresser au prochain top.
 L’instruction 3 est donc retardée d’un top d’horloge, induisant le retard sur tout le pipeline.
 Le même phénomène apparaît pour l’instruction 4, qui utilise r5, modifié par l’instruction 3.

60

Vous aimerez peut-être aussi