Unité 5a: Architecture du Pentium Unité 5a: Architecture du Pentium
Transcription
Unité 5a: Architecture du Pentium Unité 5a: Architecture du Pentium
Unité 5a: Architecture du Pentium Objectifs : À la fin de cette unité vous connaîtrez l'architecture du Pentium du point de vue du programmeur. Pour y arriver, vous devrez avoir atteint les objectifs suivants : - énumérer les registres du Pentium accessibles au programmeur. - énumérer les indicateurs usuels et décrire leur rôle. ©Pierre Marchand, 2001 24 Unité 5a: Architecture du Pentium Pourquoi l’assembleur ? • • • • Rapide Compact Puissant Pour mieux comprendre et utiliser : • les langages de haut niveau : - variables globales - variables locales et allocation dynamique - passage de paramètres et variables registres - déboguage ©Pierre Marchand, 2001 25 1 Unité 5a: Architecture du Pentium Pourquoi l’assembleur ? • Pour mieux comprendre et utiliser : • les compilateurs : - édition de liens - génération de code • La structure interne des processeurs • La virgule flottante • Les interruptions • Pour mieux accéder aux périphériques ©Pierre Marchand, 2001 26 Unité 5a: Architecture du Pentium Pourquoi l’assembleur ? • Universellement utilisé • Indispensable dans la programmation des microcontrôleurs ou des systèmes embarqués • Finalement, parce que c’est amusant!! ©Pierre Marchand, 2001 27 2 Unité 5a: Architecture du Pentium 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 ©Pierre Marchand, 2001 28 Unité 5a: Architecture du Pentium Architecture de von Neumann 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 F n S0 S1 ©Pierre Marchand, 2001 Verrou Verrou L1 F0 ALU Décaleur 29 3 Unité 5a: Architecture du Pentium Architecture de von Neumann 16 8 PC Exécution séquentielle des instructions • Chargement (fetch) de l’instruction dans IR • Décodage de l’instruction • Chargement des opérandes s’il y a lieu • Exécution • Écriture du résultat R1 R2 R3 R4 R5 Acc1 Acc2 Tampon Même avec une horloge de 500 MHz, un tel processeur serait plus lent que les processeurs d’aujourd’hui. Pourquoi ? Tampon CCR Décodeur Microprogramme Tampon IR L0 Verrou L1 F0 F n S0 S1 ©Pierre Marchand, 2001 Verrou ALU Décaleur 30 Unité 5a: Architecture du Pentium Architecture de von Neumann • Les registres n’ont que 8 bits • Bus d’adresses de 16 bits -> 64 Ko max de RAM • Même si on mettait tous les registres à 32 bits et des bus de donnée s e t d’adresses de 32 bits, on n’aurait pas encore une performance élevée. • Les accès mémoire prennent de l’ordre de 100 ns. Le processeur a un temps de cycle de 2 ns à 500 MHz. • Il faudrait donc ajouter un cache de niveau 1 sur la puce et un cache de niveau 2. • Il manque encore la virgule flottante et la mémoire virtuelle. ©Pierre Marchand, 2001 31 4 Unité 5a: Architecture du Pentium Architecture de von Neumann • Même en ajoutant des instructions de virgule flottante et la mémoire virtuelle, on n’aurait pas encore une performance comparable à celle des processeurs actuels. • En effet, il n’y a qu’une unité d’exécution. Chaque instruction prend au moins quatre à six cycles : - Chargement de l’instruction - Décodage de l’instruction - Exécution de l’instruction - Écriture du résultat. • Et, le cas échéant, - Chargement d’un ou deux opérandes ©Pierre Marchand, 2001 32 Unité 5a: Architecture du Pentium Architecture de von Neumann Or les processeurs actuels effectuent en moyenne plus d’une instruction par cycle. Comment y parviennent-ils ? ©Pierre Marchand, 2001 33 5 Unité 5a: Architecture du Pentium Amélioration de la performance Examinons différentes façons d’améliorer la performance d’un processeur : 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,15 microns (µm). Les vitesses d’horloge atteignent présentement ~1000 MHz. ©Pierre Marchand, 2001 34 Unité 5a: Architecture du Pentium Amélioration de la performance 2. 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. 3. Introduire du parallélisme • Pipeline. • Plusieurs unités d’exécution travaillant simultanément : Processeurs superscalaires (plus d’une instruction par cycle d’horloge). • Prédiction de branchements. ©Pierre Marchand, 2001 35 6 Unité 5a: Architecture du Pentium Amélioration de la performance 4. Minimiser les accès à la mémoire • Mémoire cache pour les données et les instructions sur la puce du processeur lui-même. • Plus grand nombre de registres. 5. Augmenter la bande passante 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. Par exemple, le bus de données du Pentium est de 64 bits. ©Pierre Marchand, 2001 36 Unité 5a: Architecture du Pentium Le Pentium II ©Pierre Marchand, 2001 37 7 Unité 5a: Architecture du Pentium Le Pentium II Le Pentium est un processeur CISC : • Nombre é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 ©Pierre Marchand, 2001 38 Unité 5a: Architecture du Pentium Le Pentium II Cache de niveau 2 (512 Ko) Bus système Bus du cache Unité d'interface de bus Cache d'instructions (16 Ko) Cache de données (16 Ko) Recherche Chargement Unité de recher- Unité de lanceche/décodage ment/exécution Stockage Unité de complétion Registres Bassin d'instructions ©Pierre Marchand, 2001 39 8 Unité 5a: Architecture du Pentium Registres de base 7 15 31 AH BH CH DH 0 EAX AX AL BL CL DL EBX BX ECX CX EDX DX ESI SI EDI DI BP SP Registres de Segment 15 EBP ESP Registres généraux Source index Destination index Base pointer Stack pointer Registres fantômes 0 Code Descriptor Data Descriptor StackDescriptor Extra Descriptor F Descriptor G Descriptor CS DS SS ES FS GS 31 Registres d'état et de contrôle 0 FLAGS IP ©Pierre Marchand, 2001 EFLAGS 0 31 EIP 40 Unité 5a: Architecture du Pentium Registres généraux Accumulateur Registre de Base Registre de Comptage Registre de Données Indice source Indice destination Pointeur de base Pointeur de pile (stack) ©Pierre Marchand, 2001 eax, ax, ah, al ebx, bx, bh, bl ecx, cx, ch, cl edx, dx, dh, dl esi,si edi,di ebp,bp esp, sp 41 9 Unité 5a: Architecture du Pentium Registres de segment Segment code Segment pile Segment données Segment extra Segment F Segment G CS SS DS ES FS GS Autres Compteur ordinal EIP Registre d’état et de contrôle EFlags 42 ©Pierre Marchand, 2001 Unité 5a: Architecture du Pentium Registres de virgule flottante Signe 64 63 79 78 R0 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, 2001 47 0 Pointeur d'instruction de FPU Pointeur d'opérande de FPU 10 0 Opcode 43 10 Unité 5a: Architecture du Pentium Registres MMX Il est à noter que ces 8 registres sont physiquement les mêmes que les registres de virgule flottante. 63 0 MM0 MM1 MM2 MM3 MM4 MM5 MM6 MM7 ©Pierre Marchand, 2001 44 Unité 5a: Architecture du Pentium Registres SIMD Il est à noter que ces 8 registres sont physiquement les mêmes que les registres de virgule flottante. 127 0 XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 ©Pierre Marchand, 2001 45 11 Unité 5a: Architecture du Pentium Le registre EFLAGS 31 1615 8 7 0 I V V A V R N IO O D I T S Z A P C 0 0 0 0 0 0 0 0 0 0 0 D I I C M F 0 T PL F F F F F F 0 F 0 F 1 F P F 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, 2001 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 46 Unité 5a: Architecture du Pentium Autres registres CR0 à CR4 (mémoire virtuelle) Global Descriptor Table Register GDTR Interrupt Descriptor Table Register IDTR Local Descriptor Table Register LDTR Task Register TR Debug Registers DR0 à DR7 Test Registers TR6 et TR7 Time Stamp Counter TSC ©Pierre Marchand, 2001 47 12 Unité 5a: Architecture du Pentium Historique • 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, 2001 48 Unité 5a: Architecture du Pentium Historique • 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, 2001 49 13 Unité 5a: Architecture du Pentium Historique On décida que l’adresse serait constituée des 16 bits des registres internes ajoutée à 16 fois le contenu d’un de 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, 2001 50 Unité 5a: Architecture du Pentium Historique • 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). • 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. ©Pierre Marchand, 2001 51 14 Unité 5a: Architecture du Pentium Historique • Jusqu’alors, les processeurs fonctionnaient en ce qu’Intel appelle le « mode réel ». Les systèm e s d’exploitation utilisés a v e c 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éd e r aux 1 6 Mo q u e permettait l e bus d’adresses de 24 bits du 80286? ©Pierre Marchand, 2001 52 Unité 5a: Architecture du Pentium Historique • Pour permettre l’avènement de systèm e s 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. ©Pierre Marchand, 2001 53 15 Unité 5a: Architecture du Pentium 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, 2001 54 Unité 5a: Architecture du Pentium Historique • En 1987, Intel met au point le 80386, puis le 80486, ensuite le Pentium, le Pentium II en 1997, le Pentium III en 1999 et finalement le Pentium 4 en 2001. Les ordinateurs que nous utilisons pour ce cours sont munis de Pentium III. ©Pierre Marchand, 2001 55 16 Unité 5a: Architecture du Pentium Historique Sélecteur 15 Index 2 1 TI RPL 0 Index = index dans une table de descripteurs, possibilité de 8 K segments (13 bits). TI = indice de table : 0 = GDT, 1 = LDT RPL = niveau de privilège demandé 0 à 3 56 ©Pierre Marchand, 2001 Unité 5a: Architecture du Pentium Historique Descripteur de segment 31 16 15 0 base 0-15 63 56 base 24-31 limit 0-15 48 47 A G D O V limit L 16-19 39 D S P P = Type A L 0 32 base 16-23 Droits d'accès Base = adresse de départ du segment Limit = taille du segment : 0 à 1 méga-unités G = granularité : unité = 1 octet si G = 0 ou 4 Ko si G = 1 ©Pierre Marchand, 2001 57 17 Unité 5a: Architecture du Pentium Environnement Les ordinateurs de nos laboratoires fonctionnent tous sous Windows 2000. Ceci crée des difficultés pour la programmation en assembleur : Les accès aux interruptions logicielles et matérielles (accès au BIOS) ainsi qu’aux entrées/sorties sont interdits sauf si on exécute le programme à partie de la fenêtre DOS. Pour que les programmes fonctionnent normalement sous Windows 2000, il faut utiliser un assembleur 32 bits et effectuer des appels système pour accéder aux fonctions système et aux périphériques. ©Pierre Marchand, 2001 58 Unité 5a: Architecture du Pentium Exemple : En C void main() { short i, j, k; i = 4; j = 6; k = i + j + 5; } ©Pierre Marchand, 2001 59 18 Unité 5a: Architecture du Pentium Exemple : En assembleur .586 .model flat, stdcall option casemap:none ; Pentium ; mémoire 4 Go, appel de fonctions normal ; respecte la casse include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib .data? i dw ? j dw ? k dw ? ; librairie pour ExitProcess ; variables globales non initialisées ; word = 16 bits = short 60 ©Pierre Marchand, 2001 Unité 5a: Architecture du Pentium Exemple : En assembleur .code start: mov mov mov mov add add mov invoke end start ©Pierre Marchand, 2001 ; début du programme principal ax, 4 i, ax bx, 6 j, bx ax, bx ax, 5 k, ax ExitProcess, 0 ;i=4 ;j=6 ;i+j+5 ; résultat dans k ; retourner à Windows ; fin du programme 61 19