Architecture des ordinateurs Architecture de von Neumann processeur simplifié ordinateur simplifié 91
Architecture de von Neumann! Séparation du stockage et du traitement Mémoire principale écriture résultat Unité Arithmétique et Logique : UAL Données Programme lecture opérandes lecture instruction Opération Sélection opération Instruction Unité de commande possible prise en compte résultat dans déroulement séquence programme Mémoire : Données et description des traitements Processeur : Exécution des traitements sur les données 92
Architecture de von Neumann! L'unité de commande (ou unité de contrôle) lit les instructions une à une depuis la mémoire A partir de l'instruction en cours, l'unité de commande indique l'emplacement des opérandes, l'opération à faire, l'emplacement du résultat L'Unité Arithmétique et Logique réalise des opérations élémentaires sur 2 opérandes ( arithmétique + - / x, logique ''et, ou, non'' ) Ce schéma simplifié ne fait pas encore apparaître les unités d'entrées et de sorties 93
Architecture processeur! En plus du traitement (Unité de commande, UAL) un processeur réel dispose de registres Mémoire Entrées Sorties Registre = un espace de stockage (peu mais rapide) Registres R0 R2 R4 R1 R3 R5 Processeur commande transferts mémoire et E/S registres Lecture instruction sélection opérandes Opération UAL sélection opération Instruction sélection destination Unité de commande 94
Architecture processeur Exemple : ajouter R3 et R5, résultat dans R1 L'instruction du programme est chargée depuis la mémoire par l'unité de commande... Mémoire Registres R0 : 117 R1 : 5 R2 : 215 R3 : 11 R4 : 10 R5 : 13 Opération UAL Entrées Sorties Lecture instruction R3+R5 R1 Unité de commande 95
Architecture processeur Sélection du contenu des registres R3 et R5 Sélection de l'opération + Réalisation du calcul par l'ual Mémoire Entrées Sorties Registres R0 : 117 R1 : 5 R2 : 215 R3 : 11 R4 : 10 R5 : 13 11 13 sélection opérandes UAL + sélection opération R3+R5 R1 24 Unité de commande 96
Architecture processeur Sélection du registre destination : R1 reçoit le résultat de l'opération Mémoire Registres R0 : 117 R1 : 24 R2 : 215 R3 : 11 R4 : 10 R5 : 13 UAL Entrées Sorties sélection destination 24 R3+R5 R1 Unité de commande 97
Architecture ordinateur! Les échanges d'informations passent par un bus partagé (bus système) ou par des composants spécifiques de la carte mère. Processeur Mémoire Principale BIOS (démarrage) Contrôleur de disque Contrôleur vidéo Contrôleur clavier Disque dur Ecran Clavier 98
Architecture réelle simplifiée! Les données fréquemment utilisées sont dans les registres (compteurs de boucles...) Les autres données sont en mémoire principale ou sur des circuits périphériques (entrées/sortie) Adresses 0000 0001 0002 0003 0004... 8FFB 8FFC 8FFD 8FFE 8FFF Contenu 00000000 01001110 00001010 00000010 01011100... 00000110 11110000 00101000 00001110 00001011 Mémoire principale BUS SYSTEME... Entrées Sorties Processeur Registres Opération UAL Instruction unité de commande 99
Architecture des ordinateurs Les dispositifs de stockage : Mémoires 100
Mémoires à accès par adresses! La mémoire principale (mémoire vive) est une mémoire dont les éléments sont accessibles directement par adresses Adresses croissantes vers le bas ( convention usuelle mais non systématique ) Adresses 0000 0001 0002 0003 0004... 8FFB 8FFC 8FFD 8FFE 8FFF Contenu : Octets 00000000 01001110 00001010 00000010 01011100... 00000110 11110000 00101000 00001110 00001011 101
Mémoires à accès par adresses i Structure possible pour une mémoire à accès par adresses (circuits lecture seuls représentés) mémoire de 64 bits adresse sur 6 bits 0x2E =0b011101 decoder mux donnée lue : 1 bit 102
Mémoires à accès par adresse i Pour obtenir des mémoires de ''mots'' de n bits on peut combiner n matrices mémoire de 64 octets Ligne Colonne donnée lue : 8 bits = 1 octet 103
Mémoires à accès par adresses i RAM : Random Access Memory Mémoire accessible en écriture et lecture Mémoire volatile : oubli des données en l'absence d'alimentation (système éteint) SRAM : Static RAM Utilise des bascules pour mémoriser Rapide mais couteux en composant (6 transistors / bit) DRAM : Dynamic RAM Utilise des charges de condensateurs Un seul transistor par bit mémorisé Moins rapide que SRAM et nécessite des ''rafraîchissements'' périodiques (toutes les ms) 104
Mémoires à accès par adresses L'accès ''aléatoire'' aux informations dans ces mémoires se fait par mots de 8, 16, 32 ou 64 bits sur les systèmes récents On parle d'accès aléatoire (random access) à des petits éléments d'information par opposition à l'accès séquentiel et par blocs de grandes tailles sur les disques durs (clusters typiquement de plus de 4096 octets) 105
Mémoires non volatiles i Mémoires non volatiles accessibles par adresses : ROM : Read Only Memory Composants cablés, mémoire figée à la fabrication PROM : Programmable ROM Composant inscriptible une seule fois EPROM : Erasable & Programmable ROM Composant réinscriptible après effacement UV Flash & EEPROM : Electrically Erasable PROM Composants réinscriptibles plusieurs fois sans nécessité de démontage 106
Résumé des mém. adressables i Aucune mémoire n'est idéale : le choix dépend de l'application 107
Mémoires de masse Les mémoires de masse sont des mémoires de grande capacité non volatiles Actuellement les mémoires de masse sont lentes pour des accès ''aléatoires'' : Bandes magnétiques Temps d'accès très lent mais économique Archivage Disques durs Temps d'accès meilleurs (~10ms) et débits élevés Stockage système, programmes, données utilisateurs Disques optiques, CD/DVD/HD/Blu-ray Supports amovibles inscriptibles ou réinscriptibles 108
Mesure des mémoires!i Quand les adresses sont données sur un nombre fixe q de bits : N octets = 2 q Les préfixes usuels des unités de mesures sont utilisés ainsi : kilo-octet ko : 2 10 = 1024 octets méga-octet Mo : 2 20 = 1024 2 octets giga-octet Go : 2 30 = 1024 3 octets téra-octet To : 2 40 = 1024 4 octets Ce sont les notations usuelles pour les RAMs 109
Mesure des mémoires i Ces notations sont en contradiction avec le Système International d'unités (SI) Dans les autres domaines informatiques que les mémoires à accès par adresse, les mesures sont se font en puissances de 1000 En particulier un disque dur indiquant 320 Go contient exactement 320x10 9 octets La confusion conduit à une erreur de 6,8% sur cet exemple 110
Mesure des mémoires i Pour éviter les confusions, lorsqu'on utilise des puissances de 1024 on peut préciser kibi-octet kio mébioctet Mio gibioctet Gio tébioctet Tio Ces notations ne sont pas encore régulièrement utilisées : méfiance 111
Mesure des mémoires i En anglais octet = Byte : unité B 2 MB = 2x10 6 octets ou 2x2 20 octets 2 MiB = 2x2 20 octets En anglais comme en français, bit : unité b 2 Mb = 2x10 6 bits = 250000 octets ou 2x2 20 bits = 262144 octets 2 Mib = 2x2 20 bits = 262144 octets Un octet = 8 bits : One Byte = 8 bits 112
Architecture des ordinateurs Les dispositifs de transmission : Les BUS 113
BUS! Un bus est un ensemble de lignes qui transportent l'information Il existe des bus Entre systèmes autonomes (ex. Ethernet) passage par des ''fils'' ou câbles Entre composants (ex. Bus système) passage par des pistes sur circuit imprimé A l'intérieur d'un composant (ex. registres<-> UAL) passage sur des pistes métalliques ''gravées'' sur le support silicium 114
BUS Un même bus peut relier deux éléments : bus dédié (ou point à point) exemple : câble entre ordinateur et moniteur plus de deux éléments : bus partagé (multiplexé) exemple : câble USB avec répartiteur (HUB) 115
BUS! Un bus série peut être constitué d'un nombre restreint de lignes de transmission de données Les données d'un mot binaire sont envoyées successivement 01100... Données modulées...101 envoi d'un bit à chaque top horloge Exemple de bus série minimal : une paire de fils 116
BUS! Un bus parallèle est constitué de groupes de lignes permettant l'envoi de mots binaires complets en une seule étape Les données d'un mot binaire sont envoyées simultanément (sur plusieurs lignes) 01100101 Données Strobe Référence = 0V 01100101 Exemple de bus parallèle minimal 117
BUS i Et si on met ''plusieurs bus série'' en parallèle? Le résultat est encore qualifié de bus série : ce qui importe c'est que les bits d'un même mot binaire sont envoyées successivement sur chaque ligne indépendamment des autres C'est le cas de la norme PCI Express qui comporte jusqu'à 16 lignes séries ''en parallèle'' Utilisée pour les cartes d'extension sur la carte mère (carte graphique, carte son...) 118
BUS i Un bus est caractérisé par sa largeur L (nombre de lignes ou de bits) sa fréquence f (nombre de cycles/s ou Hz) Le débit d'information (data transfer rate) souvent appelé bande passante : indique la quantité d'information transmise par unité de temps Unité de base : bits par seconde (b/s ou bps) débit = L x f 119
BUS i Le débit établit le rapport entre volume et temps : débit = Q info / t transfert Unités dérivées en puissances de 1000 : 32 kb/s = 32000 b/s = 4000 o/s = 4 ko/s Pour passer de b à o on divise par 8 120
BUS i La latence est une autre caractéristique : mesure du délai entre l'émission et la réception des données (s ms µs ns...) Les bus séries peuvent avoir de bonnes bandes passantes mais leur latence et souvent moins bonne que les bus parallèles Les bus séries sont adaptés pour des liaisons de grande distance : économie de fils, signal modulé, détection et correction d'erreurs... Les composants proches d'un même système sont plutôt reliés par des bus parallèles 121
BUS i Il est utile de pouvoir brancher ou débrancher certains modules entre eux Un tel point de branchement pour un bus s'appelle un port et utilise des connecteurs Un port a le même nom que le type de bus qu'il accepte : port USB port PCI express... 122
Bus système! Le bus système désigne un bus parallèle au coeur de l'ordinateur qui fait circuler 3 types d'informations sur 3 groupes de fils Les lignes de données permettent d'échanger du contenu mémoire (par exemple entre les registres du processeur et la mémoire principale) Les lignes d'adresse identifient la case mémoire concernée par l'échange Les lignes de contrôle (ou commande) signalent le type d'opération à effectuer et coordonnent les échanges (synchronisation, arbitrage sur un bus partagé) 123
Architecture ordinateur Rôle du bus système : faire circuler l'information sur la carte mère Processeur Mémoire Principale BIOS (démarrage) Contrôleur de disque Contrôleur vidéo Contrôleur clavier Disque dur Ecran Clavier 124
Architecture ordinateur Rôle du bus système : faire circuler l'information sur la carte mère Processeur Mémoire Principale BIOS (démarrage) Données Adresse Contrôle Contrôleur de disque Contrôleur vidéo Contrôleur clavier Disque dur Ecran Clavier 125
Architecture réelle simplifiée La majorité des échanges se fait entre la mémoire et le processeur Adresses 0000 0001 0002 0003 0004... 8FFB 8FFC 8FFD 8FFE 8FFF Contenu 00000000 01001110 00001010 00000010 01011100... 00000110 11110000 00101000 00001110 00001011 Mémoire principale BUS SYSTEME... Entrées Sorties Processeur Registres Opération UAL Instruction unité de commande 126
Bus système Données (32 lignes)... Adresses (32 lignes) mémoire... µ proc. Contrôle (3 lignes) RD/WR ENABLE ACK Exemple de bus système représenté entre processeur et mémoire (système 32 bits) 127
Bus système Exemple : Une instruction indique au processeur de mettre dans un registre la valeur en mémoire de l'adresse 0x2E00001C Le processeur envoie 0x2E00001C sur les lignes d'adresse Il met RD/WR à 1 (ReaD : lecture) et ENABLE à 0 (activer le module mémoire) La mémoire retrouve la donnée (32 bits) et l'envoie sur les lignes de données La mémoire fait passer ACK de 1 à 0 pour signaler au processeur que l'information est disponible sur les lignes de données 128
Architecture des ordinateurs Processeur : principe de l'exécution de l'instruction à l'action 129
Architecture processeur Processeur : vue simplifiée Mémoire Entrées Sorties Registres R0 R2 R4 R1 R3 R5 Processeur commande transferts mémoire et E/S registres Lecture instruction sélection opérandes Opération UAL sélection opération Instruction sélection destination Unité de commande 130
Processeur Registers A B C D b ALU c clock Flags Unité de commande Modèle générique de µ-processeur IR = Instruction Register IP = Instruction Pointer Flags = Condition Flags data address a sequencer ALU = Arithmetic & Logic Unit ctrl IP + IR decoder d a : chargement instruction b : sélection opérandes sélection place résultat c : sélection opération d : contrôle des accès mémoire et E/S 131
Processeur Registers A B C D b ALU c Flags clock Modèle générique de µ-processeur IR = Instruction Register IP = Instruction Pointer Flags = Condition Flags data address a sequencer ALU = Arithmetic & Logic Unit ctrl IP + IR decoder d a : chargement instruction b : sélection opérandes sélection place résultat c : sélection opération d : contrôle des accès mémoire et E/S 132
Processeur! Un programme en train de s'exécuter est une séquence d'instructions en mémoire Le registre d'instruction IR contient le code correspondant à l'instruction courante Le pointeur instruction (ou "compteur ordinal") IP contient l'adresse mémoire de la prochaine instruction à exécuter Le registre Flags de codes conditions est un ensemble de bits résumant l'issue de la dernière opération de calcul ou de comparaison 133
Déroulement d'un programme Les instructions d'un programmes sont stockées en mémoire à des adresses successives Une nouvelle instruction est chargée depuis la mémoire, à l'adresse indiquée par le pointeur instruction (IP), vers le registre d'instruction (IR) Si l'instruction n'est pas un branchement Le pointeur instruction est augmenté de la taille de l'instruction (il pointe donc sur l'instruction suivante) L'instruction est exécutée Si l'instruction est un branchement effectif Le pointeur instruction est mis à l'adresse de départ de la nouvelle séquence d'instructions à entamer 134
Déroulement d'une instruction Le décodeur sépare les différentes informations du code de l'instruction Quel est le type d'instruction? Si c'est un branchement conditionnel, celui-ci estil effectif (selon Flags)? Quels sont les registres concernés? Le séquenceur émet à partir de ces informations l'enchaînement de signaux qui réalise l'action au niveau registres, bus, UAL Dans ce schéma, l'exécution d'une instruction peut nécessiter plusieurs cycles horloge 135
Processeur La largeur du bus de données est souvent la même que la largeur des registres internes. Les système courants sont ainsi qualifiés de 8 bits : aujourd'hui réservés aux microcontrôleurs pour des applications embarquées légères 16 bits : applications embarquées, systèmes anciens 32 bits : applications embarquées évoluées (smarts...) génération précédente de micro-ordinateurs 64 bits : génération actuelle de micro-ordinateurs 128 bits : systèmes dédiés (processeurs graphiques) ou applications hautes performances (calcul scientifique) Le nombre de registres généraux reste limité 8 (IA32) 16 (ARM) 32 (MIPS) 128 (Itanium) 136
Processeur : instructions! 3 catégories principales d'instructions : Transferts de données Entre registre et mémoire ou E/S Entre registres Opérations arithmétiques ou logiques Arithmétique entière usuelle à 2 opérandes Opérateurs booléens NON, ET, OU, décalages Comparaisons Modification du déroulement de la séquence Branchements non conditionnels Branchements conditionnels : choix de séquence en fonction du résultat d'une opération (CCR) Appels de sous programmes et retours appelant 137
Processeur : instructions i Instructions pour calculs flottants Les processeurs évolués disposent d'une unité de calcul en virgule flottante (nombres à virgule avec puissances de 10) : FPU = Floating Point Unit Ces processeurs disposent d'instructions spécifiques pour lancer les opérations sur des opérandes de types nombres flottants Sans unité câblée adaptée pour une opération particulière (flottants, division...) il faut procéder à l'opération en plusieurs étapes par programme (plus long!) 138
Architecture des ordinateurs Jeu d'instructions 139
Processeur : jeu d'instructions! L'association entre le code de l'instruction et les actions effectuées par le processeur est déterminée par le schéma de câblage du décodeur et du séquenceur C'est le niveau du passage du logiciel (instructions sous formes d'informations) au matériel (actions effectives), on dit que les instructions sont exécutées 140
Exemple d'instruction x86 Exemple de codage binaire d'une instruction sur processeur type Intel (x86): Faire registre A + registre B mettre résultat dans registre A 0000001111000011 = 0x03C3 add eax, ebx Instruction machine Notation "humaine" : assembleur 141
Processeur : jeu d'instructions! Chaque type de processeur possède son propre système d'associations entre codes d'instructions et actions effectives Cet ensemble dépend aussi du nombre et de la largeur des registres, des opérations possibles... L'ensemble des instructions qu'un type de processeur peut exécuter s'appelle le jeu d'instructions (instruction set) C'est le ''vocabulaire'' du processeur 142
Processeur : jeu d'instructions Le concepteur du µprocesseur définit Registres, chemins de données (Bus) Actions possibles (calculs, copies, accès bus...) Codage instructions actions La liste des instructions (jeu d'instruction) possibles sur ces dispositifs matériels Cet ensemble de définitions constitue l'isa : Instruction Set Architecture 143
Processeur : jeu d'instructions Exemple : l'architecture IA32 caractérise l'ensemble des processeurs compatibles avec la famille Intel des PCs 32 bits. ( IA32 = Intel Architecture 32 bits) Toute instruction (et donc tout programme) exécutable sur un processeur IA32 est exécutable sur un autre processeur IA32, même si le fabriquant est différent (AMD...) Les détails d'implémentation peuvent cependant varier : on parle alors de micro-architectures différentes 144
Processeur : jeu d'instructions Actuellement les processeurs de PC sont 64 bits : x64 alias x86-64 alias IA32e alias Intel 64 alias AMD64 Ces architectures de processeurs 64 bits sont compatibles au niveau du jeu d'instruction Il s'agit d'une extension du jeu d'instruction IA32. Les anciens programmes 32 bits peuvent encore fonctionner sur ces architectures : on parle de compatibilité ascendante 145
Architecture des ordinateurs Niveaux de programmation Compilation et interprétation 146
Niveaux de programmation Le code exécuté par un processeur peut être qualifié de langage machine A un niveau fondamental il s'agit de mots binaires (souvent 2, 3 ou 4 octets) respectant un ensemble de conventions directement exploitables par les circuits logiques du décodeur et du séquenceur... Programmer en langage machine revient à remplir une file d'octets avec des nombres qui correspondent à des instructions (futures actions du processeur) 147
Niveaux de programmation Une 1ère étape historique en programmation a été d'écrire (en langage machine) des programmes capables de transformer un code lisible, utilisant des symboles et des mnémoniques, en code exécutable Un tel programme est appelé assembleur Le langage utilisé est également appelé langage assembleur ou juste "assembleur" Il s'agit essentiellement d'une transformation directe syntaxique (tables de correspondance) 148
Niveaux de programmation Assemblage Langage assembleur 68000 Langage machine 68000 (exécutable) 149
Niveaux de programmation Une 2ème étape historique en programmation a été d'écrire (en assembleur) des programmes capables de transformer un code structuré doté d'abstraction, en code assembleur. Le code assembleur étant ensuite assemblé en exécutable Il s'agit d'une transformation complexe impliquant un niveau d'analyse grammaticale De tels programmes sont des compilateurs pour des langages dits de haut niveau tels que le C ou le C++ 150
Niveaux de programmation int main(){ int i,max; int tab[5]={3,2,7,1,4}; } max=tab[0]; for (i=1;i<5;i++) if (max<tab[i]) max=tab[i]; return max; Langage C Compilation Assembleur IA32 _main: push ebp mov ebp, esp sub esp, 72 and esp, -16 mov eax, 0 add eax, 15 add eax, 15 shr eax, 4 sal eax, 4 mov [ebp-60], eax mov eax, [ebp-60] call alloca call main mov [ebp-56], 3 mov [ebp-52], 2 mov [ebp-48], 7 mov [ebp-44], 1 mov [ebp-40], 4 mov eax, [ebp-56] mov [ebp-16], eax mov [ebp-12], 1 L2: cmp [ebp-12], 4 jg L3 mov eax, [ebp-12] mov eax, [ebp-56+eax*4] cmp eax, [ebp-16] jle L4 mov eax, [ebp-12] mov eax, [ebp-56+eax*4] mov [ebp-16], eax L4: lea eax, [ebp-12] inc [eax] jmp L2 L3: mov eax, [ebp-16] leave ret 151
Niveaux de programmation Le langage de haut niveau compilé en assembleur est ensuite assemblé en exécutable Exécutable IA32 (Pentium) 152
Niveaux de programmation! Principe d'un langage compilé Code source MonProg.c Langage C ou autre langage compilé Compilation : terme générique pour le passage du source à l'exécutable Compilation (exécution d'un compilateur) Code intermédiaire Langage Assembleur Assemblage (exécution d'un assembleur) Code exécutable MonProg.exe Langage machine 153
Niveaux de programmation! Le programme (qui s'exécute) c'est le.exe Source haut niveau Code source MonProg.c Compilation : Une seule fois Plus besoin du code source Plus besoin du compilateur Code exécutable MonProg.exe Code exécutable MonProg.exe Code exécutable MonProg.exe Distribution de l'exécutable Exécution 1 Exécution 2 Matériel Matériel... 154
Niveaux de programmation! On peut désassembler un.exe pour étudier le comportement à bas niveau d'un programme, instruction par instruction Décompilation pas vraiment possible add eax, ebx Code intermédiaire Langage assembleur Désassemblage possible! 0000001111000011 Code exécutable MonProg.exe Langage machine 155