L`ordinateur.II

publicité
Introduction à l’Informatique pour les Sciences Humaines
IMM - Lettres - Université de Lausanne
Notes de cours
L'ordinateur.II
Brigitte Zellner Keller
• Architecture des processeurs
• Evolution des processeurs
• Programmes
Documentation complémentaire recommandée
http://www.scedu.umontreal.ca/sites/histoiredestec/histoire/tdmhiste.htm
http://www.howstuffworks.com/pc.htm
2
1. Le Processeur ou "Central Processing Unit" (CPU)
Composante essentielle de l'ordinateur qui exécute pas à pas un programme, calcule et
ordonne le déplacement des données d'une partie de l'ordinateur vers une autre.
CPU + mémoire centrale = Unité centrale
La CPU consiste en un circuit électronique qui peut accomplir en un ou plusieurs cycles
d’horloge des opérations élémentaires appelées "instructions".
=> chaque instruction n'accomplit qu'une petite portion d'un travail donné.
=> Une CPU est construite pour comprendre un lexique limité d'instructions différentes.
Typiquement, une CPU comprend plusieurs unités fonctionnelles qui collaborent ensemble
grâce à diverses connections électriques (BUS). Bien que variables d'une architecture à une
autre, une CPU comprend au moins
une unité de contrôle (ou commande)
et une unité arithmétique et logique (UAL).
http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Architecture/Cours/polyarch
Copyright © 2002Brigitte Zellner Keller
Lettres, Université de Lausanne
3
1. Architecture d’un processeur
Figure de Joelle Delacroix, Architecture des machines et systèmes informatiques
Les 4 phases suivantes représentent un cycle machine.
• Phase 1
Les instructions d'un programme sont stockées dans une mémoire qui se trouve
généralement à l'extérieur de la CPU. La première tâche de la CPU consiste donc à aller
chercher (fetch) puis lire la première instruction qui se trouve en mémoire. Pour cela,
l'unité de commande envoie une adresse et une commande en code binaire vers la
mémoire. Cette instruction est transférée via le Bus du processeur — système de
connection électrique reliant la mémoire à la CPU.
• Phase 2
L’Unité de contrôle (voir ci-après) reçoit l'instruction provenant du bus et elle commande
les autres composantes selon ces instructions. Après avoir décodé une instruction (traduit),
elle envoie ses ordres à l'unité arithmétique et logique pour générer les calculs nécéssaires.
• Phase 3
L’Unité arithmétique et logique (Arithmetic Logic Unit, ALU) exécute l’arithmétique et les
opérations logiques (négation, opérations ET, OU, OU exclusif).
L'exécution d'une instruction est décomposée en une série d'étapes correspondant aux
principales opérations nécessaires à l'exécution de l'instruction. Selon sa complexité, une
instruction requiert 3, 4 ou 5 cycles d’horloge pour s'exécuter.
• Phase 4
Le résultat est transféré en mémoire
Copyright © 2002Brigitte Zellner Keller
Lettres, Université de Lausanne
4
2. Composantes activées lors d'un cycle machine
• Registre CO (compteur ordinal) contenant l'adresse où est stockée la prochaine instruction
à chercher en mémoire.
• Registre RI (registre d'instruction) dans lequel le CPU transfert l'instruction suivante à
exécuter, à partir de la mémoire.
• Décodeur qui détermine quelle opération doit être effectuée.
• Horloge qui émet des impulsions régulières, synchronisant toutes les actions de l'unité
centrale. On parle de cycle ou fréquence d'horloge. Le standard actuel varie de 500 MHz à
3 GHz selon les appareils (Mhz: millions de cyles par seconde, GHz: milliards de Hz). Pour
des raisons techniques, l’horloge n’est pas directement placée sur le processeur. Un
oscillateur interne est synchronisé sur un signal d'horloge externe, souvent fourni par un
oscillateur à quartz. La cadence de l’oscillateur interne est un multiple de la cadence du bus
système (voir plus loin) : 2.3, 4, 10 selon les architectures.
• Séquenceur qui génère les signaux de commande. Cet automate distribue des signaux de
commande aux diverses unités participant à l'exécution d'une instruction.
• Registres: petites mémoires internes très rapides d'accès utilisées pour stocker
temporairement une donnée, une instruction ou une adresse. Chaque cellule mémoire est
généralement aussi large que le bus du processeur (la taille de cette cellule ou mot est
spécifique au processeur, soit typiquement 8, 16 ou 32 bits). Les registres servent de
tampon à la mémoire.
3. Explications supplémentaires
Mémoire cache (tampon)
Le principe de la mémoire cache est un procédé qui permet de réduire les délais d'attentes
car il s'appuie sur le principe de localité. Au lieu par exemple d'aller chercher une
instruction après une autre en RAM (où le temps d'accès est supérieur à un cycle
d'horloge), on préstocke ces informations dans des registres proches du processeur. Cette
astuce permet de réduire considérablement les temps de calcul. Les processeurs actuels
utilisent plusieurs niveaux de mémoire cache (voir section Mémoire) : L1 pour Level 1, L2
pour Level 2,etc.
Taille du mot
L'information étant codée en bit (binary digit), le processeur fonctionne par "paquets" de x
bits, qui sont des multiples d'octets. L'information est donc transmise simultanément sur "x
bits": la taille du mot du processeur. (Attention, la taille du mot dans le système
d’exploitation peut être différente de celle du processeur. Par exemple, dans Windows, la
taille du mot des deux octets. Lors de la conception des systèmes Windows, cette taille
corrspodait à celle des processeurs). Plus la taille d'un mot est importante, moins le
Copyright © 2002Brigitte Zellner Keller
Lettres, Université de Lausanne
5
processeur a besoin de décomposer l'information en unités plus petites, d'où un gain de
temps. Le standard actuel est de 64 ou 128 bits (soit 8 ou 16 octets).
Le lexique des instructions
La MMI (mémoire des micro instructions), est une mémoire morte, contenant toutes les
micro instructions nécessaires au processeur pour exécuter les instructions du langage
machine.
Liaison processeur-mémoire
Les informations échangées entre la mémoire et le processeur circulent sur des bus. Un bus
est un ensemble de fils conducteurs, utilisés pour transporter des signaux binaires.
Le bus d'adresse est un bus unidirectionnel: seul le processeur envoie des adresses.
Le bus de données est un bus bidirectionnel. Lors d'une lecture, c'est la mémoire
qui envoie un mot sur le bus; lors d'une écriture, c'est le processeur qui envoie la donnée.
Les interruptions
Les interruptions permettent au matériel de communiquer avec le processeur. Les
interruptions sont surtout utilisées pour la gestion des périphériques de l'ordinateur (ex :
frappe d'un caractère au clavier).
Une interruption est signalée au processeur par un signal éléctrique sur une borne spéciale.
Lors de la réception de ce signal, le processeur ``traite'' l'interruption généralement dès la
fin de l'instruction qu'il était en train d'exécuter.
2. Evolution des processeurs
1. Processeurs CISC - RISC
Chaque type de processeur possède son jeu d'instructions. Par exemple les processeurs
Motorola 68k (incorporés sur les Macinstoshs) utilisaient un jeu d'instructions complexes
(processeurs CISC) différent du jeu d'instructions de la génération plus récente des
processeurs PowerPC (qui utilisent un jeu d'instructions réduit, RISC).
L'architecture CISC
L'architecture “pure” CISC (“Complex Instruction Set Computer”) offre un jeu
d'instructions complexes. L‘architecture CISC était utilisé par tous les processeurs de type
486, c'est-à-dire les processeurs fabriqués par Intel, AMD, Motorola 68k, etc.
Ces processeurs pouvaient traiter directement un grand nombre d'instructions
complexes mais souvent peu fréquentes. En effet, des études statistiques ont montré qu’en
moyenne, 25% des instructions CISC étaient utilisées 95% du temps. Compte tenu du coût
du silicium, la question se posait de l’efficience de cette architecture. Les opérations les
plus courantes étant: les opérations d'échange entre l'unité centrale et la mémoire, ainsi que
Copyright © 2002Brigitte Zellner Keller
Lettres, Université de Lausanne
6
les appels à des sous-programmes. Un autre problème était que la taille des instructions et
leur temps de décodage était variables. Si initialement, les temps de décodage d'une
instruction complexe et d'exécution du code étaient occultés derrière les temps d'accès
longs à la mémoire, par la suite, ce problème s’est montré car les délais de latence au
niveau des mémoires ont fondu. Le goulot d'étranglement s'est alors déplacé dans le
processeur, au niveau des unités de décodage et d'exécution.
L'architecture RISC
Ce concept est né après s'être aperçu que seule une petite partie du jeu d'instructions était
vraiment utilisée pour l'exécution des programmes. L'architecture RISC (“Reduced
Instruction Set Computer“) offre donc un jeu d'instructions réduit (environ une centaine).
Cette architecture n'est pas programmée pour exécuter des fonctions complexes peu
fréquentes. Par contre, elle est optimisée pour exécuter rapidement plusieurs instructions
simples et fréquentes. Technologiquement, cette architecture est plus simple donc moins
onéreuse.
Principes:
1. Une instruction (ou presque) par cycle, imposant que le jeu d'instruction soit limité.
2. Un format fixe pour les instructions (par exemple 32 bit), d'où un décodage simplifié.
3. Les seules instructions d'accès à la mémoire autorisées sont LOAD et STORE, ce qui
signifie une diminution des accès plus lents en mémoire et une utilisation accrue des
registres (accès plus rapides).
Actuellement, les processeurs de type RISC sont plus performants que les CISC bien que
ces derniers ne soient plus des CISC “purs”. On trouve plus souvent des hybrides
incorporant différentes technologies: le pipeline (voir plus loin), le mariage du CISC et
RISC comme dans le pentium pro (c'est un processeur RISC qui “traduit” les instructions
CISC).
On parle enfin d'architecture superscalaire (voir plus loin) quand un processeur
RISC est capable d'exécuter plusieurs instructions simultanément en un seul cycle
d'horloge.
2. Parallélisme
La différence entre la cadence du processeur et l’horloge système (sur la carte) ne cesse de
s'accroître. Afin d'exploiter au mieux ces nouvelles données technologiques, plusieurs
formes de parallélismes d'exécution peuvent être mises en oeuvre sur le circuit intégré luimême avec un seul processeur: parallélisme pipeline, parallélisme superscalaire et
parallélisme multiprocessus.
Multitâches
Le principe du Multitâches consiste dans la possibilité d’effectuer plusieurs opérations (ex:
transferts d'instructions et de données) en parallèle. Le travail en multitâches a pu se
développer grâce à un grand nombre d'innovations technologiques. qui permettent de
“simuler” le traitement parallèle, particulièrement au niveau du processeur.
Copyright © 2002Brigitte Zellner Keller
Lettres, Université de Lausanne
7
Pipeline
Principe général
Le principe du "pipeline" est une forme de parallélisme vertical qui permet d’augmenter le
nombre d'opérations effectuées par unité de temps. Au lieu d'attendre qu'une tâche soit
complètement achevée avant de commencer la suivante, on subdivise cette tâche en soustâches, ce qui permet d'activer une seconde tâche plus tôt. On augmente ainsi le nombre de
tâches exécutées par unité de temps sans changer le temps de latence, c’est à dire le temps
total requis pour l'exécution d'une tâche entière.
Dans l'exemple ci-après, une solution séquentielle stricte demande 9 périodes de temps
pour traiter complètement trois tâches.
tâche 1
phase 1
tâche 1
phase 2
tâche 1
phase 3
tâche 2
phase 1
temps 1
temps 2
temps 3
temps 4
tâche 2
phase 2
temps 5
tâche 2
phase 3
temps 6
tâche 3
phase 1
tâche 3
phase 2
tâche 3
phase 3
temps 7
temps 8
temps 9
temps 7
temps 8
temps 9
Une solution en pipeline ne demande que 5 périodes de temps.
tâche 1
phase 1
temps 1
tâche 1
phase 2
tâche 2
phase 1
temps 2
tâche 1
phase 3
tâche 2
phase 2
tâche 3
phase 1
tâche 2
phase 3
tâche 3
phase 2
tâche 3
phase 3
temps 3
temps 4
temps 5
temps 6
Au niveau du processeur, il est possible d'obtenir un certain recouvrement dans l'exécution
d'instructions successives. Pour cela, chaque instruction est subdivisée en différentes
étapes: chercher, décoder, exécuter, accéder à la mémoire, écrire. Ces sous-tâches
impliquent différentes parties du processeur. L’application du principe du pipeline est donc
possible et permet d’optimiser l’utilisation du processeur. L'exécution d'une nouvelle
instruction s'amorce à chaque cycle. Les premières machines commerciales mettant en
oeuvre ce type d'architecture apparurent avec l'IBM 360/91 en 1964.
Les principaux problèmes rencontrés dans les architectures pipeline sont liés
- aux accès à la mémoire (ex: accès au même bus)
- aux conflits de dépendance entre instructions (ex: lorsque le contenu d'un même registre
est requis par deux instructions successives).
- aux branchements et au traitement des interruptions et exceptions (il faut finir le
traitement avant d’exécuter le branchement, voire “vider” le pipeline). Il existe aussi des
architectures à exécution spéculative, qui permettent, moyennant des méthodes de
prédiction, d’éviter de laisser le pipeline inutilisé.
Tous ces problèmes peuvent être résolus soit matériellement (techniques basées sur un
marquage de registres), soit par logiciel (en modifiant par exemple l’ordre des instructions,
en anticipant les branchements).
Copyright © 2002Brigitte Zellner Keller
Lettres, Université de Lausanne
8
Notons que le principe du pipeline est aussi utilisé au niveau des systèmes d’exploitation
(Prochain sujet, voir planification des cours).
Superscalaire
L’architecture superscalaire est une forme de parallélisme horizontal, c’est à dire entre
instructions. Une machine (CISC ou RISC) à architecture superscalaire peut amorcer
l'exécution de plusieurs instructions à chaque cycle d'horloge, si elles n’ont pas de
dépendances entre elles, via l'utilisation de plusieurs unités fonctionnelles (unités pour les
opérations entières, unités pour les opérations flottantes, etc.). Ainsi les instructions les
plus communes (arithmétiques, chargement, rangement, branchement) peuvent être
décodées et exécutés simultanément et indépendamment dans différents pipelines. Les
instructions peuvent ainsi s'exécuter en parallèle et terminer leur exécution dans le
désordre.
Multiflots (“multithread”)
Les programmes sont constitués de flux d'instructions. Ces flux d'instructions sont
communément appelés des “threads”. Un “thread” est une partie d'un programme pouvant
être exécutée indépendamment des autres aspects du programme.
Dans une architecture multhread, le processeur fractionne son temps de calcul et le
distribue à plusieurs threads. Cette technique simule à un niveau global le parallélisme. Il
existe diverses architectures multithread, souvent complexes.
Hyperflots (“Hyperthreading”)
La technologie HyperThreading a pour principe de base de permettre à un processeur d'être
considéré comme deux processeurs par le système d'exploitation, ce qui parfois optimise
son efficacité lorsqu'il n'est pas utilisé dans son intégralité par un thread.
Conclusion nécéssairement provisoire
Sur les ordinateurs monoprocesseurs, les architectures actuelles proposent souvent des
combinaisons de ces différentes optimisations pour accélérer les traitements. Par exemple,
on peut trouver un parallélisme horizontal où plusieurs pipelines exécutent des flots
d’instructions différents, un parallélisme vertical où chaque flot d’instructions n’est présent
que dans un étage du pipeline, ou encore un même pipeline partagé à tous les étages par
plusieurs flots d’instructions.
Un des problèmes posés par ces optimisations d’architectures est que suite à une plus
grande vitesse d’exécution des instructions, il s’ensuit une surcharge sur le bus mémoire.
Ceci explique la nécessité de disposer de plusieurs niveaux de mémoire cache.
Les premières stations de travail multiprocesseurs ont fait leur apparition sur le marché.
L’utilisation de plusieurs processeurs augmentent les possibilités du parallélisme, souvent
au prix d’une complexité accrue de l’architecture. Le cours 2002-2003 ne traitera pas cette
question.
Copyright © 2002Brigitte Zellner Keller
Lettres, Université de Lausanne
9
Discussion sur les performances du Pentium 4 et du biprocesseur PowerMac G4.
Pas de notes de cours disponibles. Prière de prendre des notes!
3. Programmes
(ou ce qui alimente le processeur...)
Les programmes sont conçus et écrits le plus souvent dans un langage de programmation
de haut niveau: C, C++, Java, etc. Ces programmes doivent ensuite être "traduits", c'est à
dire compilés en langage machine pour pouvoir être exécuter.
Une fois traduit en langage machine, un programme apparaît comme une suite
d'instructions. Le processeur de l'ordinateur peut alors exécuter de manière séquentielle les
instructions du programme: c’est à dire des séquences de bits.
Un processeur ne comprend qu’un lexique limité d’instructions. Chaque instruction
machine doit fournir au processeur toutes les informations nécéssaires pour déclencher une
opération élémentaire. L’instruction machine doit donc contenir
un code opération (type d’action demandée)
et une ou plusieurs adresses (ces adresses peuvent être: l’adresse de l’opérande1,
l’adresse où envoyer le résultat, l’adresse où chercher l’instruction suivante,...).
Par conséquent, une instruction machine comportera un champ code opération et un /des
champs adresse.
On distingue 6 types d’instructions que l’on retrouve sur toutes les machines:
Les transferts de données (load, move, store,...)
Les opérations arithmétiques (+, -, /, *)
Les opérations logiques (ou, and,...)
Les contrôles de séquence
Les entrées/sorties
Les manipulations diverses (décalages, incrémentations,...)
1
Opérande: élément sur lequel on effectue une opération. Opérateur: Symbole indiquant la nature d'une
opération (logique ou mathématique).
Copyright © 2002Brigitte Zellner Keller
Lettres, Université de Lausanne
10
Lexique
Cherchez les définitions à partir des notes de cours et du glossaire remis en début d’année
Le processeur
L’UAL
L’UC
Les registres
L'horloge
La carte mère
Pipeline
Multithread
Superscalaire
Rappel :
1 Kilo = 1000,
1 Méga = 1 million,
1 Giga = 1 milliard,
1 Téra = 1000 milliards
1 micron = 1 micromètre = 1/1000 mm,
Exercice
Chercher sur la Toile les caractériques des processeurs actuels: Pentium 4, AMD,
biprocesseurs Power PC G4: fréquence du processeur, largeur du mot, largeur et fréquence
du bus interne, nombre et taille des caches,
Copyright © 2002Brigitte Zellner Keller
Lettres, Université de Lausanne
Téléchargement