Cours d'architecture des ordinateurs PDF - Licence 1 Informatique
Document Details

Uploaded by HilariousPsaltery7228
Université de Douala
2024
Dr NFONGOURAIN MOUGNUTOU R.
Tags
Related
- Architecture des Ordinateurs & Réseaux PDF
- Chapitre 1 Introduction à L'architecture des Ordinateurs PDF
- Architecture d'un Ordinateur PDF
- Architectures des Ordinateurs 1 - Chapitre 4 PDF
- Chapitre 1 Architecture de l'Ordinateur PDF
- Architecture des Ordinateurs et Systèmes Logiques PDF - IHEC 1BI - 2024-2025
Summary
Ce cours d'architecture des ordinateurs, destiné aux étudiants de Licence 1 Informatique, explore les fondements de l'organisation des machines. Il aborde les généralités, le fonctionnement du processeur, la mémoire, et d'autres concepts clés. Le cours vise à fournir une compréhension approfondie des principes de base de l'informatique.
Full Transcript
UNIVERSITE DE DOUALA FACULTE DES SCIENCES Mathématiques et Informatique COURS D’ARCHITECTURE DES ORDINATEURS Licence 1 Informatique IN...
UNIVERSITE DE DOUALA FACULTE DES SCIENCES Mathématiques et Informatique COURS D’ARCHITECTURE DES ORDINATEURS Licence 1 Informatique INF 121 Par : Dr NFONGOURAIN MOUGNUTOU R. Année Académique 2024/2025 Cours d’architecture des ordinateurs Page 1 sur 54 Plan du cours I. Généralités......................................................................................................................... 2 I.1 Introduction................................................................................................................. 2 I.2 Structure et fonctionnement d’un ordinateur............................................................... 3 I.3 Technologie numérique............................................................................................... 6 II. Processeur.......................................................................................................................... 8 II.1 Le microprocesseur...................................................................................................... 9 II.1.1 Architecture, caractéristiques et instructions........................................................ 9 II.1.2 Modes, jeu d’instructions, et architectures RISC/CISC..................................... 19 II.2 Langage assemblage.................................................................................................. 23 II.3 Fonctionnalités et performances................................................................................ 27 II.4 Exemples : génération Intel et compatibles............................................................... 31 III. Mémoire........................................................................................................................... 32 III.1 Vue d’ensemble......................................................................................................... 32 III.2 Constitution et organisation....................................................................................... 35 III.2.1 Mode d’accès...................................................................................................... 38 III.2.2 Caractéristiques et hiérarchisation..................................................................... 39 III.2.3 Performances...................................................................................................... 42 III.2.4 RAM, ROM et cache.......................................................................................... 43 IV. Références........................................................................................................................ 52 Page 1 sur 54 Objectifs o Décrire et comprendre l'organisation des machines o Comprendre le fonctionnement d’un ordinateur à bas niveau. I. Généralités I.1 Introduction L’architecture des ordinateurs constitue un vaste sujet en constante évolution. En 20 ans, la vitesse d’un processeur standard a été multipliée par un facteur 1 000 et le coût par unité de performance a plongé d’un facteur 100 000. Ce cours d’Architecture des Ordinateurs expose les principes de fonctionnement des ordinateurs. Il ne s’agit pas ici d’apprendre à programmer, mais de comprendre, à bas niveau, l’organisation de ces machines. Un ordinateur est une machine, presque toujours électronique, qui exécute des programmes. Ces programmes traitent des données. Une machine électronique est un objet. Par opposition, les programmes et les données sont des informations. Cette opposition est celle qui existe entre matériel et logiciel. Le PC PC (Personal Computer) est un ordinateur personnel, mais tous les ordinateurs personnels ne sont pas des PC. Par exemple, les Macintosh d’Apple, basés sur un processeur IBM ou Motorola, sont incontestablement des ordinateurs personnels. Un PC est plus qu’un ordinateur personnel. Il a tout d’abord pour particularité d’appartenir à la famille du PC IBM original, lancé en 1981. De fait, c’est IBM qui a inventé le type d’ordinateur appelé aujourd’hui PC. Un PC moderne est à la fois simple et compliqué. Il est simple dans le sens où, au fil des ans, de nombreux composants utilisés auparavant pour construire un PC ont par la suite été intégrés à d’autres composants, l’objectif étant de réduire le nombre total de composants. Il est compliqué dans le sens où chaque composant prend en charge beaucoup plus de fonctions que sur les modèles plus anciens. Le Tableau suivant présente succinctement tous les composants d’un PC moderne. Cours d’architecture des ordinateurs Page 2 sur 54 Tableau 1 : Composant d’un PC Les PC peuvent être classés de deux manières : par types de logiciels qu’ils sont en mesure d’exécuter et par types de bus hôtes de la carte mère, ou encore par architectures et par largeurs du bus processeur. Ce cours n’étant pas centré sur les PCs, tous ces composants ne seront pas d’avantage détaillés, par contre les composants de base directement impliqués dans le traitement de l’information seront abordés en détails. I.2 Structure et fonctionnement d’un ordinateur Information et ordinateur Cours d’architecture des ordinateurs Page 3 sur 54 Un ordinateur ou calculateur numérique est une machine capable de traiter de l’information mais aussi les mémoriser et les transmettre. Il fait appel à 2 fonctions essentielles : le stockage de l'information et le traitement de l'information. L’information doit pouvoir circuler sous forme électrique, elle devra donc être codée. L’ordinateur permet donc : Stockage (ou mémorisation). Une information est stockée dans une mémoire si on ne veut pas qu’elle disparaisse. Traitement des informations. On peut réaliser des opérations de combinaison d’informations pour générer de nouvelles informations. Dans le cas des ordinateurs, il s’agit très souvent d’opérations arithmétiques de calcul et de comparaison. Transmission des informations. Les informations traitées dans l’ordinateur peuvent provenir de dispositifs matériels (capteur de température par exemple). Elles peuvent provenir d’un utilisateur via un clavier, une souris,... En d’autres termes l’ordinateur est capable d’acquérir de l’information, de la stocker, de la transformer en effectuant des traitements quelconques, puis de la restituer sous une autre forme. Le mot informatique vient de la contraction des mots information et automatique. Architecture Pour traiter une information, il faut l’insérer au sein d’un système minimum de traitement programmé de l’information. John Von Neumann est à l'origine d'un modèle de machine universelle de traitement programmé de l’information (1946). Figure 1 : Architecture de Von Neumann Tout ordinateur est un ordinateur de type Von Neumann qui caractérise bien la quasi-totalité des ordinateurs actuels. Il est composé des éléments suivants : une mémoire centrale pour le stockage des informations (programme et données); un microprocesseur ou processeur central (en remplacement d’Unité Centrale ) pour le traitement des informations logées dans la mémoire centrale. des unités de contrôle des périphériques; un bus de communication entre ces différents modules. La mémoire centrale Les informations sont codées sous forme numérique. Les instructions, les caractères, les couleurs, etc., sont représentés par des suites de chiffres binaires. Les informations sont stockées dans une mémoire dans des emplacements numérotes nommés mots. Le numéro d’un emplacement est son adresse. Le maintien de la correspondance entre le nom de l’information Cours d’architecture des ordinateurs Page 4 sur 54 et l’adresse du mot mémoire où est rangée une de ses représentations est une tâche difficile et une préoccupation permanente en informatique. Une écriture dans la mémoire associe une valeur à une adresse (on parle aussi d’affectation). Après une écriture, on peut exécuter une ou plusieurs lectures de la même information. La lecture fournit la valeur associée à cette adresse. La mémoire est à affectations multiples : on peut écrire successivement plusieurs valeurs dans un mot. Chaque écriture associe une nouvelle valeur à l’adresse. Elle induit un changement de l’état de la machine, en détruisant l’association précédente. Elle n’est pas réversible : il n’est pas possible d’annuler la nouvelle association pour accéder à nouveau à l’ancien contenu. La mémoire contient des données et des programmes constitues de suite d’instructions. Le codage de l’information est tel que rien ne permet de reconnaître une représentation de donnée et une représentation d’instruction. Le processeur Le processeur exécute les instructions. Les instructions sont généralement exécutées dans l’ordre où elles sont écrites dans la mémoire, mais certaines instructions peuvent introduire des ruptures de cette séquentialité. La règle générale est donc la correspondance entre l’ordre de rangement en mémoire et l’ordre d’exécution. L’instruction en cours d’exécution est repérée par son adresse. Cette adresse est stockée dans une partie du processeur appelé pointeur d’instruction, compteur ordinal ou compteur programme. Le processeur est doté au minimum de deux éléments de mémorisation particuliers appelés des registres : le compteur ordinal déjà cité et le registre d’instruction dans lequel le processeur stocke une copie de l’instruction en cours d’exécution. Le processeur exécute cycliquement la tâche suivante dite d’interprétation des instructions ou d’exécution des instructions : Lecture de l’instruction à exécuter : le processeur transmet à la mémoire l’adresse de l’instruction à lire, autrement dit le contenu du compteur ordinal, et déclenche une opération de lecture. Il reçoit en retour une copie de l’instruction qu’il stocke dans son registre d’instruction. Décodage : le processeur examine le contenu du registre d’instruction et détermine l’opération à effectuer. Si le contenu du registre ne correspond pas à une instruction valide, c’est une erreur. En effet, en fonctionnement normal, le compteur programme pointe sur un mot mémoire contenant une instruction. Le décodage est le moyen de vérifier qu’une information est bien une instruction. Exécution : le processeur effectue l’opération d´écrite par l’instruction. Cette exécution met souvent en jeu une unité de calcul ou Unité Arithmétique et Logique. Cet opérateur effectue des calculs sur les données stockées dans des registres de calcul ou accumulateurs. Sélection de l’instruction suivante : le processeur calcule l’adresse de l’instruction suivante. Cela se fait le plus souvent en ajoutant 1 au compteur ordinal. Cours d’architecture des ordinateurs Page 5 sur 54 Liaison entre le processeur et la mémoire Le processeur dialogue avec la mémoire via trois sortes de fils électriques groupés en paquets nommés bus : 1. le bus d’adresse transmet du processeur vers la mémoire l’information adresse. 2. le bus de données transporte le contenu de l’emplacement mémoire auquel on accède. Le terme de bus de valeur aurait été plus explicite : le processeur peut interpréter la valeur qui transite sur ce bus comme une donnée ou comme une instruction. 3. des signaux complémentaires précisent à quel instant a lieu l’accès (Accès mémoire) et dans quel sens (Lecture/Ecriture). Cette architecture sert de base à la plupart des systèmes à microprocesseur actuel. L'architecture d'un système à microprocesseur représente l’organisation de ses différentes unités et de leurs interconnexions. Le choix d'une architecture est toujours le résultat d'un compromis : entre performances et coûts entre efficacité et facilité de construction entre performances d'ensemble et facilité de programmation etc I.3 Technologie numérique Tous les circuits électroniques sont composés de transistors, de l’ordre du milliard dans les processeurs actuels. Comme il est impossible d’étudier leur comportement individuel, ils ont été modélisés et regroupés sous forme de circuits élémentaires. L’information véhiculée sur les fils internes de l’ordinateur peut prendre deux valeurs, 0 ou 1, correspondant à deux niveaux de tension. Classiquement, le 0 est associé au niveau bas de la tension, proche de 0 V, alors que le 1 est associé au niveau haut, historiquement de 5 V, mais qui a diminué et est maintenant proche de 1 V. Cette information circule à travers les différents circuits de l’ordinateur, travaillant en logique numérique. Cette logique numérique est à opposer au calcul analogique, dans lequel l’entrée peut prendre n’importe quelle valeur d’un intervalle continu. Le calcul analogique s’est développé au XIXe siècle et au début du XXe siècle mais a dû céder sa place en raison d’un manque de précision : comme toutes les valeurs sont autorisées, la moindre perturbation change le calcul ; à l’inverse, comme le numérique n’autorise que deux valeurs, une légère fluctuation de tension sur un fil ne modifie rien. On distingue deux types de circuits logiques dont le fonctionnement est différent : les circuits combinatoires et les circuits séquentiels. Les premiers expriment simplement leurs sorties à partir de leurs entrées ; les seconds font dépendre leurs sorties de leurs entrées mais également des sorties précédentes. Circuits combinatoires Cours d’architecture des ordinateurs Page 6 sur 54 Un circuit combinatoire est constitué d’un ensemble de portes logiques. Certaines sont :NON, OU, ET. Les entrées du circuit sont connectées à des entrées de portes. Les sorties du circuit combinatoire proviennent de sorties de portes. A l’intérieur du circuit il peut y avoir plusieurs circuits combinatoires ou portes successifs, les sorties des uns ´étant reliées aux entrées des autres. Un circuit combinatoire (voir figure suivante) est un être physique. Il occupe une certaine surface, consomme une certaine puissance ´électrique, puissance qui est dissipée sous forme thermique, il n’établit les valeurs correctes de ses sorties qu’un certain délai après le changement de ses entrées. Les concepteurs de circuits cherchent généralement à obtenir un circuit ayant la plus petite surface possible, donnant les d´délais de réponse les plus brefs possibles et consommant/dissipant le moins d’´énergie possible. Ces trois critères participent au coût d’un circuit. Un autre critère de coût est la régularité du circuit, c’est-à-dire, indirectement, le temps n´nécessaire à sa conception et à son dessin. Plus un circuit comporte de fois un bloc répète, moins il est difficile de le concevoir. Figure 2 : Exemple de circuit combinatoire Le délai de réponse d’un circuit combinatoire provient de l’accumulation des délais des différentes portes et interconnexions entre les entrées et les sorties. Par approximation, on considère souvent que les délais de portes cascadées s’ajoutent. Des valeurs transitoires peuvent apparaitre. Mais au bout d’un certain temps les sorties sont stabilisées. Dans un circuit combinatoire, une sortie ne peut se mettre à osciller indéfiniment. Un circuit ´électronique fabricant un tel signal oscillant est très utile mais n’est pas un circuit combinatoire. Par exemple le circuit présente figure précédente peut donner le comportement décrit par la figure suivante. Nous y distinguons des entrées idéales (par d´définition booléennes), des sorties telles qu’elles pourraient être observées (entre 0 et 5 Volts) et des sorties idéales (booléennes aussi). On trouve souvent une représentation avec des sorties indéterminées pendant le délai de réponse. Nous la faisons figurer aussi. C’est évidemment la situation la plus réaliste, mais elle n’est pas booléenne. Cours d’architecture des ordinateurs Page 7 sur 54 Figure 3 : Comportement circuit combinatoire II. Processeur Les systèmes à microprocesseurs sont multiples et variés énormément. On peut citer l’ordinateur (PC), télévision, téléphone portable, robotique, etc. La figure suivante montre l’architecture matérielle simplifiée d’un ordinateur. Figure 4 : Architecture matérielle simplifiée d’un ordinateur Cours d’architecture des ordinateurs Page 8 sur 54 Les deux principaux constituants de ces systèmes sont la mémoire principale et le processeur. La mémoire principale permet de stocker de l’information (programmes et données), tandis que le processeur exécute pas à pas les instructions composant les programmes. Pour pouvoir exécuter une application, il faut amener les instructions la composant ainsi que les données dont elle a besoin dans une mémoire beaucoup plus rapide (c’est-à-dire d’où on peut extraire très vite une information précise) ; il s’agit de la mémoire principale. Elle est constituée de circuits intégrés (pièce électronique dans un boîtier composé de nombreux transistors gravés dans un matériau semi-conducteur) dont la cellule de base est une bascule. L’unité de base est l’octet (8 bits) et on peut voir la mémoire comme un ensemble ordonné d’octets dans lequel chaque case mémoire (donc chaque octet) a une adresse numérique. La mémoire principale est un composant passif dans le sens où elle ne fait qu’obéir à des commandes. Le processeur peut lui demander de stocker une donnée à une adresse précise (écriture mémoire) ou de fournir une donnée se trouvant à telle ou telle adresse (lecture mémoire). Dans les deux cas, la mémoire effectue l’opération et attend la demande suivante. Le processeur est relié à la mémoire via le bus principal de l’ordinateur (ensemble de fils véhiculant les informations et les commandes). Comme le processeur est en permanence en train de travailler avec la mémoire (car il y récupère tout ce dont il a besoin, données et instructions), le bus doit être le plus efficace possible. L’augmentation des performances de l’ordinateur passe également par l’amélioration de la bande passante de ce bus. Celle-ci indique simplement le débit d’informations pouvant circuler sur le bus (en octets par seconde) ; plus il est important, plus le processeur peut travailler rapidement avec la mémoire. Le progrès technologique a permis de construire des boîtiers mémoire de grande capacité et pouvant répondre rapidement aux sollicitations du processeur. Mais cette amélioration est restée bien en deçà de la formidable accélération des processeurs. Ceux-ci passaient une bonne partie de leur temps à attendre que la mémoire réagisse aux demandes, d’où une perte d’efficacité importante due à ces temps d’attente. Il a donc fallu compliquer un peu le schéma en intercalant entre la mémoire principale et le processeur une mémoire encore plus rapide (mais plus chère et de capacité moindre), appelée « mémoire cache » ou simplement « cache ». Comme la contrainte majeure est la vitesse de réaction et de transfert, ce cache est directement en prise avec le processeur Avec l’ensemble des éléments qui essaient de communiquer avec le processeur, il risquerait d’y avoir des conflits d’accès au bus principal. Le contrôleur gère donc les différentes demandes pour garantir à chacun un libre accès au bus. Il permet également le passage des informations du bus d’entrées/sorties au bus principal (et réciproquement) en gérant les différences de format de données et de vitesse de transfert entre les deux bus. II.1 Le microprocesseur II.1.1 Architecture, caractéristiques et instructions Architecture Le processeur est un circuit électronique complexe qui exécute chaque instruction très rapidement, en quelques cycles d’horloges. Cours d’architecture des ordinateurs Page 9 sur 54 Figure 5 : Architecture du microprocesseur Il est constitué de quatre parties : l’unité arithmétique et logique (UAL), les registres, l’unité commande et le bus de communication interne permettant l’échange des données et des commandes entre les différentes parties du microprocesseur. A l’exception du bus qui sera abordé en détail dans la section qui lui sera dédié, les autres composantes sont décris dans cette partie. Les registres Des éléments de mémorisation sont aussi nécessaires pour réaliser des machines s´séquentielles. D’une façon générale, il s’agit de savoir comment réaliser la fonction d’affectation des langages de haut niveau : x ←− f(a, b, c). La mémorisation peut avoir lieu chaque fois qu’une des variables a, b ou c est modifiée (comportement asynchrone) ou à des instants fixés par une entrée spécifique ne dépendant pas des autres entrées (comportement synchrone). Un cas particulier de ce type d’affectation est : x ←− f(x, e) où les deux instances du nom x correspondent aux valeurs de x sur une même nappe de fils, à des instants différents. Ce n’est pas une ´équation de point fixe. On la lit par exemple, comme dans un langage de programmation usuel, nouveau-x ←− f (ancien-x, e). Considérons une chaîne de 2k (k ≥ 1) inverseurs, la sortie de l’un ´étant connectée à l’entrée du suivant. Si nous rebouclons la sortie de la chaîne d’inverseurs sur l’entrée, nous obtenons un circuit séquentiel à deux états stables, ou bistable. On peut avoir k = 1 le bistable ne peut que fournir sa valeur à un autre composant, il n’est pas possible de le charger avec une valeur particulière, il peut être lu, mais on ne peut y écrire. Une bascule RS possède deux entrées R (Reset) et S (Set) permettant de forcer l’´état respectivement à 0 ou à 1, et deux sorties Q1 et Q2. Cours d’architecture des ordinateurs Page 10 sur 54 Un verrou à n bits permet de stocker des informations codées sur plus d’un bit. On l’obtient par simple juxtaposition de verrous élémentaires commandés par le même signal de chargement. Sur le même principe, en utilisant des bascules D, on obtient un registre à n bits. Les registres sont des zones de mémorisation de l’information internes au microprocesseur. Ils sont construits à l’aide de circuits logiques séquentiels afin de pouvoir mémoriser des bits. Leur intérêt principal est de pouvoir travailler avec des données localisées directement dans le processeur et donc d’un accès beaucoup plus rapide que celles situées en mémoire principale. Les registres généraux (regroupés dans un banc de registres) sont à la disposition du programmeur en assembleur (ou du compilateur si l’on code en langage évolué), qui les utilise à sa guise dans les instructions pour manipuler des données. En plus des registres généraux, chaque processeur possède des registres spécialisés nécessaires au bon déroulement des instructions. Le registre d’état (State Register ou Program Status Word) est tel que ses bits ne forment pas de valeur numérique mais servent d’indicateurs (aussi appelés « drapeaux » ou flags) sur l’état du processeur. Certains bits peuvent être positionnés par le programmeur pour demander un comportement particulier (par exemple fixer un niveau de masquage des interruptions, d’autres (appelés « bits conditions ») sont automatiquement mis à jour par le séquenceur à la fin de l’exécution de chaque instruction. Ils sont utilisés pour les sauts conditionnels en liaison avec les instructions de test et de comparaison. La « condition » liée à un branchement conditionnel consiste toujours en un test d’une valeur particulière d’un ou plusieurs bits conditions, positionnés par l’instruction précédente. Certains de ces bits, tels ceux qui suivent, sont suffisamment universels pour qu’on les retrouve sur tous les modèles de processeurs (mais leur nom peut varier) : Le bit Z (Zero). Il est mis à 1 si le résultat de l’instruction est nul, sinon il est mis à 0. Le bit C (Carry). Il est mis à 1 si l’instruction génère une retenue finale, sinon il est mis à 0. Le bit N (Negative). Il est mis à 1 si le résultat de l’instruction est négatif, sinon il est mis à 0 ; c’est la recopie du bit de poids fort du résultat. Le bit V (oVerflow). Il est mis à 1 si l’instruction génère un débordement arithmétique, sinon il est mis à 0. Cours d’architecture des ordinateurs Page 11 sur 54 L’utilisation de ces bits conditions se fait toujours de la même manière : d’abord, on effectue un calcul, un test ou une comparaison, positionnant les bits conditions suivant le résultat que l’on veut obtenir, puis l’on effectue un saut conditionnel sur ces bits. L’unité arithmétique et logique (UAL) Ce composant est chargé de l’exécution de tous les calculs que peut réaliser le microprocesseur. Cette unité est constituée de l’ensemble des circuits arithmétiques et logiques permettant au processeur d’effectuer les opérations élémentaires nécessaires à l’exécution des instructions machine. Elle inclut donc les circuits d’addition, de soustraction, de comparaison, etc. Dans ce module se trouvent également des registres dont l’objet est de contenir les données sur lesquelles vont porter les opérations à effectuer. Par exemple, l’UAL possède deux registres d’entrée (E1 et E2) et un registre de sortie (S). Pour faire une addition : la première donnée est placée dans E1 via le bus interne de données; la seconde donnée est placée dans E2 via le bus interne de données; la commande d’addition est délivrée au circuit d’addition via le bus interne de commandes; le résultat est placé dans le registre S. On note également un registre particulier, le PSW (Program Status Word), qui joue un rôle fondamental de contrôle de l’exécution d’un programme et qui à tout instant donne des informations importantes sur l’état de notre microprocesseur. Par exemple puisque nous travaillons sur des mots de longueur finie la valeur d’un entier codé sur un mot ne peut dépasser la valeur maximale représentable sur ce mot. Lorsque nous faisons l’addition de deux entiers le résultat peut avoir une valeur qui n’est pas représentable sur un mot mémoire : il y a alors dépassement de capacité. Ce dépassement de capacité doit être signalé et noté pour ne pas perturber le fonctionnement de l’ordinateur. Ce type d’information est stocké dans le PSW. L’unité de commande Elle exécute les instructions machines et pour cela utilise les registres et l’UAL du microprocesseur. On y trouve deux registres pour la manipulation des instructions (le compteur ordinal CO, le registre d’instruction RI), le décodeur, le séquenceur et deux registres (le registre d’adresses RAD et le registre de données RDO) permettant la communication avec les autres modules via le bus. Enfin, via le bus de commandes, elle commande la lecture et/ou l’écriture dans la mémoire centrale. Le compteur ordinal CO C’est un registre d’adresses. À chaque instant il contient l’adresse de la prochaine instruction à exécuter. Lors de l’exécution d’une instruction il est prévu, au cours de cette exécution, la modification du contenu du CO. Ainsi en fin d’exécution de l’instruction courante le compteur ordinal pointe sur la prochaine instruction à exécuter et le programme machine peut continuer à se dérouler. Le registre d’instruction RI C’est un registre de données. Il contient l’instruction à exécuter. Cours d’architecture des ordinateurs Page 12 sur 54 Le décodeur Il s’agit d’un ensemble de circuits dont la fonction est d’identifier l’instruction à exécuter qui se trouve dans le registre RI, puis d’indiquer au séquenceur la nature de cette instruction afin que ce dernier puisse déterminer la séquence des actions à réaliser. Le séquenceur Il s’agit d’un ensemble de circuits permettant l’exécution effective de l’instruction placée dans le registre RI. Le séquenceur exécute, rythmé par l’horloge du microprocesseur, une séquence de microcommandes (micro-instructions) réalisant le travail associé à cette instruction machine. Pour son fonctionnement le séquenceur utilise les registres et l’UAL. Ainsi l’exécution effective d’une instruction machine se traduit par l’exécution d’une séquence de micro-instructions exécutables par les circuits de base du microprocesseur. Le registre RAD C’est un registre d’adresses. Il est connecté au bus d’adresses et permet la sélection d’un mot mémoire via le circuit de sélection. L’adresse contenue dans le registre RAD est placée sur le bus d’adresses et devient la valeur d’entrée du circuit de sélection de la mémoire centrale qui va à partir de cette entrée sélectionner le mot mémoire correspondant. Le registre RDO C’est un registre de données. Il permet l’échange d’informations (contenu d’un mot mémoire) entre la mémoire centrale et le processeur (registre). Ainsi lorsque le processeur doit exécuter une instruction il : place le contenu du registre CO dans le registre RAD via le bus d’adresses et le circuit de sélection; déclenche une commande de lecture mémoire via le bus de commandes; reçoit dans le registre de données RDO, via le bus de données, l’instruction; place le contenu du registre de données RDO dans le registre instruction RI via le bus interne du microprocesseur. Pour lire une donnée le processeur : place l’adresse de la donnée dans le registre d’adresses RAD; déclenche une commande de lecture mémoire; reçoit la donnée dans le registre de données RDO; place le contenu de RDO dans un des registres du microprocesseur (registres généraux ou registres d’entrée de l’UAL). On dit que pour transférer une information d’un module à l’autre le microprocesseur établit un chemin de données permettant l’échange d’informations. Par exemple pour acquérir une instruction depuis la mémoire centrale, le chemin de données est du type : CO, RAD, commande de lecture puis RDO, RI. Caractéristiques Deux paramètres principaux contribuent à identifier un processeur : sa largeur et sa fréquence. La fréquence se mesure en mégahertz (MHz) ou en gigahertz (GHz) et correspond au nombre de millions ou de milliards de cycles par seconde que le processeur est capable d’effectuer (en MIPS : Million d'instructions par seconde). Trois caractéristiques du processeur s’expriment sous la forme d’une largeur : Cours d’architecture des ordinateurs Page 13 sur 54 le bus d’entrées/sorties de données : La largeur du bus de données d’un processeur est extrêmement importante. Un processeur avec un bus de données de 32 bits (comme le 486) lit et écrit des données en mémoire 32 bits à la fois, tandis qu’un processeur dont le bus de données est sur 64 bits (comme la majorité des processeurs actuels) lit et écrit la mémoire 64 bits à la fois. le bus d’adresses : Le bus d’adresses est l’ensemble des fils qui transportent les informations d’adressage utilisées pour décrire la zone de mémoire dans laquelle les données sont envoyées ou depuis laquelle elles proviennent. La taille (ou largeur) du bus d’adresses indique la quantité de RAM maximale que le processeur peut adresser. Les ordinateurs utilisent le système d’adressage binaire (base 2). Ainsi, un nombre à deux chiffres ne pourra représenter que quatre adresses uniques (00, 01, 10 et 11), soit 22 les registres internes : La taille des registres internes d’un processeur est un bon indicateur de la quantité d’informations que celui-ci peut manipuler en un temps donné et de la façon dont il déplace les données en interne. Il est quelquefois fait référence à cela sous l’appellation "bus de données interne" Cycle d’instruction Une instruction doit fournir au CPU toutes les informations pour déclencher une opération. Rappelons que les ordinateurs sont capables de faire un certain nombre d'opérations simples comme additionner 2 nombres, tester le signe d'une valeur numérique, copier le contenu d'un registre à un autre, stocker en mémoire un résultat. Ces opérations de bases font l'objet d'instructions spécifiques. Cycle de recherche d’une instruction Le cycle de recherche d’une instruction se fait en 05 étapes : 1. Transfert de l'adresse de la nouvelle instruction du CO vers RA. 2. Impulsion en lecture générée par l'unité de contrôle et donc transfert de l'instruction dans le RM. 3. Transfert de l'instruction (= code opération + adresse opérande) du RM vers RI. 4. Code opération vers décodeur (détermine le type d'opération) séquenceur Adresse opérande vers RA 5. CO :=CO+1 Cours d’architecture des ordinateurs Page 14 sur 54 Figure 6 : Cycle de recherche d’une instruction Cycle d’exécution d’une instruction L'opération spécifiée durant le cycle de recherche est ensuite effectuée par l'UAL. La séquence exacte des actions coordonnées par le séquenceur dépendra de l'opération : 1. Le séquenceur envoie les signaux de commande pour lire l'opérande à l'adresse déjà stockée dans le RA, et le stocke dans le RM. 2. Transfert du contenu du RM vers UAL. Pour certaines opérations : a) RM vers ACC (avant l'exécution de l'opération) b) ACC vers RM (après exécution, mémorisation du résultat) c) RM vers CO (instruction de branchement) 3. Exécution de l'opération sous contrôle du séquenceur. Cours d’architecture des ordinateurs Page 15 sur 54 Figure 7 : Cycle d’exécution d’une instruction Comment s’exécute un programme Pour être exécutable une instruction doit nécessairement être présente en mémoire centrale. La mémoire centrale contient donc des instructions et des données (voir section sur la mémoire). De plus toutes les informations en mémoire sont codées sur un alphabet binaire. Les informations sont alors, quelle que soit leur nature, des suites de 0 et de 1. Il faut donc pouvoir différencier instructions et données afin que le registre instruction RI contienne bien des instructions et non des données (et réciproquement). Dans le cas contraire le décodeur ne pourrait interpréter la nature du travail à faire (RI ne contenant pas une instruction mais une donnée). En général lors du placement du programme machine et des données dans la mémoire centrale les instructions et les données sont séparées et occupent des espaces mémoires différents (voir figure suivante). À la fin du chargement du programme machine et des données en mémoire le compteur ordinal CO reçoit l’adresse de la première instruction du programme à exécuter. L’exécution peut alors commencer. Le principe général d’exécution est illustré dans la figure suivante. Cours d’architecture des ordinateurs Page 16 sur 54 Les différentes phases de l’exécution d’une instruction sont les suivantes : 1. le contenu du compteur ordinal CO est placé dans le registre d’adresses RAD : il y a sélection de l’instruction à exécuter; 2. une commande de lecture de la mémoire centrale est déclenchée via le bus de commandes; 3. l’instruction est transférée de la mémoire centrale vers le registre instruction RI via le bus de données et le registre de données RDO; 4. le décodeur analyse l’instruction placée dans le registre instruction RI, reconnaît cette instruction et indique au séquenceur la nature de l’instruction; 5. le séquenceur déclenche au rythme de l’horloge la séquence de micro-instructions nécessaires à la réalisation de l’instruction. On peut résumer les étapes de l’exécution d’une instruction (chargement/décodage/exécution) par l’algorithme suivant : Cours d’architecture des ordinateurs Page 17 sur 54 Les opérations charger/modifier réalisent le chargement de l’instruction dans le registre d’instruction RI. Cette phase est la phase dite de FETCH. Enfin, l’exécution d’un programme machine peut être décrite par l’algorithme suivant : Exemple d’exécution d’un programme Le problème consiste à réaliser l’addition de X qui vaut 4 avec Y qui vaut 1 et à placer le résultat dans Z. On souhaite donc, à l’aide de notre ordinateur, réaliser l’opération : Z = X + Y avec X = 4 et Y = 1. Les mots de la mémoire sont des octets (8 bits), tous les registres du microprocesseur ont une largeur de 8 bits, les instructions et les données entières sont codées sur un mot mémoire. Données : X est codé : 00000100 2; Y est codé : 000000012.. Cours d’architecture des ordinateurs Page 18 sur 54 II.1.2 Modes, jeu d’instructions, et architectures RISC/CISC Les modes de processeur Les modes de processeur font référence aux différents environnements de fonctionnement. Ils affectent les instructions et les capacités du processeur. Le mode de processeur détermine la manière dont le processeur voit et gère la mémoire vive ainsi que les tâches qu’il doit exécuter. Il existe trois principaux modes de fonctionnement des processeurs, avec plusieurs modes secondaires : mode réel (logiciel 16 bits); mode IA-32 : inclut le mode protégé (logiciel 32 bits) et le mode réel virtuel (programmes 16 bits dans un environnement 32 bits). mode IA-32e, extension 64 bits (également appelée AMD64, x86-64 ou EM64T) : comprend le mode 64 bits et mode de compatibilité (logiciel 32 bits). Jeu d’instructions La première étape de la conception d’un microprocesseur est la définition de son jeu d’instructions. Le jeu d’instructions décrit l’ensemble des opérations élémentaires que le Cours d’architecture des ordinateurs Page 19 sur 54 microprocesseur pourra exécuter. Il va donc en partie déterminer l’architecture du microprocesseur à réaliser et notamment celle du séquenceur. A un même jeu d’instructions peut correspondre un grand nombre d’implémentations différentes du microprocesseur. Les instructions que l’on retrouve dans chaque microprocesseur peuvent être classées en plusieurs groupes : Transfert de données pour charger ou sauver en mémoire, effectuer des transferts de registre à registre, etc… Opérations arithmétiques : addition, soustraction, division, multiplication Opérations logiques : ET, OU, NON, NAND, comparaison, test, etc… Contrôle de séquence : branchement, test, etc… Architectures RISC et CISC Actuellement l’architecture des microprocesseurs se composent de deux grandes familles : L’architecture CISC (Complex Instruction Set Computer) : cette architecture préconise un petit nombre d'instructions élémentaires dans un format fixe, faciles à réaliser dans le matériel et d'exécution rapide (i.e., une instruction par cycle machine). Cette architecture implique : Séquenceur câblé ; Limite les accès mémoire ; Très bon compilateur. L’architecture RISC (Reduced Instruction Set Computer) : Cette architecture implique un jeux d'instructions très riches de taille variable avec des instructions composés (e.g., racine carré, multiplication de fottants en double précision). Elle implique également un séquenceur microprogramme. Approche CISC Cette approche se caractérise par : un jeu d’instructions très riche et une grande variété de modes d’adressages; un grand nombre d’instructions; des instructions complexes et de longueurs variables afin de répondre à la grande variété des instructions des langages de haut niveau. On peut étayer les raisons de ces choix par les objectifs suivants : simplifier les compilateurs et améliorer leurs performances. Il s’agit ici de réduire la « distance » entre langage de haut niveau et langage machine. On passe plus facilement d’une instruction en langage de haut niveau à la séquence correspondante d’instructions machine; Cours d’architecture des ordinateurs Page 20 sur 54 un jeu d’instructions riche et réalisant des fonctions complexes permet de réduire la taille du programme machine et donc d’économiser de la place en mémoire principale. Quelques conséquences de ces choix : les instructions, pour traduire facilement la complexité du langage de haut niveau, sont de longueurs variables et opèrent souvent sur un seul opérande en mémoire. Cela implique des modalités de gestion complexe et coûteuse en accès mémoire; un grand nombre de modes d’adressages est nécessaire pour caractériser la richesse des structures de données des LHN. L’approche CISC se caractérise par une volonté de rendre indépendant le matériel (architecture interne et langage machine) et le logiciel (les langages de haut niveau). Pour obtenir de bonnes performances avec ce type d’architecture il faut donc : un compilateur qui permet d’utiliser efficacement le jeu d’instructions machine. Or il existe toujours plusieurs manières de passer d’une instruction du langage de haut niveau à la séquence d’instructions machine qui la réalise sur le matériel. Il faut donc essayer de réaliser le meilleur choix possible dans tous les cas ce qui est difficile voire impossible. En fait des études statistiques montrent que les compilateurs utilisent plutôt les instructions simples que les instructions complexes; la complexité des instructions et des modes d’adressage implique un séquencement microprogrammé. Ce type de séquenceur occupe une surface importante qui peut atteindre 60 % de la surface totale du composant ce qui réduit d’autant la place disponible pour implanter un plus grand nombre de registres et des mémoires caches. Ainsi c’est l’examen de la complexité des modes d’adressages, des instructions réellement utilisées par les programmes et la complexité du séquencement qui a conduit à l’évolution vers l’approche RISC. Approche RISC Si dans l’approche CISC la volonté était de séparer la machine matérielle de l’implantation, dans l’approche RISC c’est la volonté d’une optimisation globale (matérielle et logicielle) qui est le moteur : on souhaite réaliser des architectures efficaces pour l’exécution des programmes. La définition des architectures RISC repose sur l’examen statistique de l’exécution de programmes. Ces statistiques ont porté au cours des années 70-80 essentiellement sur l’étude des instructions réellement utilisées, les impacts en temps de l’exécution, les modes d’adressages effectivement utilisés. Dans un langage machine on peut classer les instructions en plusieurs types qui sont : l’affectation, l’itération, l’appel de procédure, les branchements conditionnels et les branchements inconditionnels. Quelques résultats sur ces statistiques et mesures effectuées par Patterson, Seguin, Tanenbaum sont : Cours d’architecture des ordinateurs Page 21 sur 54 si l’on mesure le pourcentage relatif d’une classe d’instruction par rapport à l’ensemble des instructions utilisées dans un programme il apparaît que les affectations avec transfert simple de données sont très majoritaires (60 %); sur les impacts en temps d’exécution. Les appels de procédures représentent 20 % des instructions du langage de haut niveau, 60 % du temps d’exécution des instructions machine et 70 % des temps d’accès à la mémoire. Ce point marque l’importance de l’optimisation des passages de paramètres et du nombre des paramètres; l’essentiel des références mémoire porte sur des variables simples : 75 % sur des constantes et variables scalaires. Les structures de données complexes sont très minoritaires. Ces résultats sont à l’origine des architectures RISC que l’on peut caractériser par : une diminution de la complexité de la partie unité de commande. Le séquenceur est câblé et est donc plus rapide; une diminution de la surface du séquenceur, ce qui permet d’augmenter le nombre de registres et d’utiliser des mémoires caches séparées pour les instructions et les données sur le composant; une simplification des modes d’adressage et des instructions d’où une simplification de la compilation; une implantation d’instructions de longueurs fixes permettant l’utilisation d’un pipeline efficace. La définition donnée par M. Slater donne bien l’idée de cette notion d’optimisation globale : « Un processeur RISC a un jeu d’instruction conçu pour une exécution efficace par un processeur pipeliné et pour la génération de code par un compilateur optimisant ». Cette définition implique une pipeline efficace afin de répondre à l’impératif d’une exécution en un cycle machine. L’exécution efficace par un processeur pipeliné implique les caractéristiques suivantes : instruction de longueur fixe; codage simple et homogène des instructions; exécution en un cycle machine de la plupart des instructions; accès à la mémoire uniquement par les instructions load (chargement d’un mot mémoire dans un registre) et store (placement du contenu d’un registre dans un mot mémoire); modes d’adressages simples; branchements retardés. Au niveau de la traduction par le compilateur ces caractéristiques se traduisent par un format des instructions à trois adresses et un grand nombre de registres. Cours d’architecture des ordinateurs Page 22 sur 54 En somme, l’apparition des processeurs RISC au début des années quatre-vingts a été une remise en cause très forte de l’architecture CISC. L’importance de cette remise en cause a eu l’effet d’une révolution avec ses conséquences : les « anti » et les « pro » qui se sont assez fortement opposés. Le coût plus faible de réalisation de noyaux RISC a permis un développement industriel dont les machines SPARC et MIPS sont le reflet. Des processeurs ayant des performances proches d’une instruction par cycle machine se sont imposés sur le marché; notamment des stations de travail. Ensuite des processeurs superscalaires (entre autres le RS/6000) ont permis l’exécution de plus d’une instruction par cycle machine. Les processeurs RISC se sont imposés sur le marché des stations de travail, des contrôleurs, des machines graphiques, des supercalculateurs. Aujourd’hui on retrouve des architectures RISC comme base d’architectures de machines grand public comme Apple. En fait rien n’est vraiment simple en la matière et les processeurs à architecture CISC ont souvent intégré ces évolutions. D’aucuns disent que l’approche RISC a permis le développement de processeurs CISC efficaces. Les processeurs 80486 et ultérieurs d’Intel et les processeurs Motorola à partir du 68040 intègrent le cache dans le pipeline afin de pouvoir exécuter en un cycle machine les instructions les plus fréquemment utilisées : on voit aujourd’hui les progrès spectaculaires des machines CISC. Aujourd’hui le « pur » RISC a évolué. On trouve dans ces architectures des instructions complexes. On trouve également des architectures mixtes à noyau RISC avec séquenceur câblé et extension CISC à séquenceur microprogrammé. L’apport essentiel de l’approche RISC est la volonté d’une optimisation globale matériel-logiciel-système; en ce sens il s’agit sûrement d’une étape historique de l’évolution de l’architecture des processeurs. II.2 Langage assemblage Le langage d’assemblage est une variante symbolique du langage machine, permettant au programmeur de manipuler les instructions de la machine en s’affranchissant notamment des codes binaires et des calculs d’adresse. Le langage d’assemblage comporte le même jeu d’instructions que le langage machine et est également spécifique de la machine. Pour pouvoir être exécuté par la machine, le programme écrit en langage d’assemblage doit être traduit en langage machine. Cette traduction est effectuée par un outil appelé l’assembleur. L’assembleur est un programme qui traduit le langage d’assemblage en langage machine. Son fonctionnement est très proche de celui du compilateur en phase de génération de code. Format d’une instruction du langage d’assemblage Une instruction du langage d’assemblage est composée de champs, séparés par un ou plusieurs espaces. On identifie un champ étiquette, un champ code opération, un champ opérandes pouvant effectivement comporter plusieurs opérandes séparés par des virgules et un champ commentaires (figure suivante). Cours d’architecture des ordinateurs Page 23 sur 54 Figure 8 : Format d’une instruction en langage d’assemblage. Les étiquettes Une étiquette est une chaîne de caractères permettant de nommer une instruction ou une variable. Une étiquette correspond à une adresse dans le programme, soit celle de l’instruction, soit celle de la variable. Exemple L’étiquette boucle remplace l’adresse binaire de l’instruction ADD Rg2 R1, R0 : Une étiquette peut également permettre de nommer une constante. Codes opérations Le code opération est une chaîne de caractères mnémonique du code opération binaire. Le tableau suivant donne l’exemple de quelques mnémoniques. Tableau 2 : Quelques codes opérations mnémoniques Les opérandes Chaque opérande dans une instruction du langage d’assemblage possède un nom permettant de le référencer. Les opérandes d’une instruction sont séparés par une virgule. Pour les opérandes variables ou constantes, le nom est l’étiquette associée par le programmeur au moment de la déclaration des variables et constantes. Pour les opérandes adresse d’instruction, le nom est l’étiquette associée à l’instruction par le programmeur. Chaque registre de la machine est Cours d’architecture des ordinateurs Page 24 sur 54 référencé par un nom : R0, R1, R2, …, R11. Le mode d’adressage d’un opérande mémoire est spécifié par une chaîne placée après le code opération et qui remplace la chaîne binaire m. Le tableau suivant donne quelques exemples de mnémoniques associés aux modes d’adressage. Tableau 3 : Quelques modes d’adressage Les directives Les directives sont des pseudo-instructions : elles ne correspondent à aucune instruction machine; ce sont des ordres destinés au traducteur assembleur. Les directives servent notamment à la définition des variables : ainsi la directive DS n permet de réserver n mots mémoire pour une variable. Associer une étiquette à une déclaration de variable permet ensuite d’accéder à cette donnée par le biais d’un nom symbolique (en l’occurrence l’étiquette). De même, la directive DC n permet de déclarer une constante prenant la valeur n. La directive STOP indique la fin d’un programme. Exemple Fonctionnement de l’assembleur La traduction effectuée par l’assembleur ne peut pas se faire en une seule passe, c’est-à-dire que l’assembleur ne peut pas travailler en traduisant directement une à une les instructions du langage d’assemblage en instructions du langage machine, ceci à cause du problème des références en avant, c’est-à-dire des références à des étiquettes non encore connues de l’assembleur. Exemple Cours d’architecture des ordinateurs Page 25 sur 54 Lorsque l’assembleur traite l’instruction JMP boucle, il ne peut pas traduire le symbole boucle par une adresse, puisque l’assembleur n’a pas encore rencontré la définition de l’étiquette boucle. L’assembleur travaille donc en deux passes. Lors de la première passe, l’assembleur rassemble l’ensemble des symboles et étiquettes dans une table et leur associe une adresse dans le code. Lors de la deuxième passe, l’assembleur résout les références en avant en utilisant la table construite lors de la première passe. Première passe de l’assembleur La principale fonction de la première passe est de construire la table des symboles. Cette table contient une entrée pour chaque nouveau symbole du code en langage d’assemblage et met en correspondance le nom du symbole avec sa valeur dans le code. Cette valeur est une adresse si l’étiquette est associée à une instruction ou à une variable; c’est une valeur constante si l’étiquette est associée à une constante. Pour pouvoir affecter une adresse à chacun des symboles du code en langage d’assemblage, l’assembleur doit assigner une adresse à chacune des instructions et des déclarations de variables. Pour ce faire, l’assembleur manipule un compteur appelé compteur d’emplacement, mis à 0 au début de la première passe et incrémenté de la longueur de l’instruction ou de la longueur de la variable à chaque instruction ou déclaration traitée. L’assembleur réalise alors une allocation du programme machine relativement à l’adresse 0. La première passe élimine également les commentaires. Exemple On considère le programme en langage d’assemblage suivant : La première passe de l’assembleur construit la table des symboles (tableau suivant) : Deuxième passe de l’assembleur Lors de la deuxième passe, l’assembleur génère les instructions en code machine. Pour cela, l’assembleur remplace chaque mnémonique par son code binaire, chaque symbole par la valeur qui lui a été attribuée dans la table des symboles. S’il y a des expressions arithmétiques, celles- ci sont évaluées. Cours d’architecture des ordinateurs Page 26 sur 54 Si cela a été demandé, l’assembleur génère également un listing d’assemblage du programme. Ce listing comporte généralement pour chaque ligne : un numéro de ligne, le texte source, la représentation interne en hexadécimal ou en octal de l’instruction machine, la signalisation d’éventuelles erreurs de syntaxe. Exemple Le programme en langage d’assemblage suivant : équiva ut au programme machine suivant : II.3 Fonctionnalités et performances Fonctionnalités Lors de l’introduction de nouveaux processeurs, de nouvelles fonctionnalités sont systématiquement ajoutées à leur architecture pour améliorer l’ensemble, depuis les performances dans certains types spécifiques d’applications jusqu’à la fiabilité du processeur. On abordera certaines de ces technologies, par exemple SMM (System Management Mode), l’exécution superscalaire, l’Hyper-Threading et le traitement multicœur. Gestion d’alimentation : SMM Désireux de doter les ordinateurs portables de processeurs plus rapides et plus puissants, Intel et AMD ont commencé à ajouter un circuit de gestion d’énergie à leurs processeurs au début de l’année 1990. SMM est un mode de fonctionnement particulier pour la prise en charge des fonctions gestion de l’alimentation et de contrôle du matériel. Il fournit un environnement logiciel isolé transparent au système d’exploitation et aux applications. Il est vu par le BIOS ou les pilotes de bas niveau L’intérêt de SMM est visible lorsque le système tente d’accéder à un périphérique qui a été mis en veille afin d’économiser l’énergie. Par exemple, supposons qu’un programme tente de lire un fichier sur le disque dur, mais que celui-ci ait été arrêté pour des raisons d’économie. Lors Cours d’architecture des ordinateurs Page 27 sur 54 de l’accès, l’adaptateur hôte génère une interruption SMI (System Management Interrupt) afin d’invoquer SMM (System Management Mode). Le code de SMM envoie alors des commandes au lecteur afin qu’il redémarre. Le contrôle revient ensuite au système d’exploitation et le chargement du fichier se poursuit comme si le disque dur ne s’était jamais arrêté. Exécution superscalaire Les processeurs Pentium de cinquième génération et plus récents comprennent plusieurs pipelines internes d’exécution d’instructions, ce qui leur permet d’exécuter plusieurs instructions simultanément. Intel parle de "technologie superscalaire" pour désigner la capacité d’exécuter plusieurs instructions simultanément. L’architecture superscalaire est généralement associée à un processeur RISC (Reduced Instruction Set Computer, ordinateur à jeu d’instructions réduit) à haut débit. Ce dernier exécute des instructions beaucoup plus simples et moins nombreuses. Bien que chacune de ces instructions soit plus succincte, la fréquence globale de l’horloge est plus élevée, ce qui habituellement augmente les performances. Le Pentium a été l’un des premiers processeurs CISC (Complex Instruction Set Computer, ordinateur à jeu d’instructions complexe) à être considéré comme superscalaire. La puce CISC utilise un jeu plus riche, qui renferme des instructions plus complexes. À titre d’illustration, imaginons que nous voulions demander à un robot de visser une ampoule. Si nous utilisions les instructions CISC, nous dirions : Ramasser l’ampoule. L’insérer dans la douille. Tourner dans le sens des aiguilles d’une montre jusqu’à ce qu’elle soit serrée. En utilisant les instructions RISC, nous dirions : Baisser la main. Prendre l’ampoule. Lever la main. Insérer l’ampoule dans la douille. Effectuer un tour dans le sens des aiguilles d’une montre. L’ampoule est-elle serrée? Si non, répéter l’étape 5. Fin Technologie Hyper-Threading La technologie Hyper-Threading d’Intel permet à un processeur unique de traiter deux jeux indépendants d’instructions en même temps. Par essence, cette technologie convertit un processeur physique unique en deux processeurs virtuels. Bien que Windows NT 4.0 et 2000 soient conçus pour l’emploi de plusieurs processeurs physiques, la technologie HT nécessite des optimisations spécifiques des systèmes d’exploitation pour travailler correctement. Les distributions Linux basées sur le Kernel 2.4.18 et plus prennent en charge l’Hyper-Threading. Technologie multicoeurs Cours d’architecture des ordinateurs Page 28 sur 54 La technologie HT simule la présence de deux processeurs dans une même unité physique. Malgré tout l’intérêt de cette solution, il est préférable d’avoir deux processeurs réels ou plus. Un processeur multicœur contient en réalité deux noyaux de processeur, ou plus, sur la même puce. De l’extérieur, il ressemble à un seul processeur et est considéré comme tel pour les licences Windows. En revanche, à l’intérieur, il peut être constitué de deux, quatre ou plus noyaux de processeur. Un processeur multicœur possède tous les avantages d’un ensemble de processeurs physiques séparés, pour un coût moindre. Par ailleurs, il permet d’éviter des problèmes avec les licences du système d’exploitation. Figure 9 : Gestion du multitâche par processeur Performance Pour chaque instruction, le processeur effectue schématiquement les opérations suivantes : lire en mémoire (MP) l’instruction à exécuter ; effectuer le traitement correspondant ; passer à l’instruction suivante. Chaque instruction nécessite un certain nombre de cycles d’horloges pour s’effectuer. Le nombre de cycles dépend de la complexité de l’instruction et aussi du mode d’adressage. Il est plus long d’accéder à la mémoire principale qu’à un registre du processeur. La durée d’un cycle dépend de la fréquence d’horloge du séquenceur. La performance d’un processeur fait intervenir plusieurs facteurs : le temps d’exécution d’un programme, la gestion de la mémoire (au sens des modes d’accès à la mémoire qui implique les différents modes d’adressage dont on dispose dans les instructions machines), les interruptions et les changements de contexte. On peut caractériser le temps d’exécution d’un programme, Te, par : Te = Ni * Nc * Tc Cours d’architecture des ordinateurs Page 29 sur 54 Ni représente le nombre d’instructions à exécuter. Ce nombre dépend de la nature et de la richesse du jeu d’instructions machine disponible. C’est le compilateur qui, à partir d’un programme écrit dans un langage de haut niveau (LHN), génère la séquence d’instructions machines correspondant à chaque instruction du LHN. Tc est le temps d’un cycle machine et Nc le nombre de cycles nécessaires à l’exécution d’une instruction machine. Ces facteurs dépendent essentiellement de la complexité des instructions machines. Ainsi améliorer les performances d’un programme consiste à minimiser Te donc le produit des trois facteurs précédents. L’exécution d’une instruction se traduit, par l’ensemble des étapes suivantes : fetch, modification du compteur ordinal, décodage de l’instruction, recherche éventuelle du ou des opérandes, exécution (microinstructions) et rangement des opérandes. Plusieurs de ces étapes pouvaient êtres réalisées en parallèle ce qui se traduit par l’implantation de mécanismes de pipeline. Ainsi les approches CISC et RISC pour la minimisation de Te et l’utilisation du pipeline sont différentes. Indice ICOMP On peut caractériser la puissance d’un microprocesseur par le nombre d’instructions qu’il est capable de traiter par seconde. Pour cela, on définit : le CPI (Cycle Par Instruction) qui représente le nombre moyen de cycles d’horloge nécessaire pour l’exécution d’une instruction pour un microprocesseur donné. le MIPS (Millions d'Instructions Par Seconde) qui représente la puissance de traitement du microprocesseur. 𝐹𝐻 𝑀𝐼𝑃𝑆 = 𝑎𝑣𝑒𝑐 𝐹𝐻 𝑒𝑛 𝑀𝐻𝑧 𝐶𝑃𝐼 Il peut être délicat d’évaluer les performances d’un processeur. Dès lors que l’architecture interne de deux processeurs diffère, ils ne fonctionnent pas de la même manière et peuvent être relativement plus rapides pour certaines opérations, et plus lents pour d’autres. Pour opérer une vraie comparaison entre des processeurs cadencés à des fréquences d’horloge différentes, Intel a mis au point une série de tests nommés indice iCOMP (Intel Comparative Microprocessor Performance) permettant d’établir pour chaque processeur un indice de performances relatif. L’indice iCOMP 2.0 est calculé à partir d’un certain nombre de logiciels de test des performances indépendants. Il constitue un indicateur stable des performances relatives d’un ordinateur. Les tests de performances portent sur l’efficacité du processeur pour les opérations sur les entiers et sur les opérations en virgule flottante, ainsi que pour les traitements multimédias. Cours d’architecture des ordinateurs Page 30 sur 54 II.4 Exemples : génération Intel et compatibles Pour mémoire, voici un récapitulatif très rapide des premières générations de processeurs Intel : Première génération P1 (086). Cette génération de processeurs a été la première dans les PC. Elle a été constituée des processeurs 8088/8086/80186/80188 et du coprocesseur 8087. Deuxième génération P2 (286). La deuxième génération a énormément amélioré les performances en passant le bus de données à 16 bits. Elle a été constituée du processeur 80286 et du coprocesseur 80287. Troisième génération P3 (386). Cette génération représente sans doute le changement le plus important depuis le premier PC. Ces processeurs sont devenus de véritables puces 32 bits. Ils étaient tellement en avance qu’il a fallu près de 10 ans pour les exploiter réellement. Il a existé les processeurs 386/386DX/386SX/386SL et le coprocesseur 80387. Quatrième génération P4 (486). Cette génération a plus représenté un perfectionnement des processeurs de troisième génération qu’une nouvelle conception. Néanmoins, Intel, AMD et les autres ont réussi à doubler les performances avec leurs processeurs de quatrième génération. Elle a été constituée entre autres des processeurs Intel 486/486DX/486SL, 486SX et du coprocesseur 487SX. AMD produisait alors son AMD 486 (5x86), et Cyrix/TI des processeurs compatibles 486 Cinquième génération P5 (586). Suite aux processeurs de quatrième génération, Intel et les autres fondeurs ont revu la conception de la génération suivante, afin de présenter une nouvelle architecture. Cette génération a été notamment constituée des processeurs Pentium (deux générations), Pentium MMX et AMD-K5. Sixième génération P6 (686). Les processeurs P6 représentent une nouvelle génération, avec des caractéristiques totalement nouvelles, comme l’exécution dynamique ou les deux bus indépendants. Les processeurs Pentium Pro/II/II/Xeon et Celeron font partie de cette génération, tout comme les NexGen Nx586, AMD K6/Athlon/Duron/XP et Sempron, les Cyrix/IBM 6x86(M1)/ 6x86MX(MII) et VIA C3. Septième génération : Les processeurs Intel pentium 4. Le Pentium 4 a été introduit en novembre 2000, si ce processeur portait un numéro et non pas un nom, il s’appellerait 786, car il représente une avancée significative par rapport à la génération 686. Voici les quelques caractéristiques techniques du Pentium 4 : une fréquence allant de 1,3 à 3,8 GHz une compatibilité logicielle avec les processeurs 32 bits Intel précédents; une prise en charge de l’EM64T (extensions 64 bits) et de la protection contre les débordements de tampons (Execute Disable Bit ) un bus frontal de processeur en 400, 533, 800 ou 1066 MHz; Cours d’architecture des ordinateurs Page 31 sur 54 une unité arithmétique logique (ALU) fonctionnant au double de la fréquence du noyau du processeur; une prise en charge de la technologie Hyper-Threading dans tous les processeurs à 2,4 GHz et plus, avec un bus à 800 MHz, et tous les processeurs à 3,06 GHz et plus, avec un bus à 533 MHz; une exécution des instructions indépendamment de leur ordre un cache L1 de 8 Ko ou 16 Ko, un cache L2 sachant gérer toute la mémoire physique III. Mémoire III.1 Vue d’ensemble Une mémoire est un circuit à semi-conducteur permettant d’enregistrer, de conserver et de restituer des informations (instructions et variables). C’est cette capacité de mémorisation qui explique la polyvalence des systèmes numériques et leur adaptabilité à de nombreuses situations. Les informations peuvent être écrites ou lues. Il y a écriture lorsqu’on enregistre des informations en mémoire, lecture lorsqu’on récupère des informations précédemment enregistrées. Cette mémoire est constituée de circuits élémentaires nommés bits (binary digit). Il s’agit de circuits électroniques qui présentent deux états stables codés sous la forme d’un 0 ou d’un 1. De par sa structure la mémoire centrale permet donc de coder les informations sur la base d’un alphabet binaire et toute information stockée en mémoire centrale est représentée sous la forme d’une suite de digits binaires. Pour stocker l’information la mémoire est découpée en cellules mémoires : les mots mémoires. Chaque mot est constitué par un certain nombre de bits qui définissent sa taille. On peut ainsi trouver des mots de 1 bit, 4 bits (quartet) ou encore 8 bits (octet ou byte), 16 bits voire 32 ou 64 bits. Chaque mot est repéré dans la mémoire par une adresse, un numéro qui identifie le mot mémoire. Ainsi un mot est un contenant accessible par son adresse et la suite de digits binaires composant le mot représente le contenu ou valeur de l’information. La mémoire centrale est un module de stockage de l’information dont la valeur est codée sur des mots. L’information est accessible par mot. La capacité de stockage de la mémoire est définie comme étant le nombre de mots constituant celle-ci. Dans l’exemple de la figure précédente, la mémoire a une capacité de 8 mots de 16 bits chacun. On exprime également cette capacité en nombre d’octets ou de bits. Notre mémoire a donc une capacité de 16 octets ou de 128 bits. L’information que l’on trouve en mémoire centrale est donc codée sur un alphabet binaire. La figure suivante présente le nombre de combinaisons que l’on peut réaliser à partir d’une suite d’éléments binaires. Coder l’information en mémoire centrale c’est donc associer à chaque suite de bits un sens particulier. Cours d’architecture des ordinateurs Page 32 sur 54 Figure 10 : Mémoire et codage de l’information La figure suivante présente succinctement les différentes informations que l’on trouve dans la mémoire centrale : instructions machines et données manipulées par les instructions. Instructions machines Les instructions et les données sont codées sur des mots mémoires : elles peuvent occuper un ou plusieurs mots mémoires selon la nature de l’ordinateur. Les instructions machines sont propres à chaque microprocesseur mais sont toujours construites de la même manière : un code opération qui définit l’opération à exécuter, le champ opérande qui définit la ou les données sur lesquelles portent l’opération : le code opération est codé sur un nombre de digits binaires qui caractérise un microprocesseur. Ce nombre de bits définit en fait le nombre d’opérations possibles avec cet ordinateur : un code opération sur 3 bits admet 8 combinaisons permettant la définition de 8 opérations différentes (instructions machine) possibles, sur 4 bits 16 instructions possibles etc. La taille du code opération est donc un facteur déterminant qui caractérise complètement le nombre d’instructions qu’est capable d’exécuter un processeur; le champ opérande est une suite de bits qui permet de caractériser l’adresse de la ou des donnée(s) que manipule(nt) l’instruction machine définie par le code opération. Il existe plusieurs types d’instructions machines qui peuvent manipuler une ou plusieurs données selon la « puissance » du langage machine du microprocesseur utilisé. Il existe Cours d’architecture des ordinateurs Page 33 sur 54 également plusieurs manières de définir, à partir du champ opérande, l’adresse d’une donnée : cela repose sur le mécanisme d’adressage d’un microprocesseur qui définit les différentes manières de calculer une adresse de données. On parle également de modes d’adressages du microprocesseur Figure 11 : Les informations présentes en mémoire centrale Données manipulées Les données sont les objets que manipulent les instructions, elles sont codées sur un ou plusieurs mots machines et sont donc adressables (repérables) dans la mémoire centrale. L’adresse de la donnée est déterminée par le type d’adressage utilisé par l’instruction machine. Le codage d’une donnée en mémoire dépend de son type : la figure précédente donne les différents types de données que manipulent les instructions machines. Pour chaque type il existe des règles de codage. Par exemple pour coder les caractères alphanumériques on utilise un dictionnaire (table ASCII, table EBCDIC, codage Unicode) tandis que pour coder un nombre entier non signé on utilise une règle traditionnelle de codage d’un nombre sur un alphabet binaire. Dans l’exemple de la figure suivante, on suppose un nombre codé sur un octet (8 bits) dont la position de chaque bit est numérotée de 0 à 7, en partant du bit de poids faible. La valeur de l’entier est alors la somme des produits de chaque bit par le nombre de symboles possibles dans la base d’expression du nombre (ici 2) élevé à la puissance du rang du bit. Cette règle est générale et permet de déterminer la valeur d’un entier codé sur n’importe quel alphabet. Dans le cas d’un alphabet binaire la valeur maximale que peut prendre un entier codé sur p bits est 2p. Les principales normes de codages existantes ainsi que la structure des instructions machine et les modes d’adressages courants sont détaillés à la section dédiée au codage de l’information. Cours d’architecture des ordinateurs Page 34 sur 54 Figure 12 : Exemple de codage de l’information La mémoire centrale a pour objet le stockage des instructions et des données que peut manipuler le microprocesseur. Les opérations possibles sur la mémoire sont la lecture (acquisition par le microprocesseur) d’un mot et l’écriture (le microprocesseur place un nouveau contenu) dans un mot mémoire. Une opération de lecture d’un mot consiste à définir l’adresse du mot et à déclencher une commande de lecture qui amène le contenu du mot de la mémoire vers le microprocesseur. Une opération d’écriture consiste à définir l’adresse du mot dont on veut changer le contenu puis à déclencher une opération d’écriture qui transfère l’information du processeur vers le mot mémoire dont l’adresse est spécifiée. Enfin d’autres éléments importants complètent la caractérisation d’une mémoire centrale : le temps d’accès à la mémoire qui mesure le temps nécessaire pour obtenir une information logée en mémoire; les technologies qui président à la construction de ces mémoires; le coût de réalisation de ces mémoires. III.2 Constitution et organisation Une mémoire est l’organisation d’un ensemble de points de mémorisation élémentaires en matrice à p lignes et n colonnes. On peut ainsi voir la mémoire comme l’assemblage de n × p bits. Mais on l’utilise comme un tableau de p éléments de taille n auxquels on accède par indice. Une ligne est appelée mot de la mémoire et on parle d’une mémoire de p mots de n bits. A chaque mot, c’est-à-dire à l’ensemble des n points de mémorisation élémentaire qui le composent, est associe un fil dit de sélection du mot. La sélection d’un mot consiste ainsi à mettre à 1 le fil de sélection associe. L’interface de la mémoire est composée de p fils de sélection S0,..., Sp−1. Lors d’un accès un seul des S0,..., Sp−1 doit valoir 1. De plus, un fil permet de préciser si l’accès souhait e est une lecture ou une écriture. Le signal spécifiant le sens de l’accès est note l/e (r/w en version anglaise) ; s’il est à 1 il s’agit d’une lecture (read) et s’il est à 0 c’est une écriture (write). Habituellement, le mot auquel le processeur accède est désigné par un numéro (compris entre 0 et p − 1) appelé adresse. Si p = 2m, l’adresse est codée sur m bits (Am−1,..., A0) et un décodeur associe à la mémoire réalise la fonction de calcul de l’unique fil de s élection valant 1 ; ainsi, si Cours d’architecture des ordinateurs Page 35 sur 54 les m bits d’adresse Am−1,..., A0 codent l’entier i (0 ≤ i ≤ 2m − 1), le fil de s élection de numéro i vaut 1 et tous les autres valent 0. Figure 13 : Mémoire de 2m mots de n bits et les signaux De plus, un accès à la mémoire est matérialisé par l’activation d’un signal de sélection mémoire que nous notons dans la suite SelMem. La figure prédédente représente une mémoire de 2m mots de n bits ainsi que l’opération réalisée selon la valeur des signaux SelMem et l/e. La valeur à stocker dans la mémoire (cas d’une écriture) ou à extraire de celle-ci (cas d’une lecture) est appelée la donnée (de taille n). Le processeur dialogue avec la mémoire via les signaux de contrôle SelMem, FinAcces et l/e, et via le bus mémoire comprenant les adresses et les données. On parle de bus d’adresses et de bus de données. Déroulement d’un accès mémoire par un processeur Nous considérons ici un ordinateur compose d’un processeur et d’une mémoire vive, avec les hypothèses simplificatrices suivantes : 1. Les adresses sont sur m bits et les données sur n bits. Les adresses sont des adresses de mots de n bits et les accès mémoire sont limites aux seuls mots de n bits. 2. La taille de mémoire physique et la capacité d’adressage du processeur sont identiques. En général, la capacité d’adressage du processeur est supérieure à la taille de la mémoire physique ; une même adresse risque alors de correspondre à plusieurs mots mémoire. Le raccordement des signaux entre processeur et mémoire est très simple : le bus de données est connecté aux entrées et sorties des données de la mémoire, le bus d’adresse aux entrées de sélection de mot. Le bus de données est bidirectionnel alors que le bus d’adresses est monodirectionnel. L’entrée l/e de la mémoire est reliée au signal de même nom du processeur, et l’entrée d’activation de la mémoire SelMem au signal de demande d’accès à la mémoire du processeur AccesMem. La sortie FinAcces est reliée au signal du même nom du processeur. 1. Lors d’une écriture, le processeur 1) affiche sur le bus d’adresses le numéro de l’emplacement mémoire auquel il accède ; 2) affiche l’information à écrire sur le bus de données ; 3) met à 0 le signal l/e ; 4) met à 1 le signal AccesMem. A l’intérieur de la Cours d’architecture des ordinateurs Page 36 sur 54 mémoire, le décodeur d’adresses sélectionne l’emplacement correspondant, active le dispositif d’écriture et désactive la sortie du circuit de lecture. Pour chaque bit du mot dont la nouvelle valeur diffère de l’ancienne, le bistable mémoire change d’état. Le délai maximal de commutation définit le temps d’accès en écriture de la mémoire. Le signal FinAcces est alors émis. A la fin de l’écriture, le processeur met à 0 le signal AccesMem. 2. Dans le cas d’une lecture, le processeur 1) affiche sur le bus d’adresses le numéro de l’emplacement mémoire auquel il accède ; 2) met à 1 le signal l/e ; 3) met à 1 le signal AccesMem. A l’intérieur de la mémoire, le décodeur d’adresse sélectionne l’emplacement correspondant, désactive le dispositif d’écriture et active la sortie du circuit de lecture. Après un certain délai, dont la borne supérieure est le temps d’accès en lecture, la valeur lue se stabilise sur le bus de données. Le signal FinAcces est alors émis. A la fin de la lecture, le processeur mémorise la valeur stabilisée sur le bus de données dans un registre interne et met à 0 le signal AccesMem. Entre deux cycles d’accès mémoire, le signal AccesMem vaut 0 et les signaux d’adresses, de données et l/e ne sont pas significatifs. Si un accès à la mémoire dure un seul cycle d’horloge du processeur et si le temps de cycle de la mémoire est inférieur ou égal à ce dernier, on peut simplifier le protocole de communication : la mémoire n’émet pas l’acquittement FinAcces pour signifier explicitement la fin d’un accès. Le processeur demande l’accès, signal émis sur sa propre horloge, et la lecture ou l’écriture sont supposées être effectives lors du prochain top d’horloge du processeur. La figure montre une évolution possible des différents signaux, données et adresses intervenant lors d’un accès à la mémoire par le processeur. Figure 14 : Chronogramme d’accès mémoire Multiplexage lignes/colonnes Dans le cas d’une organisation de la mémoire telle que présenté la figure suivante, on peut diminuer le nombre de broches de moitié. L’idée est de réutiliser les broches servant à la sélection des lignes pour réaliser la sélection des colonnes. Il convient alors que le nombre de fils soit le même et on fabrique ainsi des matrices carrées de cellules. Etant donne m/2 broches et une adresse codée sur m bits (m étant pair), les m/2 bits de poids forts codent une ligne et les m/2 bits de poids faibles une colonne. Le circuit reçoit les m/2 bits Cours d’architecture des ordinateurs Page 37 sur 54 de poids forts, qui sont mémorises et relies au décodeur des lignes. Puis, pendant ce décodage, le circuit reçoit les m/2 bits de poids faibles qui sont relies au décodeur des colonnes. Ce circuit est réalisé à partir d’une matrice de cellules, en utilisant deux signaux supplémentaires RAS (Row Address Strobe) et CAS (Column Address Strobe). La ligne (respectivement la colonne) est sélectionnée au front descendant de RAS, i.e. RAS (respectivement CAS). Le temps d’accès à une cellule mémoire est la somme du temps de sélection d’une ligne et du temps de sélection d’une colonne. Figure 15 : Matrice de cellules mémoire III.2.1 Mode d’accès Même si l’on connaît son adresse, l’accès à une case mémoire se fait de façon différente suivant les supports, en raison de leur construction distincte : Accès séquentiel. Cet accès, le plus lent, est celui des bandes magnétiques. Il oblige à parcourir l’intégralité des adresses avant d’arriver à celle voulue : il faut dérouler toute la bande depuis le début (éventuellement en accéléré) pour aboutir à la case souhaitée. Accès semi-direct. En 1956, IBM invente le disque dur, une révolution dans les systèmes de stockage, qui permet un accès plus rapide par sa structure à deux dimensions. Il est constitué de pistes concentriques, tout comme les autres supports sous forme de disque (CD, DVD). Tous permettent un accès direct à la piste voulue (par le déplacement d’une tête de lecture), avant un accès séquentiel à la donnée via le défilement de la piste (sous la tête de lecture). Accès direct ou aléatoire. Intel invente la mémoire principale sous forme de semi- conducteurs en 1970. La grande innovation est de permettre un accès direct (et donc rapide) à la donnée via un décodeur d’adresse. À partir de la valeur numérique de Cours d’architecture des ordinateurs Page 38 sur 54 l’adresse, ce circuit sélectionne la cellule mémoire (stockant 1 octet ou 1 bit) souhaitée et renvoie sa valeur (voir section 2). Cet accès direct est aussi dit « aléatoire » (ce qui explique le terme de mémoire RAM, Random Access Memory). Les registres et la mémoire principale fonctionnent de cette façon. Accès associatif. Les mémoires à accès associatif enregistrent des couples de valeurs. Au lieu de sélectionner une case mémoire via son adresse, on envoie au circuit mémoire la première valeur d’un couple et, si cette valeur existe au sein d’un couple mémorisé, la mémoire renvoie la seconde valeur dudit couple. Cela permet de mémoriser des correspondances quelconques de valeurs (et pas seulement des correspondances adresse-valeur stockée). Plusieurs mécanismes de mémoire cache ou de mémoire virtuelle font un usage intensif de tables de correspondances stockées dans des mémoires de ce type. III.2.2 Caractéristiques et hiérarchisation Un programme et ses données sont enregistrés dans la mémoire centrale (la mémoire RAM) pour être exécutés par le processeur central (microprocesseur). Lors de l’exécution d’une instruction, le processeur utilise des registres, qui sont également des zones de stockage de l’information. Lors de l’exécution d’une instruction par le processeur le processeur peut exécuter des cycles d’horloge sans avoir d’activité : il attend la réponse de la mémoire à une demande de lecture. Pour harmoniser les vitesses du processeur et la mémoire RAM, et ainsi améliorer les performances, une mémoire plus rapide est placée entre le processeur et la mémoire RAM : c’est la mémoire cache. Ainsi la mémorisation de l’information dans un ordinateur ne se fait pas en un lieu unique mais, comme le montre la figure suivante, est organisée au travers d’une hiérarchie de mémoires. Cours d’architecture des ordinateurs Page 39 sur 54 Figure 16 : Hiérarchie des mémoires Toutes les mémoires, même si elles participent à la même fonction, ne jouent pas le même rôle et on peut arbitrairement les classer en deux grandes catégories : les mémoires de travail désignent les mémoires qui sont actives dans l’exécution d’un programme. On y trouve les registres du processeur, la mémoire centrale, la mémoire cache, la mémoire d’appui, la mémoire morte. Ce sont des mémoires électroniques; les mémoires de stockage telles que le disque magnétique ont pour objet de conserver de manière permanente de grandes quantités d’informations. Les informations qui y sont stockées ne participent pas directement à l’exécution d’un programme mais doivent êtres chargées en mémoire centrale pour être exploitées par le processeur. Ce sont les mémoires de masses, elles sont de type magnétique ou optique. Plusieurs critères importants caractérisent les mémoires : Cours d’architecture des ordinateurs Page 40 sur 54 la capacité de la mémoire indique la quantité d’information qu’une mémoire peut stocker. En général cette capacité peut s’exprimer en bits, en octets, plus rarement en mots. Le tableau suivant résume les principales expressions de la capacité mémoire; le temps d’accès de la mémoire caractérise le temps nécessaire pour obtenir une information en mémoire. Pour une mémoire électronique qui est une mémoire très rapide (RAM, ROM, registre…) ce temps se mesure en nanosecondes (milliardième de seconde : 10–9 s). Cette vitesse peut également s’exprimer comme une fréquence d’horloge caractéristique de la mémoire, égale à l’inverse du temps d’accès et mesurée en hertz (Hz). Ainsi un temps d’accès égal à 10 nanosecondes correspond à une fréquence de 100 Mhz (1 Mhz = 106 Hz). Pour des mémoires magnétiques ou optiques (mémoire de masse) ce temps se mesure en millisecondes (millième de seconde : 10–3 s). Cet écart de temps est fondamental à noter pour comprendre le rôle respectif de ces différentes mémoires dans un ordinateur; la bande passante de la mémoire. Ce critère s’exprime sous la forme du produit de la largeur du bus de données et de la fréquence de la mémoire. Par exemple pour une mémoire de 64 bits de largeur sur un bus à 100 MHz la bande passante est de 800 Mo/s. Ce critère est très utilisé et tend à remplacer le critère de temps d’accès, il permet, en effet, de mieux évaluer les différents débits à synchroniser entre les modules de l’ordinateur; le temps de latence mesure le temps nécessaire à la réalisation d’une opération. C’est un critère important qui intervient pour tous les types de mémoire. Il exprime que tous les cycles horloge ne pourront être utilisés. Une latence de 3 indique que l’obtention de l’information « coûte » 3 cycles horloge, il y a donc perte de cycles horloge. Pour un disque magnétique, le temps de latence mesure le temps qu’il faut pour que, une fois la piste atteinte, la donnée se trouve sous la tête de lecture. Il varie de 0 à une révolution complète du disque; la volatilité représente le temps pendant lequel une information est disponible en mémoire. Les mémoires magnétiques sont non volatiles : l’information est conservée même après l’arrêt de l’alimentation électrique. Les mémoires électroniques sont généralement volatiles et perdent l’information dès que l’alimentation électrique est coupée : c’est le cas des mémoires vives telles que les mémoires RAM; L’encombrement. Les mémoires physiques occupent une place de plus en plus petite ce qui permet une plus grande intégration. C’est un facteur important de développement de l’informatique; le coût est un critère très important dans les développements de l’informatique. Les mémoires électroniques ont un coût de stockage relativement élevé et donc leurs capacités sont d’autant plus faibles. Les mémoires magnétiques sont beaucoup moins onéreuses et présentent donc de beaucoup plus grandes capacités de stockage. Cours d’architecture des ordinateurs Page 41 sur 54 Tableau 4 : Expression de la capacité mémoire III.2.3 Performances La mesure des performances de la mémoire est compliquée par le fait que l’accès n’est pas uniforme : suivant que l’on récupère un ou plusieurs octets, situés ou non sur le même boîtier dans le cas d’un accès aléatoire, on peut avoir des valeurs complètement différentes. Mémoire à accès aléatoire Historiquement, deux valeurs correspondaient aux performances des mémoires à accès aléatoire : le temps d’accès et le temps de cycle. Le premier est le délai entre la présentation de l’adresse et la disponibilité de la donnée. Les registres ont un temps d’accès de l’ordre de la nanoseconde, la mémoire cache de quelques nanosecondes et la mémoire principale de quelques dizaines de nanosecondes. Après un accès, les boîtiers mémoire ont souvent besoin d’un certain temps avant de pouvoir accepter un nouvel accès, qui permet aux circuits électroniques de revenir à leur état initial. On définit alors le temps de cycle comme étant l’intervalle de temps minimum entre deux accès successifs à un même boîtier. Pour la mémoire principale, ce temps de latence est de quelques nanosecondes. Le temps d’accès étant assez important par rapport à l’horloge du processeur. Les innovations technologiques se sont multipliées depuis le début des années 1990 pour accélérer la production de données par un boîtier mémoire : répartition des données successives sur des boîtiers différents pour économiser le temps de relaxation ou envoi des données successives en mémoire, après un premier accès, sans attendre la suite d’adresses correspondantes. Dans tous les cas, ces boîtiers mémoire seront reliés au processeur et l’on indique souvent les performances d’un système en donnant la bande passante du lien. Il s’agit du débit maximum en bits par seconde des informations circulant entre les deux composants ; c’est également le produit de la fréquence de fonctionnement de la mémoire et du nombre d’octets transférés à chaque opération. Ainsi, un lien reliant une mémoire et un processeur, fonctionnant à 500 MHz et transférant 8 octets à la fois (par cycle d’horloge), a une bande passante de 4 Go/s. Mémoire à accès semi-direct Trois paramètres peuvent caractériser les performances d’un disque : Le temps de positionnement (ou temps d’accès). Il s’agit du temps nécessaire pour déplacer la tête de lecture suivant un rayon du disque pour arriver à la piste voulue. L’ordre de grandeur est de 5 à 10 millisecondes pour un disque dur. Cours d’architecture des ordinateurs Page 42 sur 54 Le temps de latence. Une fois la tête arrivée devant la bonne piste, il faut attendre que la piste défile sous la tête jusqu’à l’information voulue. Cela prend en moyenne une demi-rotation, soit un ordre de grandeur de 5 millisecondes. Il est plutôt d’usage de donner la vitesse de rotation du disque en tours par seconde pour mesurer ce paramètre : plus cette vitesse est rapide, plus le temps de latence est faible. Le taux de transfert. Une fois que l’on commence à transférer l’information, il est facile de continuer à le faire puisque le disque tourne et que les bits défilent sous la tête. On peut alors mesurer un taux de transfert en bits par seconde. Celui-ci va d’une dizaine à une cinquantaine de mégaoctets par seconde. Suivant l’usage et l’accès au disque, ces paramètres ont plus ou moins d’importance : combien d’octets souhaite-t-on transférer et où se trouvent-ils sur le disque (impliquent-ils de nombreux déplacements de la tête de lecture ou non) ? Si l’on désire transférer des octets situés à des emplacements éloignés sur le disque, la tête de lecture doit effectuer de nombreux déplacements et le temps total est fortement dépendant du temps de positionnement. À l’inverse, si les données se suivent, c’est plutôt le taux de transfert qui est prépondérant. III.2.4 RAM, ROM et cache Mémoires vives Ce sont des mémoires sur lesquelles les opérations de lecture et d’écriture sont possibles. Ce sont les mémoires dites RAM (Random Access Memory), où le temps d’accès est indépendant de la place de l’information dans la mémoire. Elles sont volatiles et le risque de perte d’informations est non négligeable (microcoupures de l’alimentation). Le temps d’accès est très faible (mémoire rapide) et la consommation électrique est faible. Elles sont essentiellement utilisées en tant que mémoire centrale et mémoires caches. La figure suivante présente schématiquement les différentes mémoires vives. Cours d’architecture des ordinateurs Page 43 sur 54 Figure 17 : Types de mémoire vives Les mémoires SRAM (Static RAM) sont construites à partir de bascules de transistors qui permettent, si l’alimentation est maintenue, de conserver l’information très longtemps. Ce sont des mémoires très rapides mais chères et qui induisent des difficultés d’intégration. Elles sont de faibles capacités et sont plutôt réservées aux mémoires caches. Les mémoires DRAM (Dynamic RAM) sont la base des mémoires centrales. Le bit est associé à un seul transistor (contrairement aux SRAM) ce qui offre donc une très grande économie de place et favorise une grande densité d’intégration. Le transistor est associé à la charge d’un condensateur qui diminue avec le temps. La DRAM est donc volatile et nécessite un rafraîchissement régulier. Ces mémoires sont en très forte évolution tant au plan des coûts que des performances. Les mémoires EDO sont de type DRAM traditionnelle mais leur temps de latence est beaucoup plus faible et permet donc des temps d’accès plus petits. La mémoire SDRAM permet des échanges synchronisés avec le processeu