Fonctionnement d'un ordinateur/Le bus mémoire
Le bus mémoire est en soi très simple : c'est juste un ensemble de fils, avec quelques circuits annexes qui servent à interfacer ce bus avec la processeur et la mémoire. En somme, des fils et de la glue logic. Néanmoins, il y a quand même des choses à dire dessus, surtout qu'il ne prend pas la même forme sur les ordinateurs PC et sur les autres architectures.

La plupart des PC commerciaux utilisent des barrettes de RAM, qu'on peut retirer de la carte mère si besoin. Le bus mémoire est donc relié à un connecteur standardisé, appelé slot mémoire, dans lequel on insère une barrette de RAM. La barrette de RAM est en soi un morceau de plastique sur lequel on place les puces mémoires, avec des broches dorées qui font contact avec le connecteur, et des interconnexions pour relier les puces aux broches dorées.

Par contre, les autres systèmes n'utilisent pas de barrettes de RAM. Ils sont fournit avec une quantité de RAM bien précise, qu'on ne peut pas upgrader. La RAM est alors soudée sur la carte mère, et le bus mémoire est une connexion directe entre processeur et mémoire RAM. Il n'y a pas de connecteur dédié, juste des puces mémoire. De nombreux ordinateurs portables font ça, mais aussi les smartphones, les microcontrôleurs ou d'autres systèmes du même genre.
Les systèmes anciens avaient des bus mémoires assez réduits, peu larges, en raison de contraintes techniques. Il était intéressant de limiter la taille du bus mémoire pour économiser des broches, que ce soit sur le processeur ou la mémoire RAM. Les systèmes modernes n'ont pas ce problème, l'évolution de la technologie permet au contraire d'avoir des bus mémoire assez large. Il s'agit de deux contraintes différentes : soit on économise des broches au détriment de la performance, soit on sacrifie beaucoup de fils/broches pour avoir des performances excellentes. Les deux cas donnent des contraintes très différentes, voyons comment les deux contraintes façonnent le bus mémoire.
Les bus mémoire réduits : l'économie de broches
[modifier | modifier le wikicode]Faire des économies sur le bus mémoire peut viser plusieurs objectifs. Il est possible de réduire le nombre de fils du bus mémoire, de réduire le nombre de broches du processeur ou d'économiser les broches de la mémoire RAM/ROM. Les trois objectifs sont assez différents, et certains sont plus utiles que d'autres. Par exemple, un processeur a besoin de beaucoup plus de broches qu'une mémoire pour faire son travail, vu que l'interface d'un processeur est assez complexe. Les processeurs doivent donc utiliser pas mal de ruses pour économiser des broches, comme un usage de bus multiplexés, de bus d'adresse multiplexé, etc. À l'inverse, les mémoires RAM/ROM peuvent parfaitement s'en passer, vu que leur interface est assez simple. Les contraintes entre processeur et mémoires RAM/ROM sont donc opposées.
Une méthode intéressante pour économiser des broches sur le processeur est d'utiliser un bus multiplexé. En théorie, cela demande d'avoir une mémoire compatible, qui tendent à être rares et plus chères. Les mémoires de faible capacité sont souvent sans bus multiplexés, alors que les processeurs à bas cout avec bus multiplexés sont plus fréquents. Heureusement, il est possible d'implémenter un bus multiplexé avec une mémoire qui ne l'est pas, ce qui permet d'avoir le meilleur des deux mondes : cela permet d'utiliser un processeur et une mémoire à bas prix, tout en ayant des processeurs avec peu de broches. Mais cela demande de faire quelques modifications sur le bus mémoire pour que cela fonctionne.
Un exemple est donné dans le schéma ci-dessous. Le processeur possède un bus multiplexé, alors que la mémoire EPROM a un bus d'adresse séparé du bus de données. Dans cet exemple, le processeur ne peut faire que des lectures, vu que la mémoire est une mémoire EEPROM, mais la solution marche aussi dans le cas où la mémoire est une RAM. L'implémentation demande juste l'ajout d'un registre sur le bus d'adresse et une commande adéquate de l'entrée OE (Output Enable). Pour faire une lecture, le processeur procède en deux étapes, comme sur un bus multiplexé normale : l'envoi de l'adresse, puis la lecture de la donnée.
- Lors de l'envoi de l'adresse, l'adresse est mémorisée dans le registre, la broche ALE étant reliée à l'entrée Enable du registre. De plus, on doit déconnecter la mémoire du bus de donnée pour éviter un conflit entre l'envoi de la donnée par la mémoire et l'envoi de l'adresse par le processeur. Pour cela, on utilise l'entrée OE (Output Enable).
- La lecture de la donnée consiste à mettre ALE à 0, et à récupérer la donnée sur le bus. Pendant cette étape, le registre maintient l'adresse sur le bus d'adresse. Le bit OE est configuré de manière à activer la sortie de données.

Les bus mémoire larges : multiples canaux et arrangement horizontal
[modifier | modifier le wikicode]Le bus mémoire des PC modernes est très important pour les performances. Les processeurs sont de plus en plus exigeants et la vitesse de la mémoire commence à être de plus en plus limitante pour leurs performances. La solution la plus évidente est d'augmenter la fréquence des mémoires et/ou de diminuer leur temps d'accès. Mais c'est que c'est plus facile à dire qu'à faire ! Les mémoires actuelles ne peut pas vraiment être rendu plus rapides, compte tenu des contraintes techniques actuelles. La solution actuellement retenue est d'augmenter le débit de la mémoire. Et pour cela, la performance du bus mémoire est primordiale.
Le débit binaire des mémoires actuelles dépend beaucoup de la performance du bus mémoire. La performance d'un bus dépend de son débit binaire, qui lui-même est le produit de sa fréquence et de sa largeur. Diverses technologies tentent d'augmenter le débit binaire du bus mémoire, que ce soit en augmentant sa largeur ou sa fréquence. La largeur du bus mémoire est quelque peu limitée par le fait qu'il faut câbler des fils sur la carte mère et ajouter des broches sur les barrettes de mémoire. Les deux possibilités sont déjà utilisées à fond, les bus actuels ayant plusieurs centaines de fils/broches.
Pour commencer, mettons de côté la fréquence, et intéressons-nous à la largeur du bus mémoire. Les PC actuels ont des bus d’une largeur de 64 bits minimum, avec cependant possibilité de passer à 128, 192, voire 256 bits ! C'est ce qui se cache derrière les technologies dual-channel, triple-channel ou quad-channel.
Le bus mémoire a une taille de 64 bits par barrette de mémoire, avec quelques contraintes de configuration. Le dual-channel permet de connecter deux barrettes de 64 bits, à un bus de 128 bits. Ainsi, on lit/écrit 64 bits de poids faible depuis la première barrette, puis les 64 bits de poids fort depuis la seconde barrette. Le triple-channel fait de même avec trois barrettes de mémoire, le quad-channel avec quatre barrettes de mémoire. Ces techniques augmentent la largeur du bus, donc influencent le débit binaire, mais n'ont pas d'effet sur le temps de latence de la mémoire. Et ce ne sont pas les seules techniques dans ce genre.
Pour en profiter, il faut placer les barrettes mémoire d'une certaine manière sur la carte mère. Typiquement, une carte mère dual channel a deux slots mémoires, voire quatre. Quand il y en a deux, tout va bien, il suffit de placer une barrette dans chaque slot. Mais dans le cas où la carte mère en a quatre, les slots sont d'une couleur différent pour indiquer comment les placer. Il faut placer les barrettes dans les slots de la même couleur pour profiter du dual channel.
Les bus mémoire à base de liaisons point à point : les barrettes FB-DIMM
[modifier | modifier le wikicode]Dans le cas le plus fréquent, toutes les barrettes d'un PC sont reliées au même bus mémoire, comme indiqué dans le schéma ci-dessous. Le bus mémoire est un bus parallèle, avec tous les défauts que ca implique quand on travaille à haute fréquence. Diverses contraintes électriques assez compliquées à expliquer font que les bus parallèles ont du mal à fonctionner à haute fréquence, la stabilité de transmission du signal est altérée.
Les barrettes mémoire FB-DIMM contournent le problème en utilisant plusieurs liaisons point à point. Il y a deux choses à comprendre. La première est que chaque barrette est connectée à la suivante par une liaison point à point, comme indiqué ci-dessous. Il n'y a pas de bus sur lequel on connecte toutes les barrettes, mais une série de plusieurs liaisons point à point. Les commandes/données passent d'une barrette à l'autre jusqu'à destination. Par exemple, une commande SDRAM part du contrôleur mémoire, passe d'une barrette à l'autre, avant d'arriver à la barrette de destination. Même chose pour les données lues depuis les DRAM, qui partent de la barrette, passent d'une barrette à la suivante, jusqu’à arriver au contrôleur mémoire.
Ensuite, les liaisons point à point sont au nombre de deux par barrette : une pour la lecture (northbound channel), l'autre pour l'écriture (southbound channel). Chaque barrette est reliée aux liaisons point à point par un circuit de contrôle qui fait l'interface. Le circuit de contrôle s'appelle l'Advanced Memory Buffer, il vérifie si chaque transmission est destinée à la barrette, et envoie la commande/donnée à la barrette suivante si ce n'est pas le cas.

L'avantage de cette organisation est que l'on peut facilement brancher beaucoup de barrettes mémoire sur la carte mère. Avec un bus parallèle, il est difficile de mettre plus de 4 barrettes mémoire. Plus on insère de barrettes de mémoire, plus la stabilité du signal transmis avec un bus parallèle se dégrade. Cela ne pose pas de problème quand on rajoute des barrettes sur la carte mère, car elles sont conçues pour que le signal reste exploitable même si tous les slots mémoire sont remplis. Mais cela fait qu'on a rarement plus de 4 slots mémoire par carte mère. Avec des barrettes FB-DIMM, on peut monter facilement à 8 ou 16 barrettes.