@Pierre Marchand et Martin Dubois, IFT Programmation système
@Pierre Marchand et Martin Dubois, Chargé de cours Martin Dubois Expériences Coordonnées Courriel: 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, Professeur responsable Pierre Marchand Coordonnées : Bureau : PLT-3958 Téléphone : , #7409 Fax : Courriel :
@Pierre Marchand et Martin Dubois, Site WEB du cours Ce site contient Documentation Transparents Guides d’étude Énoncés des travaux Liens intéressants
@Pierre Marchand et Martin Dubois, Préalables IFT : Structure interne des ordinateurs ou IFT : Organisation matérielle et logicielle de l’ordinateur et IFT : Algorithmique et programmation ou IFT : Éléments d’algorithmique ou IFT : Introduction à la programmation scientifique
@Pierre Marchand et Martin Dubois, 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, 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, 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, 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, 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, É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 h 25 le lundi 4 novembre h 25 le lundi 16 décembre 2002
@Pierre Marchand et Martin Dubois, 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, 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, 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, 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, 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, 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, Pourquoi l’assembleur ? Raisons personnelles Parce que c’est amusant !!!
@Pierre Marchand et Martin Dubois, 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, Machine de von Neumann Processeur 8 bits
@Pierre Marchand et Martin Dubois, 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, 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, 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, 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’infor- mations (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, 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, Amélioration de la performance 6.Transférer une partie de la complexité au compilateur Architecture Load / Store.
@Pierre Marchand et Martin Dubois, 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, RISC vs CISC Format des instructions Intel (CISC) movax, sVar1 addsVar2, ax Instruction à 1 ou 2 adresses (registre ou mémoire) Non orthogonal Format des Instructions RISC ldr0, sVar1 ldr1, sVar2 addr2, r0, r1; r2 = r0 + r1 stsVar2, r2 Instruction à 3 adresses (registre) Orthognalité
@Pierre Marchand et Martin Dubois, 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, Le Pentium 4
@Pierre Marchand et Martin Dubois, 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, 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 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, 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. Ces quatre registres étaient CS (Code Segment), DS (Data Segment), SS (Stack Segment) et ES (Extra Segment). Adresse 20 bits Offset 16 bits Segment
@Pierre Marchand et Martin Dubois, 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, L’arrivé du Le 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 ressou- rces 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, 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 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, Historique Le 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, 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, 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, La famille Pentium Processeurs avec l’architecture IA-32 Pentium et Pentium MMX Pentium Pro Pentium II Pentium III Pentium 4 Description
@Pierre Marchand et Martin Dubois, La famille x86 en graphique
@Pierre Marchand et Martin Dubois, Le Pentium 4 par rapport aux autres Pentium Comparaison du Pentium 4 avec les autres membres de la famille Pentium De nouveaux benchmarks appelés SPECint2000 et SPECfp2000 sont maintenant utilisés.
@Pierre Marchand et Martin Dubois, 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, 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, L’architecture du Pentium 4
@Pierre Marchand et Martin Dubois, 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, 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, Les unité de calcules
@Pierre Marchand et Martin Dubois, L’unité de retrait L’unité de retrait (Retirement unit) reçoit les résultats des micro- ops 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, Les registres d’entiers AHAL BHBL CHCL DHDL Registres généraux SI DI BP SP EAX AX EBX BX ECX CX EDX DX ESI EDI EBP ESP Registres de Segment CS DS SS ES FS GS 150 Registres d'état et de contrôle 31 0 EFLAGS EIP 31 0 Registres fantômes Code Data Stack Extra F G Source index Destination index Base pointer Stack pointer FLAGS IP descriptor
@Pierre Marchand et Martin Dubois, Les registre de virgule flottante Opcode Registres de données Mantisse Exposant R7 R6 R5 R4 R3 R2 R1 R0 Signe Pointeur d'instruction de FPU Pointeur d'opérande de FPU Registre de contrôle Registre d'état Registre Étiquette
@Pierre Marchand et Martin Dubois, Les registre de virgule flottante Registres de données du FPU ST(2) ST(1) ST(0)Sommet Direction d'empilement 0 79
@Pierre Marchand et Martin Dubois, Les registres MMX 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. MM7 630 MM6 MM5 MM4 MM3 MM2 MM1 MM0
@Pierre Marchand et Martin Dubois, Les registre SIMD Ces registres ne sont disponibles que dans le Pentium III et le Pentium 4. XMM XMM6 XMM5 XMM4 XMM3 XMM2 XMM1 XMM0
@Pierre Marchand et Martin Dubois, Le registre EFLAGS 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 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
@Pierre Marchand et Martin Dubois, Le registres de mémoire virtuelle
@Pierre Marchand et Martin Dubois, Les registres de déverminage
@Pierre Marchand et Martin Dubois, 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, 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.