La mémoire physique
Lecture 41 min. âą
Table des matiĂšres
- Architecture de Von Neumann
- La RAM
- Cellule mémoire
- Mot binaire
- Matrice de mémoire
- Adressage
- Ecriture
- Rank
- Channel
- Conclusion
Architecture de Von Neumann
Tous les ordinateurs que vous utilisez aujourdâhui au quotidien sont basĂ©s sur une architecture Ă comprendre une maniĂšre dâagencer des composants et de les faire se parler.
Cette architecture se nomme von Neumann nommĂ©e dâaprĂšs le nom du touche Ă tout John von Neunamm.
Il a été le premier à théoriser le concept de mémoire unique à la fois pour le programme et pour les données.
Lâarchitecture se compose de 3 Ă©lĂ©ments principaux :
- Une unité de traitement appelée généralement CPU : elle réalise les traitements et les calculs sur les données
- Une mĂ©moire : stocke les donnĂ©es du programme et le programme lui-mĂȘme.
- Un bus de communication : un ensemble de fils de mĂȘme longueur

Â
Lâarchitecture prĂ©cĂ©dente sĂ©parait le programme de la donnĂ©e.
Elle sâappelait lâarchitecture Harvard. Plus compliquĂ© Ă construire que son homologue du jour.
La RAM
Dans les ordinateurs de tous les jours, votre tour, le laptop, etc âŠ
Le bloc de mémoire se nomme une RAM pour Random Access Memory.

Si lâon zoom sur le bloc RAM, on sâaperçoit que celui est composĂ© dâune sĂ©rie de lignes de blocs.

Chaque ligne est désignée par une adresse.
La premiÚre adresse étant @0 et la derniÚre @N.
N le nombre total de lignes dans la RAM.
Zoomons encore sur une ligne de blocs.
Chaque bloc est numéroté par rapport à sa position dans la ligne.
Arbitrairement, on choisit la droite comme Ă©tant lâorigine, mais on pourrait totalement faire lâinverse.

Chaque bloc est appelé une cellule mémoire.
Continuons de descendre.
Cellule mémoire
On est maintenant au niveau dâune cellule mĂ©moire.
Il sâagit dâun bloc qui peut avoir deux Ă©tats.
Un état 0 logique.

Un état 1 logique.

Il est possible de lire sa valeur.
Pour cela branche un fil de donnée à notre cellule.
Pour le moment la valeur stockĂ©e dans la cellule est inconnue de lâextĂ©rieur.

Pour pouvoir lire lâinformation contenue, il faut en quelque sorte activer la cellule.
Ceci est fait au moyen dâun second fil, appelĂ© fil dâadressage.

Pour lire lâinformation, on vient activer le fil dâadressage.
Cela a pour effet dâextraire la donnĂ©e de la cellule qui se propage dans le fil de donnĂ©e, ici un Ă©tat logique 0.

De la mĂȘme maniĂšre si 1 logique est stockĂ©, activer la cellule au travers du fil dâadressage permettra de rĂ©cupĂ©rer ce 1 dans le fil de donnĂ©e.

Il est possible dâimposer lâĂ©tat de la cellule au travers du fil de donnĂ©e.
Mais tant que la cellule nâa pas Ă©tĂ© activĂ©e au travers du fil dâadressage, lâĂ©tat de la cellule reste inchangĂ©e.

Pour cela, il faut activer le fil dâadressage, qui permet dâimposer lâĂ©tat 0 Ă notre cellule.

Un fois le fil dâadressage dĂ©sactivĂ© notre cellule conserve son Ă©tat 0.

De cet Ă©tat 0, on peut alors venir appliquer lâĂ©tat 1.

Lorsque le fil dâadressage se dĂ©sactive, le 1 est conservĂ©.

Mot binaire
Bon câest cool on peut stocker 0 et 1 et les lire / Ă©crire Ă notre convenance.
Mais on nâira pas loin avec une seule cellule. đ
Câest ici quâintervient la reprĂ©sentation binaire des nombres.
Dans notre systÚme, on nomme bit une cellule mémoire.
bit : binary digit => deux états
Avec 2 bits, il est possible de représenter:
- 00 => 0
- 01 => 1
- 10 => 2
- 11 => 3
Nous allons donc agencer deux cellules pour pouvoir de maniĂšre indĂ©pendante, stocker les digits du nombre que lâon souhaite stocker.
Il est Ă remarquer que le fil dâadressage est commun au deux cellules.
Ici nous allons représenter le nombre décimal 2 en mémoire. Pour cela on définit le bit 1 à 1 et le bit 0 à 0.

Si lâon veut lire les donnĂ©es stockĂ©es dans notre couple de cellule.
On active les deux cellules.
Ce qui permet de lire le mot binaire câest Ă dire un ensemble de cellules ordonnĂ©es.
Ici ce mot vaut 10 en binaire ou 2 en décimale.

De la mĂȘme maniĂšre si lâon dĂ©sire enregistrer une valeur, mettons 01. On active le fil dâadressage. On applique la valeur respectivement voulue pour les cellules.
Ici :
- un 0 sur le bit1
- un 1 sur le bit0

Pour stocker de plus grand nombre, on peut alors augmenter le nombre de cases qui constitue notre mot binaire, dâun mot de 2 bits, on passe Ă un mot de 8 bits.
Que lâon nomme plus communĂ©ment un octet.
octet, signifie 8 pour âoctâ comme dans octogone.
un ensemble de 8 bits.

Que lâon peut ainsi manipuler comme notre mot binaire de 2 bits.
En activant le fil dâadressage de la ligne du mot, on peut en lire sa valeur.

On peut alors Ă©galement modifier le mot. En appliquant en entrĂ©e la valeur du mot voulu et en activant le fil dâadressage.

Et comme toujours, ce qui est vrai pour 1, 2, 8 est valable pour 1000. Faut juste beaucoup de fils. đ€Ł

Matrice de mémoire
Bon! On peut stocker des nombres aussi grands que lâon veut, mais on ne peut en stocker quâun seul. đ
Il faut trouver un moyen dâen stocker dĂ©jĂ 2.
La solution est toute trouvée, nous allons les empiler.

Nous avons donc 2 mots différents.
Les lignes dâadressage sont communes aux mots et les colonnes de donnĂ©es sont communes aux bits des mots.
Pouvant de maniĂšre indĂ©pendante activer ou non une ligne dâadressage, on est dans la capacitĂ© de sĂ©lectionner le mot dĂ©sirĂ©.
Par exemple, ic, lâon dĂ©sire modifier le mot Ă lâadresse @1.
On active la ligne correspondante et on applique la valeur.

Pour lire la valeur, câest Ă©galement la mĂȘme chose.
On peut de maniĂšre indĂ©pendante sĂ©lectionner lâadresse @0. Et lire le mot qui y est contenu.

On a désormais un systÚme complet qui permet de lire et écrire deux mots de 2 bits.
On peut alors généraliser !
On créé alors une matrice de M mots binaires de N bits.

Nous pouvons dĂ©sormais, stocker la Terre entiĂšre et conquĂ©rir le monde !! đ
Adressage
TrÚs bien, on a un joli systÚme tout propre, capable de stocker de la donnée.
Pour le moment, jâai passĂ© sous silence ce souci.
Mais comment peut-on sĂ©lectionner la ligne que lâon dĂ©sire ?
Surtout lorsquâon a plus de deux mots.
Decodeur
Câest alors quâintervient un systĂšme qui se nomme un dĂ©codeur.
Il sâagit dâune sorte de gare de routage.
On lui dit quelle voie doit ĂȘtre activĂ©e et lui active la voie correspondante.
Prenons un exemple avec 4 voies.
Comment pouvons nous piloter lâentrĂ©e de gauche pour que la voie2 soit la seule activĂ©e ?

Mettons que lâon veille dĂ©finir directement la sortie par son numĂ©ro.

Et bien on va encoder ce nombre avec des fils.

On définit binairement ce 2.

De cette maniĂšre, on vient sĂ©lectionner la voie que lâon dĂ©sire.
On peut alors le faire pour toutes les voies, ici un 3.

Par contre on a un souci, mĂȘme quand on ne veut rien sĂ©lectionner, la voie 0, reste active.

On ajoute alors un troisiÚme fil Enable qui permet de contrÎler la sortie du décodeur:
- si Ă©tat bas, aucune voie nâest allumĂ©e

- si état haut, la voie sélectionnée est allumée

On peut alors contrĂŽler ce que lâon dĂ©sire comme voie en maintenant un Ă©tat haut sur Enable.

Ou inhiber la sortie mĂȘme si les bits dâentrĂ©es sont actifs

Si lâon a besoin de plus de voies que 4, il nous faut un fil dâentrĂ©es supplĂ©mentaire.
Car 2^3 = 8

Celui-ci se contrĂŽle de la mĂȘme maniĂšre.

On peut alors généraliser.

Selection de la ligne
On a donc un systĂšme qui nous permet de sĂ©lectionner une ligne parmi un ensemble dâautres.
On va donc coler un décodeur sur notre matrice de mémoire.

On peut alors en faire une jolie boĂźte.
On peut alors, sortir 3 fils qui constitueront notre bus d'adresses. Ici de 3 bits.
Et un bus de données de 8 bits.
Avec supplĂ©ment un signal dâactivation de la boĂźte. Qui correspond au Enable de notre dĂ©codeur.
Ce qui permet de pouvoir stocker un mot de 8 lettres.

On peut alors augmenter le nombre de fils dâadresse pour venir faire grandir en hauteur la matrice.
Ici, on passe Ă 8 bits dâadresses et donc 256 lignes possibles.
On augmente alors dâautant la quantitĂ© de donnĂ©es stockable Ă une valeur incroyable de 256 octets.

On peut également augmenter la largeur du bus de données pour lui faire atteindre les 64 fils.
Mais on reste ridicule en termes de stockage. 2 kilo-octets soit un fichier.

Si on augmente Ă 17 fils le bus de dâadresse.
On atteint pĂ©niblement les 1 mĂ©ga-octet, une pauvre image. đ«

On pourrait augmenter le nombre de fils du bus de données, mais celui-ci ne peut pas grandir excessivement.
Je crois lâon ne va pas y arriver comme ça âŠ
Il nous faut un autre angle.
Multiplexeur
Avant de continuer notre chemin vers de plus grande valeur de stockage.
Nous allons faire un tour sur un autre systĂšme.
Celui-ci possÚde deux entrées appelées voie 0 et voie 1.
LâidĂ©e du composant est de venir connecter lâune des voies Ă la sortie selon le signal de contrĂŽle.

Si le signal de contrĂŽle est Ă 1, alors on connecte la voie 1 Ă la sortie.
Ici, le signal de la voie 1 vaut 0 donc la Sortie vaut également 0.

Si la voie 1 possĂšde un signal 1, la Sortie recopie ce comportement.

Si le signal de contrĂŽle bascule Ă 0, alors câest la voie 0 qui est connectĂ©e Ă la Sortie.
La voie 1 mĂȘme Ă 1 est ignorĂ©e.

De la mĂȘme maniĂšre, si la voie 0 passe Ă 1, la Sortie vaut 1.

On peut alors utiliser le mĂȘme systĂšme dâadressage que pour le decodeur pour venir connecter plus de 2 voies Ă une sortie.
On contrÎle alors avec autant de bits que nécessaire, ici 2 pour contrÎler 4 voies.

Et on peut venir augmenter le nombre de voies.

Et finalement généraliser à N voies.
Pour déterminer le nombre de fils de contrÎle nécessaires. On va poser deux choses :
- soit x le nombre de fils de contrĂŽle
- soit N le nombre de voies

On voit aussi que le nombre de voies sera toujours une puissance de 2.

Ce systĂšme ce nomme un multiplexeur.
Selection de la colonne
Notre systÚme précédent avait comme problÚme le faible stockage.
On a aussi vu que lâon ne pouvait pas faire grandir en largeur notre matrice, car la taille du bus de donnĂ©es auquel la matrice est rattachĂ©e doit rester raisonnable.
LâidĂ©e qui semble moins optimisĂ©e va ĂȘtre de selectionner une unique cellule et plus toute la largeur.
Ainsi on peut faire grandir la largeur de la matrice indépendamment de la largeur du bus de données.
Pour cela on vient brancher un multiplexeur sur la sortie de la matrice.
On branche également des fils de contrÎle sur celui-ci.
Ayant 8 bits de données en sortie, nous avons besoin de 3 bits de contrÎle.

On peut alors sélectionner indépendamment, la ligne et la colonner.
Ici on sélectionne la ligne 5 et la colonne 5.
La case aux coordonnées (5; 5) vaut 1.
Et ainsi la sortie vaut également 1.

On peut alors sĂ©lectionner nâimporte quelle cellule de la matrice.
Ici les coordonnées (2; 3):

On vient alors diviser notre bus dâadresses entre le dĂ©codage de la ligne et la sĂ©lection de la colonne.

On peut alors synthétiser en:

On vient dâencapsuler la sĂ©lection dâun bit de donnĂ©es.
Qui peut se gĂ©nĂ©raliser avec autant de bits du bus dâadresse, ici 20 bits.

Bank
Pour le moment, nous sommes capable de sélectionner un seul bit.
Or pour créer un octet de donnée. Il nous en faut 8.
LâidĂ©e alors est dâutiliser 8 matrices.
Mais de partager le bus dâadresse avec chacune des 8 matrices.
On attribue alors à chaque matrice un bit différent.

Lorsque lâon demande un octet. On vient simultanĂ©ment sĂ©lectionner la mĂȘme case dans chacune des matrices.

Ainsi lâon rĂ©cupĂšre notre octet de donnĂ©es.
On encapsule alors les 8 matrices dans une bank.
Celle-ci prend en entrĂ© le bus dâadresses et en sortie le bus de donnĂ©es.

Bus de données complet
Nous avons rĂ©cupĂ©rĂ© notre octet mais pas les 64 bits que lâon possĂ©dait avant.
Nous allons donc continuer à paralléliser les matrices.
Et donc pour se faire, utiliser 8 banks.
On va alors attribuer un octet différent à chaque bank.

On peut alors sélectionner des mots de 64 bits formés par les octets de chaque bank.

Chaque case des matrices est alors accessible par une adresse unique que lâon peut reprĂ©senter via ce tableau de correspondance, ici pour un bus dâadresse de 6 bits.

On se retrouve alors virtuellement avec notre systÚme de départ.
Une sĂ©rie de N ligne dâadresses de cases mĂ©moire et aujourdâhui nous savons dĂ©sormais que chaque case est dans les faits une matrice contenu dans une bank.

La taille de la ligne Ă©tant alors la largeur du bus de donnĂ©es. Ici 64 bits. đ

Stockage
On va voir jusquâoĂč on peut monter avec notre nouvelle architecture. đ
Commençons avec une matrice de 8 par 8.

On obtient un stockage de 512 octets.
Augmentons la largeur du bus dâadresses Ă 24 bits.
On utilise alors des matrices rectangulaires de 14 lignes de hauteur et de 10 colonnes de largeur.

On passe alors a 128 Mo de stockage ! đ
En dissociant la largeur du bus de données de la largeur de la matrice, on a dramatiquement augmenté la densité de stockage.
Vous imaginez si lâon devait gĂ©rer 1024 fils !
Et on continue alors à augmenter notre bus de données.

Eh! Mais ça commence Ă ressembler Ă ce que lâon connaĂźt. đ
Maintenant! Le dernier clou dans le cercueil. Rajoutons 2 fils de plus, juste 2âŠ

Faites les calculs pour 40 bits de largeur de bus dâadresse. Vous verrez que vous trouverez quelque chose de massif ! 40 bits dâadressage => 4 To de stockagerĂ©ponse
Bien sĂ»r lâadressage ne suffit, il faut aussi les cellules mĂ©moire correspondantes et donc les 32 TĂ©ra de cellules.
Ceci étant conditionné à la fois par la surface de la mémoire et de la taille de chaque cellules.
Ce qui explique la Loi de Moore appliqué au stockage, plus les cellules seront petites, plus on pourra en caser beaucoup sur une surface réduite!
Ecriture
Câest fantistique on est capable stocker en thĂ©orie ce que lâon veut!
En thĂ©orie seulementâŠ
Pour le moment, il est impossible dâĂ©crire quoique ce soit en mĂ©moire.
Architecture Von Neumann partie 2
Reprenons le schéma du début.
On a un bus dâadresse de largeur variable et un bus de donnĂ©es de 64 bits.
On peut interroger la mĂ©moire grĂące au bus dâadresse et lire la rĂ©ponse grĂące au bus de donnĂ©es.

Par contre, comment peut-on écrire dans cette mémoire ?

Et bien, nous allons rajouter un nouveau fil !
Celui-ci sera responsable de dĂ©finir si lâon dĂ©sire lire depuis une adresse ou y Ă©crire.

Avant de pouvoir nous attaquer Ă lâĂ©criture, nous avons besoin de plusieurs outils.
Demultiplexeur
Le demultiplexeur est simplement un multiplexeur montĂ© Ă lâenvers.
On dispose dâune entrĂ©e que lâon souhaite recopier sur une voie.

Le mutiplexeur Ă©tait lâinverse, on avait une multitude de voies que lâon souhaitait recopier sur une sortie unique.

Ici mĂȘme principe, si le fil de contrĂŽle vaut 0 alors la lâentrĂ©e est connectĂ©e Ă la voie 0, la voie 1, est elle laissĂ©e complĂštement dans le vide, lâĂ©quivalent dâun fil coupĂ©.

Ce qui fait que si l'entrée vaut 0, la sortie vaudra également 0.
Ceci est la diffĂ©rence fondamentale par rapport au dĂ©codeur qui nâĂ©tait capable que de dĂ©finir un Ă©tat haut sur une voie en fonction dâun signal de contrĂŽle.

Lâaiguillage de lâentrĂ©e peut ĂȘtre modifiĂ© pour ĂȘtre connectĂ© Ă la voie 1 en passant le contrĂŽle Ă 1.

On peut alors augmenter le nombre de voies, ici 8.

Et comme toujours, vous commencez à connaßtre la chanson, on peut généraliser à N voies. Et par conséquent log2(N) contrÎles.

Mux/DeMux
Comme on peut le voir le Multiplexeur et le DĂ©multiplexeur sont trĂšs semblables. Ils partagent tout deux les mĂȘme connexions. Seuls les entrĂ©es et les sorties sont inversĂ©es.
On va ainsi pouvoir définir un nouveau composant qui se nomme un Mux/DeMux qui possÚde un fil de contrÎle supplémentaire mode.

Dans ce composant hybride, les connexions sont à la fois des entrées et des sorties.
Tout dĂ©pend de lâĂ©tat du fil mode.
Si celui-ci est Ă lâĂ©tat 0. Le composant se comporte comme un Multiplexeur.
Les voies sont les entrĂ©es et la sortie, et bien la sortie. đ

Si mode vaut 1 alors la sortie devient lâentrĂ©e et les voies les sorties.

Buffer I/O
JusquâĂ prĂ©sent on ne faisait que lire de lâinformation depuis la mĂ©moire, mais si lâon se met Ă Ă©crire Ă©galement de la donnĂ©es.
Comment empĂȘcher que ce qui est contenu dans le CPU nâaille Ă©craser le contenu de la RAM ?
Tant que la cellule nâest pas sĂ©lectionnĂ©e, pas de souci. Elle est physiquement dĂ©connecter du reste.

Par contre dĂšs que le bus dâadresse sĂ©lectionne la cellule, elle devient physiquement reliĂ© Ă lâextĂ©rieur et lâextĂ©reur peut trĂšs bien ĂȘtre un 1.

Si la valeur Ă©tait Ă la base un 0, on peut trĂšs bien avoir Ă©crasĂ© la donnĂ©e avant dâavoir Ă©tĂ© capable de la lire.
On se retrouve dans un Ă©tat indĂ©cis, peut-ĂȘtre quâil y a un 0 ou peut-ĂȘtre un 1, possiblement quelque chose entre les deux.

Le fil allant dans les deux sens, lâinverse est Ă©galement vrai.
Il nous faut un mĂ©canisme, nous permettant dâisoler notre systĂšme lors de la lecture mais aussi de lâĂ©criture.

DĂ©jĂ nous allons avoir besoin dâun systĂšme qui nâest passant que dans un seul sens, on nomme ceci un buffer.

On va alors contrĂŽler ce buffer pour le rendre ou non passant.

- Si le contrĂŽle vaut
0, le systÚme est bloquant et se comporte comme un fil coupé.

- Si le contrĂŽle vaut
1, le systĂšme est passant.

On appelle ça un Tri State Buffer car du point de vue de la sortie on a:
- état 0
- état 1
- état fil coupé
On dĂ©finit alors un autre composant qui va permettre de faire lâinverse. On nomme ceci une porte NON.

Si lâentrĂ©e vaut 1 alors la sortie vaut 0 et inversement.
LâidĂ©e est dâavoir un systĂšme symĂ©trique.
On va alors agencĂ© tĂȘte bĂȘche nos deux tri state buffer, connectĂ© lâentrĂ© de lâun Ă la sortie de gauche et connecter lâentrĂ©e de lâautre Ă la sortie de droite. Que lâon contrĂŽle simultanĂ©ment avec un mĂȘme contrĂŽle. On inverse le signal sur lâautre buffer.

Ce signal peut avoir deux valeurs:
-Si le signal est Ă lâĂ©tat 1 les donnĂ©es transitent de la gauche vers la droite.

-Si le signal est Ă lâĂ©tat 0 les donnĂ©es transitent de la gauche vers la droite.

On peut alors en faire un composant à 2 connexions de données et 1 fil de contrÎle.

Ce composant se nomme un Buffer I/O.
Que lâon peut alors intercalĂ© dans notre systĂšme de tout Ă lâheure.
On vient Ă©galement brancher le CPU au contrĂŽle, ainsi câest lui qui devient moteur de la dĂ©sicion du flux de donnĂ©es
En Lecture

Ou en Ecriture

Ce choix est purement arbitraire, le Buffer I/O pourrait-ĂȘtre montĂ© dans le sens inverse.
Modifier les matrices
Nous avons désormais tous les outils pour travailler.
Nous allons temporairement remplacer le multiplexeur par un démultiplexeur.

Imaginons que lâon souhaite modifier la case Ă lâadresse 011010.
Soit colonne 2 et ligne 3.
Sa valeur est actuellement de 0. On désire y inscrire 1.
Le dĂ©multiplexeur est rĂ©glĂ© pour rediriger lâentrĂ©e sur la voie 2.
On applique un 1 sur lâentrĂ©e.

Ce qui a pour effet de modifier la cellule aux coordonnées (2, 3) mais laisse inchangées les autres.

Comme nous désirons à la fois écrire et lire dans la matrice.
On utilise notre Mux/DeMux.
On ajoute également un fil supplémentaire pour réaliser le changement de mode du Mux/DeMux.

On rajoute Ă©galement le Buffer I/O que lâon contrĂŽle avec le mĂȘme signal que le Mux/DeMux.
Ce qui permet de ne pas modifier par inadvertance une case mémoire.

On peut alors faire un composant intégré de ce systÚme.

On verra dans la suite des mĂ©thode pour optimiser le nombre dâĂ©lĂ©ments nĂ©cessaires.
On en reviens alors Ă lâorganisation prĂ©cĂ©dente mais avec dĂ©sormais la possibilitĂ© de lire et dâĂ©crire des mots de 64bits.

Rank
Il est alors possible de subdiviser nos banks en des banks plus petite. Pour cela nous allons utiliser la mĂȘme astuce que toujours: rĂ©server une partie des fils du bus dâadresse pour un usage diffĂ©rents.
Ici cet usage va ĂȘtre de sĂ©lectionne la bank qui possĂšde le bon octet.
Pour cela, on utilise un dĂ©codeur qui vient selectionner la bank en fonction de lâadressage que lâon lui fourni.

Si par exemple on souhaite sélectionner un octet situé dans la bank 1, on va alors activer le bit 1 et laisser le bit 0.
Ce qui va activer le signal Enable de la bank 1 et ainsi permettre le dĂ©codage de lâadresse de lâoctet voulu.

Ce qui permet un adressage non plus en 2 dimensions mais en 3 !

Chaque bank contient un certain nombre dâoctets diffĂ©rents.
On peut alors en faire un composant que lâon appelle une puce ou Chip.

Qui peut se symboliser par une version simplifiée.

On agence chacun de nos chips comme nous lâavions fait avec les banks, chaque chip reprĂ©sentant un octet. Il nous en faut Ă©galement 8 pour atteindre les 64 bits.

Et là ça devient fou et câest le but de tout ce quâon vient de voir.

Les 8 rectangles noirs sur la barette de RAM sont les fameux chips !
Lorsque jâai vu ça, ça mâa donnĂ© envie dâĂ©crire cet article mais surtout de comprendre le comment de ce bloc noir. đ
Optimisation
Maintenant que lâon a en quelque sorte le schĂ©ma de principe dâune barette de RAM. Nous allons pouvoir opĂ©rer quelques optimisation.
Dâune part en matiĂšre de nombre de composants utilisĂ©s, dâautre part en terme de place prise en mm2.
LâidĂ©e restant de maximiser le stockage et de minimiser le nombre de composants nĂ©cessaires.
Souvenez vous une bank est composĂ© dâune sĂ©rie 8 matrice posĂ©dant chacune leur dĂ©codeur de ligne et un multiplexeur.
Et bien il est possible de simplifier cela en permettant de au multiplexeur de manipuler des groupe de 8 cases.
Ainsi lorsque lâon sĂ©lectionne une case dans la matrice, câest en fait 8 cases qui sont sĂ©lectionnĂ©es simultannĂ©ment.
On a ainsi des matrice de largeur multiple de 8. Ici 16384. Ce qui donne 16384 / 8 = 2048 octets par lignes multipliĂ© par le nombre de lignes, ici 65536, ce qui donne 2048 * 65536 = 134217728 adresses oĂč 128 Mo.
On complexifie le Mux/DeMux mais lâon divise par 8 le nombre de decodeur de lignes nĂ©cessaire !

Et de fait, cette bank a le mĂȘme comportement quâauparavant, nous avons un dĂ©codeur qui se charge de sĂ©lectionner la ligne dans la matrice de mĂ©moire et un Mux/DeMux qui dĂ©code la colonne sĂ©lectionnĂ©e.
La diffĂ©rence est que lâon a un dĂ©codeur pour sĂ©lectionner un octet complet et plus seulement un bit. De mĂȘme le Mux/DeMux est liĂ© Ă un octet complet.

Cette optimisation provoque une diffĂ©rence fondamentale: lâunitĂ© de base de la mĂ©moire nâest plus le bit mais lâoctet. De fait, il nâest plus possible dâĂ©crire ou de lire un bit spĂ©cifique, seulement le paquet de 8 quâil contient.
On peut alors agencer tout ce beau monde dans le chip pour stocker notre octet.

Et en Ă©tant intelligent dans le placement on peut mettre le nombre que lâon dĂ©sire de banks.

De cette maniĂšre on minimise lâutilisation de composants onĂ©reux comme les dĂ©codeurs et on maximise le nombre de cellules mĂ©moires pour plus de stockage !
Il existe aussi tout un tas dâoptimisations liĂ© au fait que lâon puisse lire plusieurs banks en mĂȘme temps et donc crĂ©er des files dâentrĂ©es/sorties, mais je vais ĂȘtre honnĂȘte avec vous, jâai pas tout compris ^^â
Donc on va sâarrĂȘter lĂ đ
Channel
DerniĂšre chose avant de se quitter.
Une barrette de RAM câest cool mais pour les plus grosses dans le commerce on tourne aux alentours de 8Go / 16Go. Sauf que pour lancer des monstres comme Cyberpunk 2077, il faut dĂ©jĂ 8Go. Il ne va pas rester grand chose pour le reste du systĂšme ^^â
Du coup derniĂšre piĂšce du puzzle.
On va brancher plusieurs barrette de RAM qui commenceront toutes Ă lâadresse 0.
Mais on va les rattacher à un composant, un contrÎleur mémoire qui va se charger de mapper les addresses suppérieures à la taille de la RAM sur la seconde barette par exemple. Ce qui permet avec des barettes de 8Go de créer des octets à des adresses à 15Go ou plus.
On va alors brancher un unique bus dâadresses, bus de donnĂ©es et bus de contrĂŽle (lecture/Ă©criture). Puis avec un fil dâactivation unique Ă la barrette de RAM dĂ©cider de quelle barette on souhaite choisir le paquet de 64 bits.
On a donc une barette de RAM dans chaque fente.
Et on branche tout le monde sur le contrÎleur mémoire.

On peut alors généraliser le systÚme de channel.
Ici, un channel A et un channel B. Chaque channel gérant 16Go de mémoire qui mis ensemble créé un bloc unifié de 32Go adressables !

Il existe des barettes de RAM dual channels, ce qui signifie que channels sont rattaché à chaque barettes de RAM.
On a aussi la possibilitĂ© de scinder un channel de 64 bits en deux channels de 32 bits, et ainsi pouvoir parrallĂ©liser encore plus dâaction, câest ce qui est par exemple utiliser dans la technologie DDR5.
Le nombre de channel est gĂ©nĂ©ralement limitĂ© Ă 2 car il est trĂšs onĂ©reux de mettre en place un channel, sur les technolgies modernes ça reprĂ©sent 288 fils ! 288 fils qui faut rĂ©ussir Ă placer sur la carte mĂšre sans quâils ne se croisent ni nâintĂšfĂšrent entre eux. Il y a Ă©galement des contraintes sur la longueurs des fils.
Ils doivent tous ĂȘtre de la mĂȘme longeur, sinon les signaux du bit 1 du bit12 serait dĂ©synchronisĂ©s et quand on est dans des frĂ©quences de plusieurs GHz, le moindre micro-mĂštre voir nanomĂštre de trajet supplĂ©mentaire peut avoir des consĂ©quences.
Câest pour toutes ces raisons que lâon tente Ă tout prix dâaugmenter la taille des barettes de RAM et non le nombres de slots sur la carte-mĂšre.
Un channel nâa pas besoin que ses deux fentes soient remplies, par contre si câest le cas, les barettes doivent ĂȘtre identiques !
Conclusion
JâespĂšre que cette petite introduction au principe de fonctionnement vous aura plus, ce nâest Ă©videmment pas un cours, jâai pris des raccourci que mĂȘme sur Mario Kart on ne prendrait pas.
Jâai Ă©galement passĂ© sous silence lâaspect dynamique du systĂšme qui aurait demander beaucoup trop temps Ă expliquer dans un article Ă©crit.
Ma volontĂ© quand jâai Ă©crit ce post Ă©tait de moi-mĂȘme comprendre comment ça marchait.
JâespĂšre ne pas avoir dit trop de bĂȘtises, le sujet est trĂšs vaste, jâai fait de mon mieux pour vulgariser sans trop dĂ©former la rĂ©alitĂ©.
A la prochaine fois pour un nouvel article sur autre chose â€ïž
