Format PowerPoint

publicité
IFT-17584
Programmation système
@Pierre Marchand et Martin Dubois, 2002
1
Chargé de cours
Martin Dubois
• Expériences
• Coordonnées

•
Courriel: [email protected]
Disponibilité



Par courriel en tout temps
Sur rendez-vous en tout temps
Sans rendez-vous – Voir le guide d’étude hebdomadaire
@Pierre Marchand et Martin Dubois, 2002
2
Professeur responsable
Pierre Marchand
 Coordonnées :
• Bureau : PLT-3958
• Téléphone : 656-2131, #7409
• Fax : 656-2324
• Courriel : [email protected]
@Pierre Marchand et Martin Dubois, 2002
3
Site WEB du cours
http://www.ift.ulaval.ca/~marchand/ift17584/
Ce site contient
• Documentation
• Transparents
• Guides d’étude
• Énoncés des travaux
• Liens intéressants
@Pierre Marchand et Martin Dubois, 2002
4
Préalables
 IFT-17583 : Structure interne des ordinateurs ou
 IFT-19638 : Organisation matérielle et logicielle de l’ordinateur
et
 IFT-17582 : Algorithmique et programmation ou
 IFT-15750 : Éléments d’algorithmique ou
 IFT-21027 : Introduction à la programmation scientifique
@Pierre Marchand et Martin Dubois, 2002
5
Objectifs du cours
Nombre de crédits : 3
Objectif général
- Acquérir une meilleure connaissance de la structure interne d’un
ordinateur et de son système d’exploitation.
@Pierre Marchand et Martin Dubois, 2002
6
Lien avec d’autres cours
Structure interne des ordinateurs
• Représentation interne des nombres et des caractères
• Microprocesseurs
• Interfaces de communication
• Langage machine
Structure interne des ordinateurs
@Pierre Marchand et Martin Dubois, 2002
7
Lien avec d’autres cours
Modes d’adressage
• Pointeurs dans les langages de haut niveau
Algorithmique et programmation
Et
Structures de données
@Pierre Marchand et Martin Dubois, 2002
8
Lien avec d’autres cours
Passage de paramètres
• Interface avec les langages de haut niveau
• Génération de code par les compilateurs et les
interprètes
Algorithmique et programmation,
Structures de données
et
Techniques de compilation et d’interprétation
@Pierre Marchand et Martin Dubois, 2002
9
Lien avec d’autres cours
Interruptions
• Processus concurrents dans les systèmes
d’exploitation
• contrôle des entrées/sorties
Systèmes d’exploitation I
Et
Systèmes temps réel I
@Pierre Marchand et Martin Dubois, 2002
10
Évaluation des apprentissages
2 examens partiels
• Le premier, le 4 novembre 2002, comptant pour 30% de la note
finale,
• le second, le 16 décembre 2002, comptant pour 40% de la note
finale.
Ces examens sont à livre ouvert.
Pour réussir le cours, en plus d’obtenir un minimum de 50 %
comme note finale vous devez aussi obtenir un minimum de 50 %
sur le total des deux examens.
3 travaux
comptant chacun pour 10% de la note finale. Les dates et heures
de remises sont:
• 8 h 25 le mardi 15 octobre 2002
• 8 h 25 le lundi 4 novembre 2002
• 8 h 25 le lundi 16 décembre 2002
@Pierre Marchand et Martin Dubois, 2002
11
Qualité du français
Pour tous les travaux et examens,
1 % de la note totale pourra être enlevé par faute
et ce jusqu’à concurrence de 10 % de la note totale.
@Pierre Marchand et Martin Dubois, 2002
12
Plagiat
•
•
•
•
Tolérance Zéro
Tout cas sera rapporté à la direction
Les travaux se font en équipe de DEUX
Les examens se font en équipe de UN
@Pierre Marchand et Martin Dubois, 2002
13
Exercices
But
• Vous faire pratiquer rapidement les éléments abordés
• Éveiller votre curiosité face aux éléments qui seront
bientôt abordés
• Vous préparer aux travaux pratiques
• Vous préparer aux examens
Est-ce que ça compte ?
@Pierre Marchand et Martin Dubois, 2002
14
Documentation obligatoire
Manuels disponibles sur le site Web du cours en format pdf :
1. Intel Architecture Software Developer’s Manual, Volume 1
2. Résumé des instructions du Pentium III
ou Intel architecture Software Developer ’s Manual, Volume 2
3. Les présentes acétates disponibles sur le site Web du cours
en format pdf.
@Pierre Marchand et Martin Dubois, 2002
15
Pourquoi l’assembleur ?
Raisons pédagogiques
L’apprentissage et l’utilisation de l’assembleur permet de
mieux comprendre plusieurs concepts de base de
l’informatique.
 les langages de haut niveau:
• Variables globales
• Utilisation de la pile
• Variables locales
• Allocation dynamique
• Passage de paramètres
 Les compilateurs et éditeurs de liens
 La structure interne des processeurs
 Les calcules en virgule flottante
 Le déroulement des interruptions
@Pierre Marchand et Martin Dubois, 2002
16
Pourquoi l’assembleur ?
Raisons pratiques
 Pour obtenir des portions de programme plus
• Rapides
• Compactes
• Adapté au matériel utilisé
 Pour mieux contrôler le processeur lui même
• Mémoire virtuelle
• Configuration de la mémoire cache
 Pour mieux accéder aux périphériques
 Pour réaliser des compilateurs
 Pour réaliser les parties sensibles des systèmes d’exploitations
@Pierre Marchand et Martin Dubois, 2002
17
Pourquoi l’assembleur ?
Raisons personnelles
 Parce que c’est amusant !!!
@Pierre Marchand et Martin Dubois, 2002
18
Inconvénients de l’assembleur
 Plus long à programmer que les langages de haut niveau
 Pas de vérification de types
 Pas de structures de contrôle (if, while, etc.)
 Dépend du processeur
 Empêche de profiter des avantages et avancements des
processeurs des compilateurs et des autres outils de
développement
@Pierre Marchand et Martin Dubois, 2002
19
Machine de von Neumann
Processeur 8 bits
16
8
PC
R1
R2
R3
R4
R5
Acc1
Acc2
BUS D'ADRESSES
Tampon
BUS DE DONNƒES
Tampon
CCR
Dˇ codeur
Microprogramme
BUS DE CONTRļ LE
Tampon
IR
L0
Verrou
L1
F0
F
n
S0
S1
@Pierre Marchand et Martin Dubois, 2002
Verrou
ALU
Dˇ caleur
20
Machine de von Neumann
Exécution séquentielle des instructions en 5 étapes
 Chargement (fetch) de l’instruction
 Décodage de l’instruction
 Chargement des opérandes s’il y a lieu
 Exécution
 Écriture du résultat
Même avec une horloge de 1 GHz, un tel processeur serait plus
lent que les processeurs d’aujourd’hui.
Pourquoi ?
@Pierre Marchand et Martin Dubois, 2002
21
Limites de la machine de von
Neumann
 La largeur des registres (8 bits).
 La largeur du bus d’adresses (16 bits -> 64 Ko max de RAM).
 Absence d’unité de calcul en virgule flottante
 Absence d’unité de mémoire virtuelle
 Le nombre important d’étapes d’exécution par instruction
@Pierre Marchand et Martin Dubois, 2002
22
Comment les processeurs actuelle
atteignent-ils de telles performances ?
1. Augmenter la vitesse de l’horloge.
Ceci implique généralement la réduction de la géométrie sur
la puce pour minimiser les délais de propagation et la
consommation de puissance. La technologie en est
aujourd’hui à ~ 0,13 microns (µm). Les vitesses d’horloge
atteignent présentement plus de 1 GHz (2 GHz pour le
Pentium 4).
• La vitesse d’horloge à un impact important sur l’utilisation
du bus externe
• La durée d’un cycle d’horloge est de l’ordre d’un ns
• Les temps d’accès au mémoires est de l’ordre de quelques
dizaines de ns
• L’utilisation de mémoire cache devient rapidement
nécessaire
@Pierre Marchand et Martin Dubois, 2002
23
Amélioration de la performance
2. Augmenter la largeur du bus
• Les processeurs modernes ont des bus de données de
plus en plus larges, ce qui augmente la quantité d’informations (données et instructions) lues lors de chaque
accès à la mémoire.
3. Exécuter les différentes instructions de façon combinatoire
plutôt que séquentielle.
• Multiplicateurs combinatoires, décaleurs à barillet, retenue
anticipée.
• Viser à ce que la plupart des instructions s’exécutent en 1
cycle d’horloge.
@Pierre Marchand et Martin Dubois, 2002
24
Amélioration de la performance
4. Introduire du parallélisme
• Pipeline.
• Plusieurs unités d’exécution travaillant simultanément:
Processeurs super scalaires (plus d’une instruction par
cycle d’horloge).
• Prédiction de branchements pour assurer l’efficacité du
pipeline
5. Simplification du décodage des instructions
• Instruction de longueur fixe
• Réduction du jeu d’instruction
• Micro-code
• Réduction du nombre de mode d’adressage
@Pierre Marchand et Martin Dubois, 2002
25
Amélioration de la performance
6. Transférer une partie de la complexité au compilateur
• Architecture Load / Store.
@Pierre Marchand et Martin Dubois, 2002
26
Architecture RISC
Les différent moyens que nous venons de voir pour
améliorer la performance forment la base de
l’architecture RISC (Reduced Instruction Set
Computer). Cependant, la technologie RISC n’a que
peu à voir avec le jeu d’instructions.
La technologie RISC voulait compétitionner les
architectures des années 80 dites CISC (Complex
Instruction Set Computer) dans lesquelles certaines
instructions complexes étaient plus lentes que les
instructions simples qu’elles remplaçaient.
@Pierre Marchand et Martin Dubois, 2002
27
RISC vs CISC
Format des instructions Intel (CISC)
mov
ax, sVar1
add
sVar2, ax
• Instruction à 1 ou 2 adresses (registre ou mémoire)
• Non orthogonal
Format des Instructions RISC
ld
r0, sVar1
ld
r1, sVar2
add
r2, r0, r1
; r2 = r0 + r1
st
sVar2, r2
• Instruction à 3 adresses (registre)
• Orthognalité
@Pierre Marchand et Martin Dubois, 2002
28
Ressemblances RISC et CISC
Les processeurs CISC actuels comme le Pentium 4 ont
adopté plusieurs des principes de l’architecture RISC :
pipeline, cache interne, unités d’exécution multiples.
Dans le Pentium 4, Intel va même jusqu’à traduire les
instructions CISC de l’architecture IA-32 en 2-3
instructions RISC qui sont ensuite exécutées.
@Pierre Marchand et Martin Dubois, 2002
29
Le Pentium 4
@Pierre Marchand et Martin Dubois, 2002
30
Le début de la famille x86
 L’histoire de la famille 80x86 d’Intel commence dans les
années 70 avec le 8080, un processeur de 8 bits avec un bus
d’adresses de 16 bits, qui pouvait adresser un total de 64 Ko.
 Vers 1980, le 8086 et le 8088 font leur apparition, ce dernier
avec le premier PC d’IBM. Ce sont des processeurs de 16 bits
avec un bus d’adresses de 20 bits, qui avaient une capacité
d’adressage de 1 Mo. Le 8088 diffère du 8086 par la largeur
du bus de données externe qui est de 8 bits.
@Pierre Marchand et Martin Dubois, 2002
31
Une décision aux lourdes
conséquences
 Toutefois, même si le bus d’adresses était de 20 bits, les
registres internes d’adresses étaient toujours de 16 bits pour
assurer la compatibilité avec le 8080. Comment donc accéder
au reste de la mémoire?
 Toute la complexité des processeurs Intel vient de la solution
adoptée à cette époque pour régler ce problème.
@Pierre Marchand et Martin Dubois, 2002
32
Adresses et segments
• On décida que l’adresse serait constituée des 16 bits des
registres internes ajoutée à 16 fois le contenu d ’un des quatre
registres appelés registres de segment.
Segment
+
0000
Offset 16 bits
Adresse 20 bits
Ces quatre registres étaient CS (Code Segment), DS (Data
Segment), SS (Stack Segment) et ES (Extra Segment).
@Pierre Marchand et Martin Dubois, 2002
33
Les segments
 On remarque que chaque segment a une taille de 64 Ko
(offset 16 bits), et que la distance entre chaque segment peut
aller de 16 octets à 64 Ko.
 La capacité totale d ’adressage est :
FFFF0 + FFFF = 10FFEF,
qui dépasse légèrement 1 Mo (FFFFF).
 On remarque aussi que les segments peuvent se chevaucher.
@Pierre Marchand et Martin Dubois, 2002
34
L’arrivé du 80286
 Le 80286 fait son apparition quelques années plus tard avec
un bus d’adresses de 24 bits (capacité de 16 Mo). C’est là que
les choses se compliquent.
 Jusqu’alors, les processeurs fonctionnaient en ce qu’Intel
appelle le « mode réel ». Les systèmes d’exploitation utilisés
avec ces processeurs étaient mono-tâches et mono-usagers.
Les registres de segment contenaient de vraies adresses, et
l’utilisateur pouvait accéder sans limite à toutes les ressources du système : les périphériques, les interruptions, etc.
 Toutefois, les registres de segment demeuraient de 16 bits.
Comment donc accéder aux 16 Mo que permettait le bus
d’adresses du 80286?
@Pierre Marchand et Martin Dubois, 2002
35
Historique
 Pour permettre l’avènement de systèmes d ’exploitation plus
performants et une plus grande capacité de mémoire, Intel
introduisit avec le 80286 le « mode protégé ».
 Mais comme la plupart des applications roulant sous MS-DOS,
qui dominait le marché, étaient incompatibles avec le mode
protégé, on continua pendant des années à fonctionner en
mode réel avec une capacité de mémoire de 1 Mo.
 Windows 95 / 98 / Me souffre toujours de cette limitation.
 Le 386 connu en partie le même sort.
@Pierre Marchand et Martin Dubois, 2002
36
Historique
 Le 80286 fut donc longtemps considéré comme un 8086
rapide parce que personne ne savait comment utiliser le mode
protégé. Pourtant, ce processeur offrait la mémoire virtuelle,
des droits d’accès pour la sécurité, des niveaux de privilège
d’exécution, etc.
 Pendant ce temps, Motorola mettait en marché la famille
68000, qui offrait des registres de 32 bits et, à partir de 1985
avec le 68020, une capacité d ’adressage de 4 Go.
@Pierre Marchand et Martin Dubois, 2002
37
Historique
 En 1987, Intel met au point le 80386, puis le 80486, ensuite, le
Pentium, le Pentium II, le Pentium III et finalement, en 2001, le
Pentium 4.
 Les ordinateurs de nos laboratoires sont munis de Pentium IV.
Ils fonctionnent tous sous Windows 2000 et Linux.
@Pierre Marchand et Martin Dubois, 2002
38
Le Pentium
Le Pentium est un processeur CISC :
 Nombre très élevé d’instructions
 La plupart des instructions peuvent accéder à la mémoire
 Instructions de longueur très variable (8 à 108 bits)
 Faible nombre de registres (4 registres généraux)
 On ne vise pas l’exécution de chaque instruction en 1 cycle
Il adopte cependant plusieurs des principes de la technologie RISC:
 Pipeline
 Multiples unités d’exécution
 Caches internes
@Pierre Marchand et Martin Dubois, 2002
39
La famille Pentium
Processeurs avec l’architecture IA-32





Pentium et Pentium MMX
Pentium Pro
Pentium II
Pentium III
Pentium 4
Description
Processeur Horloge
Cache
Procédé
Transistors
Pentium
200
8 Ko + 8 Ko
0,35 µ
3,3 M
Pentium MMX
233
8 Ko + 8 Ko
0,35 µ
4,5 M
Pentium Pro
200
8 Ko + 8 Ko
0,35 µ
5,5 M
Pentium II
450
16 Ko + 16 Ko
0,25 µ
7,5 M
Pentium III
1000
16 Ko + 16 Ko
Pentium 4
2500
@Pierre Marchand et Martin Dubois, 2002
0,18-0,25 µ
12 Ko + 8 Ko + 256 Ko 0,13 à 0,18µ
µ
28 M
42 M
40
La famille x86 en graphique
@Pierre Marchand et Martin Dubois, 2002
41
Le Pentium 4 par rapport aux autres
Pentium
Comparaison du Pentium 4 avec les autres membres de la famille
Pentium
Processeur
Pentium MMX
Horloge
200
SPECint95
6.41
SPECfp95
4.66
Pentium Pro
200
8.2
6.0
Pentium III
733
35.7
28.1
Pentium 4
2500
~96
~110
De nouveaux benchmarks appelés SPECint2000 et SPECfp2000 sont
maintenant utilisés.
@Pierre Marchand et Martin Dubois, 2002
42
Les nouveautés du Pentium 4
Qu’est-ce qui différentie le Pentium 4 de ses prédécesseurs ?
• Les ALU fonctionnent à 2 fois la fréquence de l’horloge, donc les
opérations de base sur des entiers s’exécutent en 1/2 cycle
d’horloge.
• Un pipeline de 20 étages.
• Nouveaux caches de niveau 1 :
 Cache de micro-ops de 12 Ko
 Cache de données de 8 Ko avec latence de 2 cycles
• Cache de niveau 2 de 256 Ko sur la puce même, avec une bande
passante de 45 Go/s
@Pierre Marchand et Martin Dubois, 2002
43
Les nouveautés du Pentium 4
Qu’est-ce qui différentie le Pentium 4 de ses prédécesseurs ?
• Extensions SIMD 2.
 144 instructions de plus que le Pentium III
 Opérations arithmétiques SIMD sur des entiers
 Opérations SIMD de virgule flottante de double précision.
 Opérations de gestion des caches et de la mémoire.
• Bus système de 400 Mhz
@Pierre Marchand et Martin Dubois, 2002
44
L’architecture du Pentium 4
@Pierre Marchand et Martin Dubois, 2002
45
Le « front end »
Le « front end » fournit les instructions dans l’ordre du
programme au noyau d’exécution hors d’ordre. Il charge et
décode les instructions IA-32 et les traduit en opérations simples
appelées micro-ops. Ses principales fonctions sont :
 Pré charger les instructions IA-32 qui sont susceptibles d’être
exécutées.
 Charger des instructions qui n’ont pas encore été préchargées.
 Décoder les instructions IA-32 en micro-ops.
 Générer le microcode pour des instructions complexes.
 Fournir des instructions décodées à partir du cache
d’exécution.
 Prédire les branchements.
@Pierre Marchand et Martin Dubois, 2002
46
Le noyau d’exécution
Le noyau d’exécution hors d’ordre (Out-of-order Execution Core)
peut exécuter les instructions dans un ordre différent de celui du
programme. Si une micro-op est retardée parce qu’elle attend
des données ou une ressource qui n’est pas disponible, d’autres
micro-ops qui la suivent dans le programme peuvent être
exécutées en attendant.
Il peut exécuter jusqu’à 6 micro-ops par cycle.
@Pierre Marchand et Martin Dubois, 2002
47
Les unité de calcules
@Pierre Marchand et Martin Dubois, 2002
48
L’unité de retrait
L’unité de retrait (Retirement unit) reçoit les résultats des microops du noyau d’exécution et les traite conformément à l’ordre du
programme original.
Quand une micro-op a terminé et écrit son résultat dans la
destination, elle est retirée. 3 micro-ops peuvent être retirées par
cycle.
Le tampon de ré ordonnancement (ROB) est l’unité qui
enregistre les micro-ops complétées, met à jour l’état
architectural dans l’ordre et gère l’ordonnancement des
exceptions.
L’unité de retrait suit les branchements et envoie de l’information
mise à jour sur les adresses cibles aux BTB (Branch Target
Buffers) pour mettre à jour l’historique des branchements. Ainsi,
les micro-ops qui ne sont plus utiles peuvent être purgées du
cache et de nouveaux chemins de branchement peuvent être
chargés.
@Pierre Marchand et Martin Dubois, 2002
49
Les registres d’entiers
31
7
15
AH
BH
CH
DH
EAX AX
AL
BL
CL
DL
EBX BX
ECX CX
SI
EDX DX
ESI
DI
EDI
BP
SP
EBP
ESP
Registres de Segment
15
0
Registres généraux
Source index
Destination index
Base pointer
Stack pointer
Registres fantômes
0
Code descriptor
Dat a descriptor
St ack descriptor
Ext ra descriptor
F descriptor
G descriptor
CS
DS
SS
ES
FS
GS
31 Registres d'état et de contrôle 0
FLAGS
EFLAGS
0
31
IP
@Pierre Marchand et Martin Dubois, 2002
EIP
50
Les registre de virgule flottante
Signe
79 78
R0
64 63
Registres de données
Exposant
0
Mantisse
R1
R2
R3
R4
R5
R6
R7
15
0
Registre de
contrôle
Registre
d'état
Registre
Étiquette
@Pierre Marchand et Martin Dubois, 2002
47
0
Pointeur d'instruction de FPU
Pointeur d'opérande de FPU
10
0
Opcode
51
Les registre de virgule flottante
Registres de données du FPU
79
0
0
1
2
3
4
ST(0)
5
Direction
d'empilement 6
ST(1)
Sommet
ST(2)
7
@Pierre Marchand et Martin Dubois, 2002
52
Les registres MMX
63
0
MM0
MM1
MM2
MM3
MM4
MM5
MM6
MM7
Ces registres sont disponibles dans les processeurs Pentium
MMX, Pentium II, Pentium III et Pentium 4.
Attention : Ils sont physiquement les mêmes que les registres de
virgule flottante.
@Pierre Marchand et Martin Dubois, 2002
53
Les registre SIMD
127
0
XMM0
XMM1
XMM2
XMM3
XMM4
XMM5
XMM6
XMM7
Ces registres ne sont disponibles que dans le Pentium III et le
Pentium 4.
@Pierre Marchand et Martin Dubois, 2002
54
Le registre EFLAGS
0 0 0 0 0 0 0 0 0 0 0
CF = Carry Flag
PF = Parity Flag
AF = Auxiliary Carry Flag
ZF = Zero Flag
SF = Sign Flag
TF = Trap Flag
IF = Interrupt Enable Flag
DF = Direction Flag
OF = Overflow Flag
IOPL = I/O Privilege Level
@Pierre Marchand et Martin Dubois, 2002
0
0
1
NT = Nested Task Flag
RF = Resume Flag
VM = Virtual 386 Mode
AC = Alignment Check
VIF = Virtual Interrupt Flag
VIP = Virtual Interrupt Pending
ID = Identification Flag
55
Le registres de mémoire virtuelle
CR0
1615
31
PCN
G DW
31
@Pierre Marchand et Martin Dubois, 2002
A
M
8 7
W
P
CR1
16 15
0
N E T E MP
E T SMPE
Machine status word
8 7
0
56
Les registres de déverminage
@Pierre Marchand et Martin Dubois, 2002
57
Les autres registres






Global Descriptor Table Register GDTR
Interrupt Descriptor Table Register IDTR
Local Descriptor Table Register LDTR
Task Register TR
Test Registers TR6 et TR7
Time Stamp Counter TSC
@Pierre Marchand et Martin Dubois, 2002
58
La cache
 Un cache de données de niveau 1 de 8 Ko, associatif par 4
ensembles de blocs de 64 octets, à écriture simultanée.
 Un cache d’instructions (µops) de 12 Ko.
 Un cache unifié de niveau 2 interne de 256 Ko, associatif par 8
ensembles de blocs de 128 octets, à récriture.
@Pierre Marchand et Martin Dubois, 2002
59
Téléchargement