La mémoire physique

Lecture 41 min. ‱


Table des matiĂšres

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 :

Deux rectangles relié par une série de traits parallÚles signaler comme étant un bus de données. Le premier rectangle à la mention CPU, l'autre mémoire

 

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.

Deux rectangles relié par une série de traits parallÚles signaler comme étant un bus de données. Le premier rectangle à la mention CPU, l'autre R.A.M

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

Un rectangle appelé RAM, contient des rectangles tout en longueur subdivisé horizontalement en des rectangles plus petits. Les rectangles subdivisés sont empilés verticalement et numéroté @1 jusqu'à @N

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.

Un rectangle subdivisĂ© en 64 parties. La partie Ă  l'extrĂȘme gauche notĂ© 64 et celle Ă  l'extrĂȘme droit 0. La ligne elle-mĂȘme est notĂ©e @0

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 rectangle avec un 0 bleu

Un état 1 logique.

Un rectangle avec un 1 rouge

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.

Un rectangle avec un 0 bleu relié à un rectangle avec un point d'interrogation par un trait appelé fil de données

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.

Un rectangle avec un 0 bleu relié à un rectangle avec un point d'interrogation par un trait appelé fil de données. Un autre trait part de la gauche du premier rectangle et est nommé 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.

Un rectangle avec un 0 bleu relié à un rectangle avec un 0 bleu par un trait appelé fil de données bleu. Un autre trait rouge part de la gauche du premier rectangle et est nommé fil d'adressage activé.

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.

Un rectangle avec un 1 rouge relié à un rectangle avec un 1 rouge par un trait appelé fil de données rouge. Un autre trait rouge part de la gauche du premier rectangle et est nommé fil d'adressage activé.

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.

Deux rectangles sont reliés par un trait bleu vertical. Le premier est un rectangle muni d'un 1 rouge à l'intérieur. Le deuxiÚme d'un 0 bleu. Le premier rectangle possÚde un trait horizontal blanc sur son cÎté gauche mentionné fil d'adressage désactivé

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

Deux rectangles sont reliés par un trait bleu vertical. Le premier est un rectangle muni d'un 0 bleu à l'intérieur. Le deuxiÚme d'un 0 bleu. Le premier rectangle possÚde un trait horizontal rouge sur son cÎté gauche mentionné fil d'adressage activé

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

Deux rectangles sont reliés par un trait bleu vertical. Le premier est un rectangle muni d'un 0 bleu à l'intérieur. Le deuxiÚme d'un point d'interrogation . Le premier rectangle possÚde un trait horizontal blanc sur son cÎté gauche

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

Deux rectangles sont reliés par un trait bleu vertical. Le premier est un rectangle muni d'un 1 rouge à l'intérieur. Le deuxiÚme d'un 1 rouge. Le premier rectangle possÚde un trait horizontal rouge sur son cÎté gauche

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

Deux rectangles sont reliés par un trait bleu vertical. Le premier est un rectangle muni d'un 0 bleu à l'intérieur. Le deuxiÚme d'un point d'interrogation . Le premier rectangle possÚde un trait horizontal blanc sur son cÎté gauche

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:

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.

Deux cellules mĂ©moires. Les deux partagent le mĂȘme fil d'adressage. La cellule de gauche contient un 1 rouge. La cellule de droite un 0 bleu.

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.

Deux cellules mĂ©moires. Les deux partagent le mĂȘme fil d'adressage activĂ© en rouge. La cellule de gauche contient un 1 rouge. La cellule de droite un 0 bleu. Les deux cellules vont respectivement indiquer une valeur de 1 et de 0 Ă  l'extĂ©rieur.

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 :

Deux cellules mĂ©moires. Les deux partagent le mĂȘme fil d'adressage activĂ© en rouge. La cellule de gauche contient un 0 bleu. La cellule de droite un 1 rouge. Un texte annonce, on impose l'Ă©tat 01.

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.

8 cellules mĂ©moire partageant le mĂȘme fil d'adressage.

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.

8 cellules mĂ©moire partageant le mĂȘme fil d'adressage. Fil d'adressage actif. Dont lit leur 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.

8 cellules mĂ©moire partageant le mĂȘme fil d'adressage. Fil d'adressage actif. Dont on impose la valeur

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

Plein de cellules mĂ©moire partageant le mĂȘme fil d'adressage.

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.

Deux mots binaires supperposé. Mot @0 est 00. Mot @1 est 01. Celui du haut possÚde l'adresse @0 et celui du bas @1.

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.

Deux mots binaires superposés. Mot @0 est 00. Mot @1 est 11. Celui du haut possÚde l'adresse @0 et celui du bas @1. La ligne @1 est active. On applique 11 en entrée de la matrice

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.

Deux mots binaires superposés. Mot @0 est 00. Mot @1 est 11. Celui du haut possÚde l'adresse @0 et celui du bas @1. La ligne @0 est active. On lit 00 en entrée de la matrice.

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.

Une matrice de M mots binaires de N bits supperposés. Le mot du haut est @0 et le mot du bas @M

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 ?

Un rectangle appelé décodeur avec un fil à gauche surmonté de point d'interrogation et à droite 4 fils respectivement appelé voie0, voie1, voie2 point d'interrogation et voie3 de haut en bas

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

Le décodeur mais avec un fil surmonté 2 point d'interrogation à gauche

Et bien on va encoder ce nombre avec des fils.

Le décodeur mais avec deux fils appelé respectivement bit1 et bit2 de haut en bas

On définit binairement ce 2.

Le décodeur mais avec deux fils appelé respectivement bit1 et bit2 de haut en bas. bit1 allumé pas le bit0. la voie 2 est allumée

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.

Le décodeur mais avec deux fils appelé respectivement bit1 et bit2 de haut en bas. bit1 et bit0 allumés. la voie 2 est allumée

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

Le décodeur, bit1 et bit0 éteint. la voie 0 est allumée

On ajoute alors un troisiÚme fil Enable qui permet de contrÎler la sortie du décodeur:

Le décodeur mais avec un troisiÚme fil appelé Enable à gauche éteint, bit1 et bit0 éteint. la voie 0 est éteinteLe décodeur mais avec un troisiÚme fil appelé Enable à gauche allumée, bit1 et bit0 éteint. la voie 0 est allumée

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

Le décodeur mais avec un troisiÚme fil appelé Enable à gauche allumé, bit1 et bit0 allumés. la voie 3 est allumlée

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

Le décodeur mais avec un troisiÚme fil appelé Enable à gauche éteint, bit1 et bit0 allumés. la voie 3 est éteinte

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

Un décodeur de 3 entrées et 8 voies

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

Un décodeur de 3 entrées et 8 voies. bit 2 et 0 allumés. Enable actif. voie 5 active

On peut alors généraliser.

Un décodeur de N entrées et 2 puissance N moins 1 voies

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.

Un décodeur 8 voies acollées à une matrice de 8 par 8 cellules. les bit 0 et 2 sont actif, Enable aussi. La ligne d'adresse 5 de la matrice est active

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.

Un boitier d'oĂč sors 2 bus, un premier de 3 fils d'adresse, un second de 8 fils de donnĂ©es. Un texte indique que la valeur totale est de 8 octets stockables. Soit 1 lettre.

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.

Un boitier d'oĂč sors 2 bus, un premier de 8 fils d'adresse, un second de 8 fils de donnĂ©es. Un texte indique que la valeur totale est de 256 octets stockables. Soit 256 lettres.

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.

Un boitier d'oĂč sors 2 bus, un premier de 8 fils d'adresse, un second de 64 fils de donnĂ©es. Un texte indique que la valeur totale est de 2048 octets stockables. Soit un fichier de 2 kilo-octets.

Si on augmente à 17 fils le bus de d’adresse.

On atteint pĂ©niblement les 1 mĂ©ga-octet, une pauvre image. đŸ˜«

Un boitier d'oĂč sors 2 bus, un premier de 17 fils d'adresse, un second de 64 fils de donnĂ©es. Un texte indique que la valeur totale est de 2048 octets stockables. Soit un fichier de 2 kilo-octets.

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.

Un trapÚze régulier dont le coté gauche est le grand cÎté, il possÚde deux entrées voie 0 et voie 1 de haut en bas. Le petit cÎté à droite possÚde une sortie appelée Sortie. Le cÎté oblique possÚde une entré contrÎle. Le tout est appelé Mux

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.

Le trapÚze est détaillé, la voie 1 est connectée à la sortie. Le signal de contrÎle vaut 1

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

Le trapÚze est détaillé, la voie 1 est connectée à la sortie. Le signal de contrÎle vaut 1

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.

Le trapÚze est détaillé, la voie 0 est connectée à la sortie. Le signal de contrÎle vaut 0

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

Le trapÚze est détaillé, la voie 0 est connectée à la sortie. Le signal de contrÎle vaut 0

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.

Le trapÚze possÚde 4 voies, 2 contrÎle et une sortie. les voie 1 et 2 sont alumées. le bit 1 du contrÎle est allumé. la sortie recopie le comportement de la voie 2

Et on peut venir augmenter le nombre de voies.

Le trapĂšze possĂšde 8 voies et 3 bits de contrĂŽle.

Et finalement généraliser à N voies.

Pour déterminer le nombre de fils de contrÎle nécessaires. On va poser deux choses :

N = 2 puissance x alors x = log2 de N

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

Le trapĂšze possĂšde N voies et log 2 de N bits de contrĂŽle.

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.

Une matrice de 8 par 8 avec un multiplexeur 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.

Une matrice de 8 par 8 avec un multiplexeur de 3 bits de contrÎle. Bits 2 et bit 0 sur decodeur activés. Bits 2 et 0 du multiplexeur activés. ligne d'adresse 5 activée.

On peut alors sĂ©lectionner n’importe quelle cellule de la matrice.

Ici les coordonnées (2; 3):

Une matrice de 8 par 8 avec un multiplexeur de 3 bits de contrÎle. Bits 1 et bit 0 sur decodeur activés. Bit 1 du multiplexeur activé. ligne d'adresse 3 activée.

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

La matrice, son décodeur de ligne et son multiplexeur de colonne enfermé dans une boßte. Le fil Enable, le bus de données et la sortie traversent la boßte vers l'extérieur. Les 3 premiers fils du bus d'adresse sont appelés ligne et les 3 seconds colonne.

On peut alors synthétiser en:

Un carré avec une matrice de 8 par 8 carrés rouge et bleus disposé aléatorement. Un gros trait est appelé bus d'adresse 6 fils. Il y a aussi le fil Enable et la sortie.

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.

Une matrice de 20 fils d'adresse

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.

8 matrices diffĂ©rentes connectĂ©es Ă  un mĂȘme bus de donnĂ©es.

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

8 matrices diffĂ©rentes connectĂ©es Ă  un mĂȘme bus de donnĂ©es. Dont on selectionne les mĂȘmes cases.

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.

Un rectangle entoure 8 matrices. Appelé bank

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.

8 banks en parrallĂšle paratageant le mĂȘme bus d'adresse. Chaque bus de donnĂ©es de 8 bits est fusionnĂ©s en un bus de 64 bits.

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

On sĂ©lectionne la mĂȘme cases dans les 8 matrices des 8 banks simultannĂ©ment.

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.

Tableau de comparaiseon bus de données, coordonnées, adresse. Par exemple 111001, (1, 7), 254. Ou 001001, (1,1), 9

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.

Un rectangle appelé RAM, contient des rectangles tout en longueur subdivisé horizontalement en des rectangles plus petits. Les rectangles subdivisés sont empilés verticalement et numéroté @1 jusqu'à @N

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

Un rectangle subdivisĂ© en 64 partie. La partie Ă  l'extrĂȘme gauche notĂ© 64 et celle Ă  l'extrĂȘme droit 0. La ligne elle-mĂȘme est notĂ©e @0

Stockage

On va voir jusqu’oĂč on peut monter avec notre nouvelle architecture. 😀

Commençons avec une matrice de 8 par 8.

Calcule de nombre d'octets d'un systÚme composé de matrice de 8 lignes par 8 colonnes

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.

Calcule de nombre d'octets d'un systÚme composé de matrice de 14 lignes par 10 colonnes

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.

Calcule de nombre d'octets d'un systÚme composé de matrice de 20 lignes par 10 colonnes

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


Calcule de nombre d'octets d'un systÚme composé de matrice de 18 lignes par 14 colonnes

Faites les calculs pour 40 bits de largeur de bus d’adresse. Vous verrez que vous trouverez quelque chose de massif !

réponse

40 bits d’adressage => 4 To de stockage

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.

Un CPU relié à une RAM par un bus d'adresse

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

Un CPU relié à une RAM par un bus d'adresse. Et une flÚche écriture point d'interrogation.

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.

Un CPU relié à une RAM par un bus d'adresse. Et fil d'écriture.

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.

Un trapÚze régulier dont le coté gauche est le grand cÎté, il possÚde deux entrées voie 0 et voie 1 de haut en bas. Le petit cÎté à droite possÚde une sortie appelée Sortie. Le cÎté oblique possÚde une entré contrÎle. Le tout est appelé Mux

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

Un trapÚze régulier dont le coté droit est le grand cÎté, il possÚde deux entrées voie 0 et voie 1 de haut en bas. Le petit cÎté à gauche possÚde une sortie appelée Entrée. Le cÎté oblique possÚde une entré contrÎle. Le tout est appelé DeMux

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Ă©.

Un DeMux dont le controle vaut 0; l'entrée est directement relié à la voie 0, la voie 1 laissée dans le vide

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.

Un DeMux dont le controle vaut 0; l'entrée est directement relié à la voie 0, la voie 1 laissée dans le vide

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

Un DeMux dont le controle vaut 1; l'entrée est directement relié à la voie 1, la voie 0 laissée dans le vide

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

Un DeMux 8 voies et 3 contrĂŽles

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

Un DeMux N voies et log2 de 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.

Un Mux avec la mention Mux/DeMux et un fil supplémentaire mode à cÎté du bus de contÎle.

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. 😅

Un Mux/DeMux avec mode qui vaut 0.

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

Un Mux/DeMux avec mode qui vaut 1.

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.

Deux carrés séparé par un fil coupé, l'un à gauche appelé CPU avec comme valeur 1 et l'autre à droite appelé RAM avec comme valeur 0.

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.

Un fil relis désormais les deux carrés

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.

Les valeurs de ces carrés deviennent imprédictibles

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.

Les deux carrés reliés par un fil sont maintenant séparé par un carré avec des triples point d'interrogation.

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

Schéma d'un buffer. Un triangle orienté pointe vers la droite. Un flÚche de gauche vers la droite passante et une flÚche de droite vers la gauche bloquante.

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

Schéma d'un buffer. avec un fil de contrÎle.Schéma d'un buffer. avec un fil de contrÎle à 0. Ce qui équivaut un fil coupéSchéma d'un buffer. avec un fil de contrÎle à 1. Un buffer

On appelle ça un Tri State Buffer car du point de vue de la sortie on a:

On dĂ©finit alors un autre composant qui va permettre de faire l’inverse. On nomme ceci une porte NON.

Schéma d'une porte NON. Un triangle orienté pointe vers la droite avec un rond sur la pointe.

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.

Montage de deux buffers en sens inverse contrĂŽlĂ©s par un mĂȘme signal mais l'un est derriĂšre une porte NON

Ce signal peut avoir deux valeurs:

-Si le signal est Ă  l’état 1 les donnĂ©es transitent de la gauche vers la droite.

Schéma avec un contrÎle à 1

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

Schéma avec un contrÎle à 0

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

Le montage enfermé dans un boßtier. Deux entrées/sorties et un 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

Buffer I/O contrÎle à 1. le flux va de la mémoire vers le CPU

Ou en Ecriture

Buffer I/O contrÎle à 1. le flux va du CPU vers la mémoire

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.

Une cellule mémoire, un décodeur et 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.

Un assemblage de 4 bank reliĂ© Ă  un mĂȘme bus d'adresse et partageant un mĂȘme bus de donnĂ©s.

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.

Un assemblage de 4 bank reliĂ© Ă  un mĂȘme bus d'adresse et partageant un mĂȘme bus de donnĂ©s.

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

Tableau de correspondance entre le triplet de nombre (bank, ligne, colonne) et l'adress. (0;0;0) => adresse 0. (0;0;1) => adresse 1. (4; 7; 7) => adresse 1023

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.

L'assemblage précécédent enfermé dans une bÎite avec 3 entrées: lecture/écriture, Enable, bus d'adresse. Et un bus de données

Qui peut se symboliser par une version simplifiée.

Un rectangle composé de 4 banks. Appelé Chip

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.

Un assemblage de 8 chips paratageant, le mĂȘme bus d'adresse, de donnĂ©e, le signal de lecture/Ă©criture ainsi que le signal d'activation.

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

Une barrette de RAM

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 ❀