« Fonctionnement d'un ordinateur/Les différents types de mémoires » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 122 :
 
[[File:Data stack.svg|centre|vignette|upright=1|Fonctionnement d'une pile (mémoire LIFO).]]
 
==l'interface avec le bus==
 
Une mémoire communique avec d'autres composants : le processeur, les entrées-sorties, et peut-être d'autres. Pour cela, la mémoire est reliée à un ou plusieurs bus. Suivant la mémoire et sa place dans la hiérarchie mémoire, le bus sera plus ou moins spécialisé. Par exemple, la mémoire principale est reliée au processeur et aux entrées-sorties via le bus système. Pour les autres mémoires, la logique est la même, si ce n'est que la mémoire est reliée à d'autres composants électroniques : une unité de calcul pour les registres, par exemple.
 
Dans tous les cas, le bus connecté à la mémoire est composé de deux ensembles de fils : le '''bus de données''' et le '''bus de commande'''. Le bus de données permet les transferts de données avec la mémoire, alors que le bus de commande prend en charge tout le reste. Nous allons commencer par voir le bus de données avant le bus de commandes, vu que son abord est plus simple.
 
===Le bus de données===
 
Le bus de données est généralement un bus bidirectionnel (pour les lectures, écritures et reprogrammations), rarement unidirectionnel (pour les ''mask ROM'' qui ne gèrent que la lecture). Le bus de données transmet un nombre fixe de bits, qui est le plus souvent égal à la taille d'un byte. Si c'est le cas, le bus de données peut transmettre un byte à chaque transmission (à chaque cycle d'horloge). Une mémoire et/ou un bus qui permet ce genre de choses est appelé une mémoire ou un bus parallèle. Quelques mémoires sont cependant connectées à un bus qui ne peut transmettre qu'un seul bit à la fois. Un tel bus est appelé un bus série, la mémoire étant appelée une mémoire série. Ces mémoires permettent de lire ou écrire par bytes complets, qui sont transmis bits par bits sur le bus de données. La conversion entre byte et flux de bits sur le bus est réalisée par un simple registre à décalage. On pourrait croire que de telles mémoires séries sont rares, mais ce n'est pas le cas. Les mémoires Flash, très utilisées dans les clés USB ou les disques durs SSD sont des mémoires séries.
 
[[File:Mémoire série et parallèle.png|centre|vignette|upright=2|Mémoire série et parallèle]]
 
===Le bus de commande et d'adresse===
 
Le bus de commande transmet des bits qui ont une fonction fixée lors de la conception de la mémoire. Le bus de commande dépend énormément du bus utilisé ou de la mémoire. Certains bus de commande se contentent d'un seul bit, d'autres en ont une dizaine, et d'autres en ont une petite centaine. Comme on le verra plus bas, certaines mémoires adressables ont des broches dédiées aux adresses, qui sont connectées au bus d'adresse. Mais certaines arrivent cependant à s'en passer. Pour résumer, le bus d'adresse est facultatif, seules certaines mémoires en ayant réellement un. Dans ce qui va suivre, nous allons parler à la fois du bus de commandes et du bus d'adresse. On peut d'ailleurs voir le bus d'adresse comme une sous-partie du bus de commandes, raison pour laquelle nous voyons les deux en même temps.
 
[[File:RAM 8x4 symbol.svg|centre|vignette|Symbole d'une RAM 8x4.]]
 
====Les bits ''Chip Select'' et ''Output Enable''====
 
La majorité des mémoires possède deux broches/bits qui servent à l'activer ou la désactiver : le '''bit CS''' (''Chip Select''). Lorsque ce bit est à 1, toutes les autres broches sont désactivées, qu'elles appartiennent au bus de données ou de commande. On verra dans quelques chapitres l'utilité de ce bit. Pour le moment, on peut dire qu'il permet d'éteindre une mémoire (temporairement) inutilisée. L'économie d'énergie qui en découle est souvent intéressante.
 
Tout aussi fréquent, le '''bit OE''' (''Output Enable'') désactive les broches du bus de données, laissant cependant le bus de commande fonctionner. Ce bit déconnecte la mémoire du bus de données, stoppant les transferts. Il a une utilité similaire au bit CE, avec cependant quelques différences. Ce bit ne va pas éteindre la mémoire, mais juste stopper les transmissions. L'économie d'énergie est donc plus faible. Cependant, déconnecter la mémoire est beaucoup plus rapide que de l'éteindre. On verra dans quelques chapitres l'utilité de ce bit. Grossièrement, il permet de déconnecter une mémoire quand un composant prioritaire souhaite communiquer sur le bus, en même temps que la mémoire.
 
====L'entrée d'horloge ou de synchronisation====
 
Certaines mémoires assez anciennes n'étaient pas synchronisées par un signal d'horloge, mais par d'autres procédés : on les appelle des mémoires asynchrones. Les bus de commande de ces mémoires devaient transmettre les informations de synchronisation, sous la forme de '''bits de synchronisation'''.
 
D'autres mémoires sont cadencées par un signal d'horloge : elles portent le nom de mémoires synchrones. Ces mémoires ont un bus de commande beaucoup plus simple, qui n'a qu'une seule broche de synchronisation. Celle-ci reçoit le signal d'horloge, d'où le nom d''''entrée d'horloge''' qui lui est donné.
 
====Le bit R/W du bus de commande====
 
Sur la plupart des mémoires, le bus de données sert aussi bien pour les lectures que pour les écritures. Dans une telle situation, le bus de commande doit préciser à la mémoire s'il faut effectuer une lecture ou une écriture. Pour cela, le bus envoie sur le bus de commande un bit appelé '''bit R/W''', qui indique s'il faut faire une lecture ou une écriture. Il est souvent admis par convention que R/W à 1 correspond à une lecture, tandis que R/W vaut 0 pour les écritures. Ce bit de commande est évidemment inutile sur les mémoires ROM, vu qu'elles ne peuvent effectuer que des lectures.
 
[[File:Mémoire simple-port.png|centre|vignette|upright=2|Mémoire simple-port]]
 
Sur d'autres mémoires, on trouve deux bus : un dédié aux lectures et un autre pour les écritures. Pas besoin de bit R/W sur ces mémoires (en théorie, du moins). Ces mémoires ont un avantage : elles permettent d'effectuer une lecture en même temps qu'une écriture. Cependant, cet avantage signifie que la conception interne de la mémoire est naturellement plus compliquée. Par exemple, la mémoire doit gérer le cas où la donnée lue est identique à celle écrite en même temps. Cela arrive notamment sur les mémoires adressables, plus rarement sur les autres mémoires. L'augmentation du nombre de broches est aussi un désavantage.
 
[[File:Mémoire double port (lecture et écriture séparées).png|centre|vignette|upright=2|Mémoire double port (lecture et écriture séparées)]]
 
====Le bus d'adresse et le bit ALE====
 
Toutes les mémoires adressables sont naturellement connectées au bus. Mais celui-ci ne se limite plus à un bus de données couplé à un bus de commande : il faut ajouter un troisième bus pour envoyer les adresses à la mémoire (ou les récupérer, sur une mémoire associative). Ce dernier est appelé le '''bus d'adresse'''.
 
[[File:Entrées et sorties d'un bus normal.png|centre|vignette|upright=2|Entrées et sorties d'un bus normal.]]
 
Il existe une petite astuce pour économiser des fils : utiliser un bus qui servira alternativement de bus de donnée ou d'adresse. Ces bus rajoutent un bit sur le bus de commande, qui précise si le contenu du bus est une adresse ou une donnée. Ce bit Adresse Line Enable, aussi appelé bit ALE, vaut 1 quand une adresse transite sur le bus, et 0 si le bus contient une donnée (ou l'inverse !). Ce genre de bus est plus lent pour les écritures : l'adresse et la donnée à écrire ne peuvent pas être envoyées en même temps. Par contre, les lectures ne posent pas de problèmes, vu que l'envoi de l'adresse et la lecture proprement dite ne sont pas simultanées. Heureusement, les lectures en mémoire sont bien plus courantes que les écritures, ce qui fait que la perte de performance due à l'utilisation d'un bus multiplexé est souvent supportable.
 
[[File:Bus multiplexé avec bit ALE.png|centre|vignette|upright=2|Bus multiplexé avec bit ALE.]]
 
===Les mémoires multiports===
 
Les '''mémoires multiports''' sont reliées non pas à un, mais à plusieurs bus. Chaque bus est connecté sur la mémoire sur ce qu'on appelle un port. Ces mémoires permettent de transférer plusieurs données à la fois, une par port. Le débit est sont donc supérieur à celui des mémoires mono-port. De plus, chaque port peut être relié à des composants différents, ce qui permet de partager une mémoire entre plusieurs composants. Comme exemple de mémoire multiports, on a vu plus haut que certaines mémoires ont un bus sur lequel on ne peut que lire une donnée, et un autre sur lequel on ne peut qu'écrire.
 
[[File:Mémoire multiport.png|centre|vignette|upright=2|Mémoire multiport.]]
 
<noinclude>