STRUCTURE ET FONCTIONNEMENT D‘UN SYSTÈME INFORMATIQUE Architecture des ordinateurs V1.1 Page 2 CONTRIBUTIONS D’ALLAN TURING Architecture des ordinateurs V1.1 Architecture de von Neumann 3 Architecture des ordinateurs V1.1 Architecture de von Neumann 4 Architecture des ordinateurs V1.1 Architecture de von Neumann 5 Architecture des ordinateurs V1.1 Architectures actuelles 6 Mémoire des ordinateurs Architecture des ordinateurs V1.1 Introduction 8 Architecture des ordinateurs V1.1 Introduction 9 Architecture des ordinateurs V1.1 10 Caractéristiques kibi Ki 210 = 1 024 mébi Mi 220 = 1 048 576 gibi Gi 230 = 1 073 741 824 Architecture des ordinateurs V1.1 Autres caractéristiques 11 Architecture des ordinateurs V1.1 Méthodes d'accès 12 Architecture des ordinateurs V1.1 Mémoires volatiles 13 Architecture des ordinateurs V1.1 Mémoires volatiles 14 Architecture des ordinateurs V1.1 Mémoires cache : principe 15 Architecture des ordinateurs V1.1 Mémoires cache : principe 16 Architecture des ordinateurs V1.1 Mémoires cache : mémoire associative 17 Architecture des ordinateurs V1.1 Mémoires cache : efficacité 18 Architecture des ordinateurs V1.1 Mémoires non volatiles 19 Architecture des ordinateurs V1.1 Mémoires non volatiles 20 Architecture des ordinateurs V1.1 Fonctionnement d’une ROM 21 Architecture des ordinateurs V1.1 Fonctionnement d’une RAM 22 Architecture des ordinateurs V1.1 Disques magnétiques 23 Architecture des ordinateurs V1.1 Différent types et différentes utilisations 24 Architecture des ordinateurs V1.1 Hiérarchie des mémoires 25 Architecture des ordinateurs V1.1 Organisation de l'information 26 Architecture des ordinateurs V1.1 Organisation de l'information 27 Architecture des ordinateurs V1.11 Organisation de l'information Organisation mémoire des données de plus de 8 bits Little endian : l’octet de poids faible est en tête (processeurs Intel, HP Alpha) Big endian : l’octet de poids fort est en tête (processeurs Motorola et Sun) 28 Le Processeur Architecture des ordinateurs V1.1 Structure d’un processeur 30 Architecture des ordinateurs V1.1 Structure d’un processeur : i8080 31 Architecture des ordinateurs V1.1 Unité de contrôle et de commande 32 Architecture des ordinateurs V1.1 Détail de l’unité de commande 33 Architecture des ordinateurs V1.1 L’horloge 34 Architecture des ordinateurs V1.1 L’unité de traitement 35 Architecture des ordinateurs V1.1 L’unité de traitement : l’ALU 36 Architecture des ordinateurs V1.1 L’unité de traitement : l’ALU 37 Architecture des ordinateurs V1.1 L’unité de traitement : l’ALU 38 Architecture des ordinateurs V1.1 L’unité logique et arithmétique 39 Architecture des ordinateurs V1.1 L’unité logique et arithmétique 40 Architecture des ordinateurs V1.1 Les registres 41 Architecture des ordinateurs V1.1 Les registres 42 Architecture des ordinateurs V1.1 Les registres 43 Architecture des ordinateurs V1.1 Les registres 44 Architecture des ordinateurs V1.1 Les registres 45 Architecture des ordinateurs V1.1 Les registres 46 Gestion de la mémoire Architecture des ordinateurs V1.1 L’unité de gestion mémoire Deux type de gestion mémoire Gestion par segmentation Gestion par pagination 48 Gestion de la mémoire par segmentation L’adresse mémoire absolue est précisée à l’aide de deux registres : Un registre appelé registre de segment précisant l’adresse de base du segment divisé par 16 Un registre contenant un déplacement dans le segment L’adresse mémoire absolue est calculée en faisant la somme du registre de segment multiplié par 16 additionné au contenu du registre de déplacement. Architecture des ordinateurs V1.1 49 Gestion de la mémoire par segmentation Exemple registres de segments du processeur i8086: CS : Code Segment (travaille avec le registre IP) SS : Stack Segment (travaille avec le registre SP) DS : Data Segment (travaille avec les autre registres) ES : Exta Segment Adresse = segment * 16 + déplacement fourni par un registre Architecture des ordinateurs V1.1 50 Gestion de la mémoire par segmentation : exemple CS 1 2 3 4 CS x 16 1 2 3 4 0 5 6 7 8 7 9 B 8 + IP 1 IP 5 6 7 Architecture des ordinateurs V1.1 8 51 Gestion de la mémoire par pagination La mémoire est gérée par un dispositif matériel appelée Unité de Gestion de la Mémoire (UGM). L'UGM de la famille i386 inspirée de l’architecture mémoire de l’IBM 370 implémente à la fois la pagination et la segmentation. Principe de la pagination La pagination consiste à traduire les adresses linéaires fournies par l'unité de segmentation en adresses physiques, la traduction affectant une page de taille fixe de 4K octets. Architecture des ordinateurs V1.1 52 Architecture des ordinateurs V1.1 Principe de la pagination D'un point de vue fonctionnel, l'unité de pagination apparaît donc comme une table de traduction contenant 1 méga entrées (1 M x 4K = 4 Go). Une adresse linéaire doit être alors interprétée comme deux composantes : Les 20 bits de poids forts représentent le numéro logique de la page, utilisé comme index pour pointer sur l'entrée dans la table de page qui contient le numéro physique de cette page. On trouvera aussi dans cette entrée, les attributs de la page, pour la protection et la gestion de mémoire virtuelle. Les 12 bits de poids faible représentent l'offset de l'objet à accéder à l'intérieur de la page ; cette composante ne subira aucune transformation 53 Architecture des ordinateurs V1.1 Unité de pagination des processeurs x86 Un des inconvénients de la table unique de traduction est sa taille car elle doit résider en totalité dans la mémoire. Chaque entrée occupant 32 bits, il faudrait dans ce cas réserver 4M octets de mémoire centrale, seulement pour gérer la pagination... ceci par tâche, chaque tâche pouvant disposer d'une structure propre ! Elle ne permet pas à plusieurs tâches de partager certaines entrées de page. 54 Architecture des ordinateurs V1.1 Unité de pagination des processeurs x86 La structure retenue dans les processeurs x86 est une structure à deux niveaux qui consiste à paginer la table de pagination ! Le découpage de l’adresse linéaire est faite de façon suivante : Les bits 0-11 de l'adresse linéaire constituent toujours l'offset dans la page physique et ne subiront donc pas de modification. 55 Architecture des ordinateurs V1.1 Unité de pagination des processeurs x86 Les bits 22-31 constituent un premier index sélectionnant une entrée dans le répertoire de pagination (directory), première table à 1 K entrées, occupant donc 4K octets. Chaque entrée dans ce répertoire décrit une table de page (adresse physique et attributs), c'est-à-dire une fraction de 4K de la table unique précédente. 56 Architecture des ordinateurs V1.1 Unité de pagination des processeurs x86 Les bits 12-21 constituent un deuxième index cette fois dans la table de page précédemment sélectionnée, indiquant maintenant l'entrée de la page définitive contenant l'objet accédé par le programme. Chaque table de page contient 1 K entrées, occupe donc aussi 4K octets et décrit un espace physique de 1 K x pages, c'est-à-dire 4M octets. 57 Architecture des ordinateurs V1.1 Unité de pagination des processeurs x86 Il faut remarquer que pour une entrée de catalogue, une adresse linéaire ne fait correspondre qu’une seule adresse physique. La page contenant le répertoire est pointée par le registre CR3 du x86 (en adresse physique !). Ce registre est local et peut être modifié lors d'une commutation de tâche. Cela permet à deux tâches indépendantes d'utiliser des espaces linéaires communs sans interférence. 58 Architecture des ordinateurs V1.1 Unité de pagination des processeurs x86 Il faut remarquer que pour une entrée de catalogue, une adresse linéaire ne fait correspondre qu’une seule adresse physique. La page contenant le répertoire est pointée par le registre CR3 du x86 (en adresse physique !). Ce registre est local et peut être modifié lors d'une commutation de tâche. Cela permet à deux tâches indépendantes d'utiliser des espaces linéaires communs sans interférence. 59 Architecture des ordinateurs V1.1 60 Conséquence du mécanisme de pagination La mémoire physique n’a pas besoin d’être contiguë. Les programmes sont édités tous avec la même adresse linéaire de base (0x400 000 pour Windows) et sont tous chargés en mémoire linéaire à cette adresse. Permet de partager du code commun entre plusieurs processus. Permet de séparer les données statiques de deux processus identiques. Évite la fragmentation de la mémoire en récupérant des blocs de 4K disséminés sans perte de performance. Permet d’échanger les pages non utilisées sur le disque et ce de façon transparente pour les programmes (mémoire virtuelle) Architecture des ordinateurs V1.1 Les bus 61 Architecture des ordinateurs V1.1 Le bus d’adresse 62 Architecture des ordinateurs V1.1 Le bus de données 63 Architecture des ordinateurs V1.1 Le bus de commande 64 Architecture des ordinateurs V1.1 Exécution d’une instruction 65 Introduction au langage machine Architecture des ordinateurs V1.1 Le code machine 67 Architecture des ordinateurs V1.1 Fonctionnement en couche 68 Architecture des ordinateurs V1.1 Langage assembleur 69 Architecture des ordinateurs V1.1 Langage assembleur 70 Architecture des ordinateurs V1.1 71 Langages évolués Langage indépendant de l’architecture du processeur Le processus de traduction fait appel un logiciel appelé compilateur. Celui-ci génère du langage assembleur. Le compilateur est spécifique à chaque processeur. Architecture des ordinateurs V1.1 Principaux langages non objets Fortran C Pascal Lisp … 72 Architecture des ordinateurs V1.1 Principaux langages orientés objets C++ Java C# Python Page 73 Architecture des ordinateurs V1.1 Page 74 Exécution native ou interprétée Exécution native : Le code généré par le compilateur est celui du processeur Exécution interprétée: Le code généré par le compilateur est un code intermédiaire incompréhensible par le processeur physique. Ce code est interprété à la volée par un logiciel spécifique pour chaque processeur réel. Architecture des ordinateurs V1.1 Page 75 Améliorations dans l’exécution de codes intermédiaire Compilation JIT (Just In Time) Compilation à la volée : le code intermédiaire est compilé à la volée avant l’exécution de chaque fonction. Utilisé dans les machines Java et les machines Dalvik (Android jusqu’à 4.4) Compilation AOT (Ahead-Of-Time) Le code est compilé avant l’exécution du programme. Permet de générer un code plus efficace. Utilisé dans les machines .net et les machines ART (Android à partir de 5.0) Architecture des ordinateurs V1.1 Processeur 8086 Page 76 Architecture des ordinateurs V1.1 Page 77 Processeur Intel 8086 et x586 Processeur 16 bits (1978) Toujours présent dans les architectures x586 actuelles Mode 8086 activé à la mise sous tension d’un processeur x86 Mode 8086 activé lors de l’exécution des programmes 16 bit (8086 virtuel) Architecture des ordinateurs V1.1 Processeur 8086 Bus d’adresse 20bits Bus de données 16 bits Registres internes 16 bits Page 78 Architecture des ordinateurs V1.1 Processeur 8086 : registres Page 79 Architecture des ordinateurs V1.1 Modèle mémoire segmenté Page 80 Architecture des ordinateurs V1.1 Page 81 Instructions 8086 Instructions arithmétiques Instructions logiques Instructions déplacement des données Instructions de manipulation des chaines de caractères Instructions de test Instructions de contrôle du processeur Instructions entrées/sorties Architecture des ordinateurs V1.1 Instructions arithmétiques ADD, SUB, MUL, IMUL, DIV, IDIV Syntaxe ADD op1, op2 => op1 <- op1 + op2 Exemple Add al, 12H Al = AL + 12H Add ax, [1000H] Ax = AX + [1000H] Page 82 Architecture des ordinateurs V1.1 Instructions logiques AND, OR, XOR, NOT Syntaxe AND op1, op2 => op1 <- op1 AND op2 Page 83 Architecture des ordinateurs V1.1 Instructions de déplacement des données Mov, Movs, Xchg, Syntaxe Mov op1, op2 => op1 <- op2 Page 84 Architecture des ordinateurs V1.1 Page 85 Instructions de test et de comparaison Jmp, Jcond, Loop Syntaxe Jmp adr Ja adr: saut si >, Jb : saut si < Jae adr : saut si ≥, Jbe : saut si ≤ Jne adr : saut si différent Je adr : saut si = Jg adr : saut si plus grand, Jl saut si plus petit Jz, Jnz adr : saut si le résultat de l’opération précédente ==0 ou !=0 Architecture des ordinateurs V1.1 Page 86 Exemple de programme Utilisation d’un outil de bas niveau pour l’écriture du code : debug Principales commandes de debug : A : assemble D: affiche le contenu d’une zone mémoire Tn : exécute n instructions U: désassemble R : affiche ou modifie le contenu d’un registre Architecture des ordinateurs V1.1 Page 87 Exemple de code Effectuer l’opération V3 = V2 + V1 (données 16bits) 1. Définir l’emplacement de V1, V2 et V3 2. Initialiser V1 et V2 3. Définir les instructions 8086 pour effectuer l’opération Architecture des ordinateurs V1.1 Page 88 Définir l’emplacement de V1, V2 et V3 et initialiser V1 et V2 Les données sont placées à partir de l’adresse 1000H V1 sera placé à [1000H] et sera initialisé à 1234H V2 sera placé à [1002H] et sera initialisé à 4567H V3 sera placé à [1004H] Le code sera placé à partir de l’adresse 100H Architecture des ordinateurs V1.1 Page 89 Instructions d’additions Le code sera placé à l’adresse CS:100H Architecture des ordinateurs V1.1 Tests Fixer le compteur ordinal au départ du programme (100H) Tracer 3 instructions V1 V2 V3 Page 90 Architecture des ordinateurs V1.1 Deuxième exemple Faire la somme du tableau situé à l’adresse DS:0 d’une taille de 10 éléments et mémoriser le résultat à l’adresse DS:20 LA zone de mémoire peut être initialisée parla commande debug : FDS:0,20,1 Page 91 Architecture des ordinateurs V1.1 Deuxième exemple Programme à l’adresse cs:200 Page 92 Architecture des ordinateurs V1.1 Troisième exemple Recopier le tableau de caractères ASCIIZ situé à l’adresse DS:0, à l’adresse DS:20 Page 93 Architecture des ordinateurs V1.1 Unités E/S 94 Architecture des ordinateurs V1.1 Unités E/S 95 Architecture des ordinateurs V1.1 Câblage des E/S Les E/S peuvent être mappées en mémoire -> Une partie de la mémoire est réservée pour les E/S Les E/S peuvent être mappées dans l’espace E/S (processeurs x86) -> Pas de pertes d’espace mémoire 96 Architecture des ordinateurs V1.1 E/S par scrutation 97 Architecture des ordinateurs V1.1 E/S par interruption 98 Architecture des ordinateurs V1.1 E/S par accès direct à la mémoire 99 Architecture des ordinateurs V1.1 Bus E/S 100 Architecture des ordinateurs V1.1 Protocole des bus 101 Architecture des ordinateurs V1.1 Protocole maitre-esclave 102 Architecture des ordinateurs V1.1 Caractéristique d’un bus : cadencement synchrone 103 Architecture des ordinateurs V1.1 Caractéristique d’un bus : cadencement asynchrone 104 Architecture des ordinateurs V1.1 Caractéristique d’un bus : arbitrage 105 Les Interruptions Architecture des ordinateurs V1.1 Utilité des interruptions 107 Architecture des ordinateurs V1.1 Fonctionnement 108 Architecture des ordinateurs V1.1 Traitement des interruptions 109 Architecture des ordinateurs V1.1 Sauvegarde du contexte 110 Architecture des ordinateurs V1.1 Pile système 111 Architecture des ordinateurs V1.1 Vecteur d’interruption 112 Architecture des ordinateurs V1.1 Signaux d’interruption matériels 113 Architecture des ordinateurs V1.1 Indicateur d’interruption 114 Architecture des ordinateurs V1.1 Problème posé par le traitement des interruptions périodiques Le traitement des interruptions périodiques occasionnent un ralentissement des programmes hors interruption. Si le programme d’interruption est trop long il peut bloquer tout le système. 115 Architecture des ordinateurs V1.1 116 Cas d’une seule interruption périodique Code exécuté P0 Boucle de scrutation P1 I1 I1 code d'interruption ty1 T1 t Pour ne pas perdre des signaux d'interruptions ou pour éviter une récursion infinie ont doit avoir : ty1 < T1 Architecture des ordinateurs V1.1 117 Cas d’une seule interruption périodique P0 Code exécuté Boucle de scrutation P1 I1 I1 code d'interruption ty1 T1 t La durée de traitement de P0 se trouve multiplié par un facteur K égal environ à : T1 K T1 ty1 Architecture des ordinateurs V1.1 118 Cas de plusieurs interruptions traitées de façon séquentielles P0 Code exécuté I1 I2 I1 I2 Boucle de scrutation P1 code d'interruption ty1 P2 ty2 code d'interruption T2 T1 retard dans le traitement de P2 du au mécanisme d'it non emboîté t Pour ne pas perdre des signaux d'interruptions ou pour éviter une récursion infinie ont doit avoir : ty1 +ty2 < T2 ( T2 < T1 ) Architecture des ordinateurs V1.1 119 Cas de plusieurs interruptions traitées de façon séquentielles P0 Code exécuté I1 I2 I1 I2 Boucle de scrutation P1 code d'interruption ty1 P2 ty2 code d'interruption T2 T1 retard dans le traitement de P2 du au mécanisme d'it non emboîté t Pour ne pas perdre des signaux d'interruptions ou pour éviter une récursion infinie ont doit avoir : ty1 +ty2 < T2 ( T2 < T1 ) Architecture des ordinateurs V1.1 120 Cas de plusieurs interruptions traitées de façon emboitées Code exécuté I2 I2 I1 I2 I2 I2 I2 I1 P0 P1 P2 ty2 T2 t T1 Pour ne pas perdre des signaux d'interruptions ou pour éviter une récursion infinie ont doit avoir : ty2 < T2 ET ty1 < T1 ( T2 < T1 ) Architecture des ordinateurs V1.1 121 Cas de plusieurs interruptions traitées de façon séquentielles Code exécuté I2 I2 I1 I2 I2 I2 I2 I1 P0 P1 P2 ty2 T2 t T1 La durée de traitement de P1 se trouve multiplié par un facteur K2 égal environ à : K2 T2 T2 -ty2 La durée de traitement de P0 se trouve multiplié par un T1 facteur K1égal environ à : K1 T1 - ty1 K 2 Architecture des ordinateurs V1.1 Interruption spéciale 122 Architecture des ordinateurs V1.1 123 Mise sous tension d’un ordinateur à processeur x86 A la mise sous tension le processeur est en mode 16 bits (mode réel) et peut adresser 1Mi octets mémoire (1024*1024). Le compteur ordinal effectue une recherche d’instruction dans les 16 derniers octets de la mémoire soit FFFF016. A cet emplacement se trouve de la mémoire ROM : le BIOS de la machine. Le BIOS prend le contrôle cherche un disque comportant une partition active. Le chargeur du BIOS charge en mémoire le contenu du secteur de démarrage du disque (Master Boot Record) à l’adresse 102410 = 40016 . Cet emplacement contient l’adresse du chargeur système. Le BIOS effectue ensuite un saut à l’adresse 40016 Architecture des ordinateurs V1.1 Chargement du système d’exploitation de type Windows A l’adresse 40016 est placé le code permettant de déterminer l’emplacement sur le disque (piste, secteur, cylindre) de l’amorce du système d’exploitation. Le processeur exécute cette portion de code ce qui provoque le chargement en mémoire du code d’amorce du S.E. Puis un saut est effectué à adresse de code d’amorce. Le code d’amorce fait passer le processeur en mode protégé (adressage sur 32bit) puis un mini système d’exploitation est chargé en mémoire (WindowsPE). A ce niveau (par appui sur F8) il est possible d’effectuer une maintenance système. WindowsPE charge ensuite en mémoire le système d’exploitation complet et le lance. 124