Ce rapport présente la mémoire tant d'un point de vue logique que
physique. Nous traiterons en particulier de son utilisation dans un
ordinateur mais, ceci peut être appliqué à n'importe quel automate
électronique utilisant de la mémoire de stockage temporaire.
Qu'appelle-t-on mémoire ? Quelle est sa place dans l'architecture
du PC ? Comment fonctionne-t-elle ? Quels sont les
différents types de mémoire ?\\

\section{Principes de base de la mémoire}

La mémoire est la zone de travail de l'ordinateur. C'est une zone
de stockage temporaire dans laquelle les programmes et les données
doivent se trouver. Ces données et ces programmes n'y restent que
si l'ordinateur est maintenu sous tension et que le système n'est
pas relancé. Avant ces opérations, on devra copier tout ce qui a
été modifié sur une unité de stockage permanent, habituellement un
disque dur, avant d'éteindre la machine. De cette façon on pourra
charger de nouveau les programmes et les données.\\

La mémoire principale est souvent appelée RAM (\textit{Random
Access Memory}, mémoire à accès aléatoire) ou mémoire vive parce
qu'on peut y accéder rapidement. Quand on parle de la mémoire d'un
ordinateur, il s'agit habituellement de la RAM. C'est là que se
trouvent le programme actif et ses données. Le mot "stockage" ne
devrait être utilisé que pour désigner les unités de disque ou de
bande magnétique (considérées par certains comme une sorte de
mémoire).\\

La RAM peut désigner à la fois les modules électroniques qui
composent la mémoire de l'ordinateur et l'organisation logique de
celle-ci. Cette organisation précise comment les adresses mémoire
sont liées aux composants physiques, et quels types d'informations
sont rangés à ces adresses.\\

Au lancement d'un programme, les fichiers sont chargés en mémoire.
Tant qu'ils sont actifs, le programme reste en mémoire. Le
processeur exécute les instructions en RAM. La saisie au clavier
et les nombres utilisés dans les calculs sont stockés en RAM.
Demander à un programme de sauvegarder les données revient à lui
donner des instructions pour transférer le contenu de la mémoire
RAM sur le disque sous forme de fichier.\\

Sur le plan matériel, la mémoire principale de l'ordinateur est
constituée de puces ou de modules connectés à la carte mère. Ces
composants peuvent être de types différents. Pour un
fonctionnement correct, ils doivent être compatibles avec le
système sur lequel ils sont installés.\\

Après le processeur, la mémoire peut être l'un des composants les
plus chers d'un PC moderne. Son coût global pour un ordinateur
donné a cependant baissé depuis quelques années. Mais, même après
la chute des prix, la mémoire coûte encore deux fois plus que la
carte mère. Avant cet effondrement spectaculaire au milieu de
l'année 1996, le prix de la mémoire était constant depuis de
nombreuses années, soit environ 300 F le mégaoctet. Les 16 Mo (une
configuration classique d'alors) coûtaient donc plus de 3 500 F.
C'était le prix qu'il fallait payer à l'époque. Ces prix élevés
attiraient tellement l'attention que des fabricants de modules de
mémoire ont subi plusieurs vols à main armée.\\

A la fin de 1996, ils avaient baissé considérablement, jusqu'à
près de 20 F le mégaoctet. Ceci correspond à une variation de 10 à
1 en moins d'une année. Les prix ont continué à chuter pour
atteindre récemment 10 F environ par mégaoctet, soit près de 700 F
pour 64 Mo, une configuration aujourd'hui courante. Cela signifie
qu'aujourd'hui le prix d'un PC inclut près de quatre fois plus de
mémoire qu'il y a quelques années, pour un montant qui représente
1/6 du prix total.\\

On a pu remarquer ces 2 dernières années une baisse allant
jusqu'à 1 F du mégaoctet. Cette baisse est surtout due au faible
coût de fabrication de la mémoire SDRAM. Elle s'est finalement
stoppée avec les événements du 11 septembre.\\


Mais si la mémoire est maintenant moins chère, sa durée de vie est
devenue beaucoup plus courte. Chaque mois, de nouveaux types de
mémoire sont disponibles. Un système nouveau n'acceptera pas la
même mémoire que celle de votre machine actuelle. Cela signifie
que, lors d'une réparation ou d'une mise à niveau, vous devrez
changer la mémoire si vous changez la carte mère. La probabilité
de pouvoir réutiliser la mémoire lors d'un changement de carte
mère est très faible. Et cela va vraisemblablement continuer dans
ce sens.\\

\section{Mémoire physique}

La taille, la forme et le type de la mémoire physique doivent être
adaptés en fonction du processeur et du chipset. Avec les années,
il y a eu deux changements importants pour la mémoire. Elle est
devenue plus rapide et sa taille a augmenté considérablement. Or,
la vitesse et la taille de la mémoire sont sous le contrôle direct
du processeur et du chipset.\\

Même si un système peut supporter une certaine taille de mémoire,
la nature du logiciel est également un élément prépondérant.\\
Les 8088 et 8086 avec un bus d'adresses 20 bits peuvent accepter
au plus 1 Mo de mémoire. Les 286 et 386SX ont un bus d'adresse 24

bits et supportent jusqu'à 16 Mo. Les 386DX, 486, Pentium,
Pentium-MMX et Pentium Pro ont un bus 32 bits et peuvent gérer 4
Go. Quant au Pentium II, avec un bus à 36 bits, il accepte jusqu'à
64 Go !\\

Quand un 286 ou un processeur plus puissant émule un 8088 (c'est
le cas quand on exécute un logiciel en mode 16 bits comme DOS ou
Windows 3.x), il met en oeuvre un mode d'exécution appelé mode
réel. Ce mode est le seul disponible sur les puces 8088 et 8086
dans les ordinateurs PC et XT. Dans cette configuration, tous les
processeurs, y compris le Pentium ne disposent que d'un Mo et le
système se réserve 384 Ko sur ce total. C'est seulement en mode
protégé que les 286 et suivants retrouvent leur espace
d'adressage.\\

Les PC équipés d'un Pentium peuvent adresser 4 Go de mémoire, ceux
qui sont équipés d'un Pentium Pro ou d'un Pentium II accèdent à 64
Go.
%Pour mieux mesurer ce que cela représente, on dira que 64 Go
%coûtent environ 100 000 F ! Même si on pouvait s'offrir toute
%cette mémoire, il faut savoir qu'aujourd'hui les plus grands
%modules disponibles sont des barrettes DIMM de 512 Mo. Il faudrait
%donc 128 barrettes de 512 Mo, et les ordinateurs actuels n'ayant
%que quatre ou huit supports de barrettes, cela paraît difficile.\\

Les cartes mères de Pentium I ont un maximum de trois à six
supports DIMM, ce qui permet de monter de 1,5 Go à 3 Go au
maximum. Ces limitations sont dues au chipset et non au
processeur.\\
%
%Les Pentium ont même d'autres limitations. Ils existent depuis
%1993 mais seuls ceux construits depuis 1997 disposent de supports
%SDRAM. Même ceux qui sont équipés du chipset 430TX n'acceptent pas
%plus de 256 Mo au total, et n'accueillent pas plus de 64 Mo à
%cause de contraintes inhérentes à la mémoire cache.\\

Les cartes mères des anciens 386 et 486 peuvent rencontrer des
problèmes, au-delà de 16 Mo de mémoire, à cause du contrôleur DMA
(\textit{Direct Memory Access}, accès mémoire direct. Par exemple,
en installant un contrôleur sur le bus ISA (un contrôleur SCSI par
exemple), vous vous exposez à un plantage système en essayant de
transférer des données au-delà de 16 Mo. Cela ne se produit pas
avec les bus 32 bits tels que le bus PCI. Les systèmes
d'exploitation 32 bits convertissent automatiquement les adresses
pour les transferts de type DMA venant de cartes d'extension
ISA.\\

        \subsection{Vitesse de la mémoire}

Parfois on peut confondre les notions de vitesse et de performance
car la vitesse mémoire est habituellement exprimée en nanosecondes
(ns) alors que celle du processeur s'exprime en mégahertz (MHz).\\

Il peut donc être intéressant de voir comment les comparer. Le
Tableau \ref{1} montre le rapport entre nanosecondes et mégahertz
dans
les PC actuels.\\

\begin{table}[h]
\centering
\begin{tabular}{|c|c||c|c|}
  % after \\: \hline or \cline{col1-col2} \cline{col3-col4} ...
  \hline
  Vitesse d'horloge  & Durée de cycle & Vitesse d'horloge &
  Durée de cycle \\ \hline
  6MHz & 166ns & 120MHz & 8,3ns \\
  8MHz & 125ns & 133MHz & 7,5ns \\
  10MHz & 100ns & 150MHz & 6,6ns \\
  12MHz & 83ns & 166MHz & 6,0ns \\
  16MHz & 62ns & 180MHz & 5,5ns \\
  20MHz & 50ns & 200MHz & 5,0ns \\
  25MHz & 40ns & 233MHz & 4,2ns \\
  33MHz & 30ns & 250MHz & 4,0ns \\
  40MHz & 25ns & 300MHz & 3,3ns \\
  50MHz & 20ns & 333MHz & 3,0ns \\
  60MHz & 16ns & 350MHz & 2,8ns \\
  66MHz & 15ns & 400MHz & 2,5ns \\
  75MHz & 13ns & 450MHz & 2,2ns \\
  80MHz & 12ns & 500MHz & 2,0ns \\
  100MHz & 10ns & 550MHz & 1,8ns \\ \hline
\end{tabular}
  \caption{Relations entre vitesse d'horloge en MHz et durée
    de cycle en ns}\label{1}
\end{table}

Comme on peut le voir dans ce tableau, plus la vitesse d'horloge
augmente, plus la durée du cycle diminue. Il est évident que la
mémoire DRAM utilisée dans les PC est totalement inadaptée pour
les processeurs cadencés à 400 MHz et plus. Remarquons que, très
récemment, on trouvait dans les PC des mémoires DRAM ayant un
temps d'accès de 60 ns, ce qui correspond seulement à 16,7 MHz !
Si on constate que cette mémoire très lente a été installée dans
des PC équipés d'un processeur cadencé à 300 MHz, on peut
comprendre qu'il y a un fossé entre la vitesse du processeur et
celle de la mémoire.\\

Découper du temps mémoire est un peu plus compliqué que de
convertir des nanosecondes en mégahertz. Les transistors dans une
puce mémoire sont organisés en matrices ; chaque transistor est
repéré par une colonne et une rangée. Tout accès mémoire comprend
d'abord le choix de la rangée, puis celui de la colonne, et enfin
le transfert de la donnée. Les paramètres initiaux pour effectuer
un transfert mémoire dont la rangée et la colonne sont choisis,
prévoient un temps supplémentaire habituellement appelé latence.
Le temps d'accès comprend le délai de cycle plus le temps de
latence. Un temps d'accès de 60 ns se décompose en 25 ns de
latence et 35 ns de cycle pour transférer la donnée. De ce fait,
la vitesse réelle mémoire est de 28,5 MHz environ (35 ns). Ainsi,
pour un simple transfert en mémoire qui va demander 60 ns, les
transferts consécutifs s'effectueront aussi à 16,7 MHz (60 ns) en
ajoutant le délai de latence.\\

Que se passe-t-il quand un processeur cadencé à 300 MHz essaie de
lire des octets de donnée dans une mémoire cadencée à 16,7 MHz ?
Réponse : une suite de cycles d'attente ! Un cycle d'attente est
un cycle pendant lequel le processeur ne fait rien. Dans le cas
précis évoqué ci-dessus, le processeur dont le cycle de base est
de 3,3 ns exécute 19 cycles d'attente pour un cycle de transfert.
Pour réduire le nombre de cycles d'attente, il existe plusieurs
solutions utilisant des mémoires plus rapides et des mémoire
caches.

    \subsection{SIMM, DIMM et RIMM}

Sur les premiers PC, la mémoire était composée à partir de puces

élémentaires. On les appelait puces DIP (\textit{Dual Inline
Package}, boîtier à deux rangées de broches). Les PC et XT IBM
avaient trente-six supports de ce type sur la carte mère et, de
plus, on pouvait installer des cartes mémoire dans les connecteurs
de bus.\\

En plus du temps passé à installer les puces sur leurs supports,
il y avait un autre problème. Les puces avaient une fâcheuse
tendance à se désolidariser de leur support à la suite des
variations de température, d'où des erreurs qu'on ne pouvait
éliminer qu'en appuyant sur chaque puce pour la remettre en
place.\\

Une solution à ce problème a consisté à les souder sur leur
support, mais, en cas de défaut dans une seule puce, il fallait la
dessouder et la remplacer. Cela était coûteux et délicat à
effectuer.\\

Il fallait trouver une puce soudée et facilement amovible. C'est
exactement ce qui a été réalisé avec les barrettes de mémoire SIMM
(\textit{Single Inline Memory Module}, module de mémoire à une
rangée de contacts). Pour la mémoire, les ordinateurs modernes
utilisent soit des barrettes SIMM, soit des barrettes DIMM
(\textit{Dual Inline Memory Module}, module de mémoire à double
rangée de contacts). Ces barrettes sont enfichées dans la carte
mère. Dans le cas d'erreur due à une seule puce, on change la
barrette qui est considérée comme une puce à grande capacité.\\

Il existe, sur les PC, deux principaux types de barrettes, la SIMM
30 broches qui correspond à une puce 8 bits et 1 bit de parité, et
la SIMM 72 broches correspondant à 32 bits plus 4 bits de parité.
Les SIMM 30 broches sont plus courtes que les SIMM 72 broches. Les
SIMM 30 broches ne sont plus employées et remplacées par les 72
broches, à cause des systèmes 64 bits qui nécessitent soit huit
SIMM 30 broches, soit deux SIMM 72 broches par banc mémoire. Les
DIMM, arrivées avec les Pentium MMX et Pro, sont des modules à 168
broches avec 64 bits sans parité ou 72 bits avec parité et ECC
(\textit{Error Correcting Code} : code de correction d'erreur). La RIMM est utilisé dans le cadre de la mémoire RDRAM uniquement.\\

Les Figures \ref{im1}, \ref{im2}, \ref{im3} et \ref{im4} montrent
respectivement les barrettes SIMM 30 broches (8 bits), 72 broches
(32 bits), DIMM 168 broches (64 bits) et les RIMM. Les contacts
sont numérotés de gauche à droite et sont présents des deux côtés
du module. Les contacts de DIMM sont différents de
chaque côté. Les dimensions sont données en millimètres.\\

\begin{figure}[h]
  \centering
  \includegraphics{images/fig1.eps}
  \caption{La SIMM 30 broches. Le modèle présenté est de type 9
    bits. Les dimensions sont identiques pour le modèle 8 bits.}
  \label{im1}
\end{figure}

\begin{figure}[h]
  \centering
  \includegraphics{images/fig2.eps}
  \caption{La SIMM 72 broches. Le modèle présenté est de type 36
    bits. Les dimensions sont identiques pour le modèle 32 bits.}
  \label{im2}
\end{figure}

\begin{figure}[h]
  \centering
  \includegraphics{images/fig3.eps}
  \caption{La DIMM 168 broches. Le modèle présenté est de type 72
    bits. Les dimensions sont identiques pour le modèle 64 bits.}
  \label{im3}
\end{figure}

\begin{figure}[h]
  \centering
  \includegraphics{images/fig4.eps}
  \caption{La RIMM.}
  \label{im4}
\end{figure}

Il existe aussi des modules SIPP (\textit{Single Inline Pinned
Package}, boîtier à une rangée de broches). Ces modules comportent
de vraies broches, et non des contacts. Ils sont conçus pour être
enfichés dans un long support de connecteur qui coûte moins cher
qu'un connecteur de barrette SIMM standard. Les modules SIPP sont
moins intéressants que les barrettes SIMM car ils sont dépourvus
de mécanisme de fixation actif permettant de retenir la mémoire.
De plus, leurs broches ne sont pas traitées anticorrosion. Les
modules SIPP ne sont plus guère utilisés à l'heure actuelle.\\

%Par rapport à leur taille, ces modules ont une capacité très
%importante. Le tableau \ref{2} donne la liste des capacités pour
%les différents modèles.\\
%
%\begin{table}[h]
%  \centering
%  \begin{tabular}{|c|c|c|c|}
%    % after \\: \hline or \cline{col1-col2} \cline{col3-col4} ...
%    \hline
%    & Capacité & SIMM avec parité & SIMM sans parité \\
%    \hline
%    SIMMS 30 broches &  &  &  \\
%    \hline
%
%     & 256Ko & 256 Ko x 9 & 256 Ko x 8 \\
%     & 1Mo & 1 Mo x 9 & 1 Mo x 8 \\
%     & 4Mo & 4Mo x 9 & 4Mo x 8 \\
%     & 16Mo & 16Mo x 9 & 16Mo x 8 \\
%    \hline
%     SIMM 72 broches &  &  &  \\
%    \hline
%     & 1Mo & 256Ko x 36 & 256Ko x 32 \\
%     & 2Mo & 512Ko x 36 & 512Ko x 32 \\
%     & 4Mo & 1Mo x 36 & 1Mo x 32 \\
%     & 8Mo & 2Mo x 36 & 2Mo X 32 \\
%     & 16Mo & 4Mo x 36 & 4Mo x 32 \\
%     & 32Mo & 8Mo x 36 & 8Mox32 \\
%     & 64Mo & 16Mo x 36 & 16Mo x 32 \\
%     & 128Mo & 32Mo x 36 & 32Mo x 32 \\
%    \hline
%     DIMM 168 broches &  &  &  \\
%    \hline
%     & 8Mo & 1Mo x 72 & 1Mo x 64 \\
%     & 16Mo & 2Mo x 72 & 2Mo x 64 \\
%     & 32Mo & 4Mo x 72 & 4Mo x 64 \\
%     & 64Mo & 8Mo x 72 & 8Mo x 64 \\
%     & 128Mo & 16Mo x 72 & 16Mo x 64 \\
%     & 256Mo & 32Mo x 72 & 32Mo x 64 \\
%     & 512Mo & 64Mo x 72 & 64Mo x 64 \\
%     \hline
%  \end{tabular}
%  \caption{Capacités des barrettes SIMM et DIMM}\label{2}
%\end{table}

Les barrettes de mémoire RAM SIMM et DIMM existent en différentes
vitesses. Les barrettes SIMM vont de 120 à 50 ns pour les plus
rapides, les barrettes DIMM de 60 à 3 ns. Les barrettes SIMM à 120
ns qui étaient montées sur les vieux ordinateurs ont été très tôt
remplacées par des modules à 100 ns. Aujourd'hui, on achète des
barrettes SDRAM à 10 ns et des barrettes SDRAM DDR à 3 ns. Les
autres modèles sont plus difficiles à trouver.\\

Si un système demande une vitesse donnée, on peut toujours mettre
une barrette de mémoire plus rapide. Il n'y a aucun problème pour
faire cohabiter des barrettes de vitesses différentes. La
différence de prix entre barrettes de différentes vitesses étant
très faible, il est souvent intéressant de choisir la vitesse la
plus élevée.\\

Certains modèles de barrettes SIMM 30 broches ont une architecture
légèrement différente. Par exemple, sur les systèmes IBM PS2 Model
25, 30, 50 et 60, on trouve cinq contacts avec des signaux
différents. Ces barrettes SIMM sont connues sous le nom de SIMM
IBM 30 broches. On peut modifier les barrettes SIMM standard pour
les utiliser sur IBM PS2, mais il est plus commode d'utiliser le
modèle IBM, et vice versa.\\

Il est important de noter que la barrette SIMM 30 broches se
comporte comme une puce élémentaire au point de vue de
l'organisation interne. Les anciennes barrettes comportaient huit
ou neuf puces d'un bit alors que les plus récentes sont composées
de deux puces de 4 bits avec éventuellement une puce de 1 bit pour
la parité. Ceci demande des réglages des circuits de
rafraîchissement de la carte mère qui peut poser des problèmes sur
les systèmes 386 et 486. Les ordinateurs actuels régulent
automatiquement ce phénomène. Néanmoins, les organisations en deux
ou trois puces sont préférables car elles sont moins chères et
nécessitent moins de puissance électrique. Sur un système ancien,
il vaut mieux maintenir les barrettes a huit ou neuf puces sauf si
un essai du modèle plus récent ne pose pas de problème.\\

Les barrettes SIMM 72 broches ont toutes le même brochage et ne
diffèrent que par la vitesse et la capacité. Ces barrettes sont
bien adaptées aux systèmes 32 bits, comme les 486 qui ont des
bancs de mémoire de 32 bits (avec 4 bits de parité). On peut alors
ajouter ou retirer une seule barrette à la fois.\\

Sur les ordinateurs 64 bits (de type Pentium et ultérieur), il
faut deux barrettes 72 bits pour remplir un banc.
%Quelques cartes
%mères possèdent à la fois des connecteurs 72 broches et des
%connecteurs 30 broches. Cette organisation prend beaucoup de place
%sur la carte mère.\\

%D'autres dispositifs permettent d'installer des barrettes SIMM 30
%broches sur de petites cartes adaptateurs enfichées dans un
%connecteur 72 broches, permettant de les utiliser dans le nouvel
%environnement. Mais attention, ceci peur créer des problèmes, et
%compte tenu de la baisse du prix de la mémoire, il est plus sage
%d'installer des barrettes SIMM 72 broches ou DIMM 168 broches.\\

Il faut rappeler que certains 486 utilisent de la mémoire
entrelacée pour réduire les temps d'attente. Il faut alors monter
des couples de barrettes 72 broches identiques pour que le
processeur y accède en alternance.\\

    \subsection{Organisation physique}
La mémoire est organisée sous la forme d'une grille dont chaque
noeud correspond à un transistor. On utilise la capacité
résiduelle du transistor pour stoker l'information.

\begin{figure}[h]
  \centering
  \includegraphics{images/fig8Matrice.eps}
  \caption{Organisation Physique d'une puce de DRAM}
  \label{im8}
\end{figure}

Le processeur envoie l'adresse complète au multiplexeur /
démultiplexeur de la mémoire, le MUX, et spécifie s'il s'agit
d'une lecture ou d'une écriture. Le circuit de multiplexage divise
l'adresse en deux parties. Les bits de poids fort contiennent
l'adresse de la ligne et les bits de poids faibles l'adresse de la
colonne. Le signal Row Adress Strob (RAS) est généré pour indiquer
à la DRAM qu'il s'agit d'une adresse ligne. Puis le signal Column
Adress Strob (CAS) est généré pour indiquer à la DRAM qu'il s'agit
d'une adresse colonne. Si une lecture est effectuée alors le bit,
situé à l'intersection de la ligne et de la colonne, est envoyé
sur la ligne de donnée. Dans le cas contraire la donnée est écrite
à la même intersection.

La mémoire est composée de transistors que l'on utilise comme des
condensateurs. Afin de compenser les pertes de charge de ces
condensateurs la mémoire doit être régulièrement rafraîchie.
Pendant le rafraîchissement, il n'y a pas d'accès possible à la
mémoire, ni en lecture ni en écriture. Le processeur doit attendre
quelques cycles pour que le rafraîchissement soit terminé. Ces
temps d'attente, appelé en anglais Waitstates ou Temps de Latence,
font chuter les performances du système. On s'efforce donc de les
réduire autant que faire se peut. Ils ne sont pas les mêmes pour
tous les composants, de sorte qu'il existe des composants de
mémoire plus ou moins rapides.

La vitesse de rafraîchissement ne peut pas s'adapter à la vitesse
d'accès des composants de mémoire. Elle est tenue de respecter des
limites bien précises imposées par la construction de la carte
mère. Pour les cartes mères modernes, on exige en général un temps
d'accès de 60 ns , 70 ns ou 80 ns. L'utilisation de composants de
mémoire plus lents provoque en général de graves erreurs de
lecture alors que des composants plus rapides n'apportent aucun
gain de vitesse supplémentaire. Au contraire, les mémoires très
rapides, par exemple avec 40 ns de temps d'accès nécessitent
éventuellement aussi un rafraîchissement plus rapide et si la
carte mère ne le fournit pas en temps voulu, il y a de fortes
chances pour que la mémoire ait déjà tout oublié. La perte de
performance due aux temps d'attente est très sensible sur les
cartes mères modernes cadencées à 100 MHz et davantage. Pour
remédier à ce problème, on utilise deux procédés fondamentalement
différents, seuls ou combiné:

\begin{itemize}
    \item Un cache externe de mémoire statique, généralement de 256 Ko.
    \item De nouvelles technologies des mémoires, les RAM EDO, BEDO,
    SDRAMRDRAM
\end{itemize}

Les boîtiers de mémoire dynamique n'ont pas de commande de
validation. Ce rôle est remplit par la conjonction des signaux RAS
et CAS. Il y a trois cycles de base pour une mémoire dynamique, le
cycle de lecture, le cycle d'écriture et le cycle de
rafraîchissement


    \subsubsection{Cycle de lecture}

\begin{figure}[h]
  \centering
  \includegraphics{images/fig9Lecture.eps}
  \caption{Chronogramme du cycle de lecture d'une mémoire DRAM}
  \label{im9}
\end{figure}

\begin{itemize}
    \item TaccèsRAS : C'est le temps d'accès à partir de l'activation du
signal RAS. Il s'agit du temps d'accès effectif en lecture.
    \item TaccèsCAS : C'est le temps d'accès à partir de l'activation du
signal CAS.
    \item TpréchargeCAS : C'est le temps de préchargement
du signal RAS. Après chaque accès il faut garantir une certaine
durée d'inactivité ( RAS désactivé ) avant de pouvoir commencer un
nouveau cycle ( par exemple de 60 ns ).
\end{itemize}

Le temps de cycle est l'intervalle de temps minimum séparant deux
demandes d'accès successives en lecture ou en écriture


    \subsubsection{Cycle d'écriture}


Le mode le plus fréquent est le mode "contrôlé par CAS". Le signal
d'écriture RW est positionné avant le CAS ce qui provoque
l'écriture. Dans le mode 'late write cycle" on génère le signal RW
après le CAS. Dans ce cas c'est le signal RW qui provoque
l'écriture. Cela permet de lire et d'écrire un mot en un seul
cycle.

\begin{figure}[h]
  \centering
  \includegraphics{images/fig10ecriture.eps}
  \caption{Chronogramme du cycle d'écriture d'une mémoire DRAM}
  \label{im10}
\end{figure}

\begin{itemize}
    \item Twrite est la durée du signal RAS en écriture, il est souvent
égale à TaccèsRAS.
\end{itemize}

    \subsubsection{Cycle de rafraîchissement}

A l'intérieur du boîtier, le rafraîchissement se fait par ligne
entière. Chaque accès provoque le rafraîchissement de toute la
ligne adressée.

\begin{figure}[h]
  \centering
  \includegraphics{images/fig11refresh.eps}
  \caption{Chronogramme du cycle de rafraîchissement d'une mémoire DRAM}
  \label{im11}
\end{figure}

Un mécanisme de rafraîchissement doit garantir l'accès périodique
à chaque ligne, en fournissant son adresse accompagné du signal
RAS. Ceci dit, à ces caractéristiques temporelles s'ajoutent de
nombreuses contraintes secondaires comme le temps de
prépositionnement des adresses avant le RAS et le CAS, la durée
minimale du signal CAS, le temps de prépositionnement de la donnée
en écriture avant le RAS etc... Chaque modèle a ses contraintes
particulières. Il peut y avoir plus de 40 paramètres temporels.



%Plusieurs types de puces mémoire ont été utilisés sur des cartes
%mères de PC. La plupart de ces puces ont une largeur d'un bit
%seulement. La liste suivante présente les puces RAM disponibles et
%leurs capacités :\\
%
%\begin{tabular}{m{3.5cm} m{12cm}}
%  16 Kbits par 1 bit & Ces puces étaient utilisées sur les
%    premiers PC IBM avec une carte mère de type 1.\newline \\
%  64 Kbits par 1 bit & Ces puces étaient utilisées sur les cartes
%    mères de PC IBM de Type 2 standard et sur les cartes mères XT de
%    types 1 et 2. De nombreuses extensions de mémoire de l'époque,
%    comme la célèbre et excellente carte AST à 6 modules, utilisent
%    aussi ces puces.\newline \\
%  128 Kbits par 1 bit & Ces puces, utilisées sur les cartes
%    mères d'IBM AT de type 1, étaient en fait une étrange combinaison
%    de deux puces 64 Kbits empilées l'une sur l'autre et soudées
%    ensemble. De vraies versions 128 bits constituées d'une seule
%    puce ont également été utilisées pour stocker les bits de parité
%    dans les IBM XT 286.\newline \\
%  256 Kbits par 1 bit (ou 64 Kbits par 4 bits) & Ces puces ont
%    été très utilisées sur les cartes mères et les cartes de mémoire.
%    Les cartes mères d'IBM XT de Type 2 et les IBM AT de Type 2, ainsi
%    que la plupart des systèmes compatibles de cette époque ont
%    utilisé ces puces.\newline \\
%  1 Mbit par 1 bit (ou 256 Kbits par 4 bits) & Ces puces de 1
%    Mbit étaient très populaires il y a quelques années et
%    utilisées le plus souvent sur des barrettes SIMM de 256 Ko
%    à 8 Mo.\newline \\
%  4 Mbits par 1 bit (ou 1 Mbit par 4 bits) & Les puces 4 Mbits
%    sont utilisées essentiellement sur des barrettes SIMM de capacité
%    de 1 à 16 Mo. En général, elles ne sont pas vendues sous forme de
%    puces séparées.\newline\\
%  16 Mbits par 1 bit (ou 4 Mbits par 4 bits) & Les puces 16
%    Mbits sont souvent utilisées sur des barrettes SIMM 72 broches
%    de 16 à 32Mo,\newline \\
%  64 Mbits par 1 bit (ou 16 Mbits par 4 bits) & Les puces 64
%    Mbits sont très répandues sur les barrettes de mémoire de 16 Mo ou plus. Elles sont notamment employées sur les ordinateurs portables.\newline \\
%  256 Mbits par 1 bit (ou 64 Mbits par 4 bits) & Les 256 Mbits
%    sont les plus récentes sur le marché. Ces puces permettent des
%    capacités énormes, de 512 Mo ou plus.\newline \\
%\end{tabular}
%
%II faut remarquer qu'en principe la capacité des puces croît par
%facteur de quatre parce que la pastille qui constitue chaque puce
%est carrée. A chaque élévation de niveau, il y a quatre fois plus
%de transistors et une capacité quadruple. Les SIMM ou DIMM
%récentes sont faites avec des puces de 16 à 256 Mbits.\\
%
%La Figure \ref{4} montre le marquage sur une puce ancienne. Les
%fabricants ont presque tous le même système de marquage.
%Cependant, pour être sûr de l'identification, il vaut mieux
%consulter le catalogue du constructeur.\\
%\begin{table}
%  \centering
%    \begin{tabular}{c c}
%    % after \\ : \hline or \cline{col1-col2} \cline{col3-col4} ...
%    $\overline{\underline{F}}$& MB81256-10 \\
%     USA & 8609 B04 BC \\
%    \end{tabular}
%  \caption{Les mentions visibles sur une puce}\label{4}
%\end{table}
%Le -10 sur la puce correspond à sa vitesse en nanosecondes (100).
%MB81256 est le numéro de référence de la puce, qui est, en
%général, un indice de la capacité de la mémoire. Les chiffres clés
%sont 1256, qui signifient que la puce a une largeur de 1 bit et
%une profondeur de 256 Kbits. Le 1 signifie que pour faire un octet
%complet avec parité, il faut neuf de ces puces de 1 bit de large.
%Une puce avec un numéro de référence KM4164B-10 signifie que la
%puce à une largeur de 1 bit, une profondeur de 64 Kbits et une
%vitesse de 100 ns. La liste suivante montre la correspondance
%entre les puces les plus courantes et leurs numéros de référence
%:\\
%
%    \begin{tabular}{l l}
%    Numéro de référence & Puce \\
%    4164 & 64 Kbits par 1 bit  \\
%    4464 & 64 Kbits par 4bits  \\
%    41128 & 128 Kbits par 1 bit \\
%    44128 & 128 Kbits par 4bits \\
%    41256 & 256 Kbits par 1 bit \\
%    44256 & 256 Kbits par 4 bits \\
%    41000 & 1 Mbit par 1 bit \\
%    44000 & 1 Mbit par 4 bits \\
%    \end{tabular}
%\\
%
%Les puces d'une largeur supérieure à 1 bit sont utilisées pour
%construire des bancs de moins de neuf, dix-huit ou trente-six
%puces (selon l'architecture système).\\
%
%Par exemple, une barrette SIMM 32 bits peut être assemblée avec
%seulement huit puces de 4 bits de large.\\
%
%A la Figure \ref{4}, le signe "F" entre deux lignes est le logo du
%constructeur Fujitsu Micro electronics. Le 8609 indique la date de
%fabrication (neuvième semaine de 1986). Certains constructeurs,
%cependant, utilisent le calendrier julien.\\
%
%Les barrettes SIMM et DIMM ont également des numéros
%d'identification qui sont, quelquefois, difficiles à décoder.
%Malheureusement, en l'absence de standard, il est nécessaire de
%prendre contact avec le constructeur. La Figure 5 montre comment
%Micron Technology et aussi Crucial Technology codent leurs
%barrettes SIMM.\\
%
%\begin{figure}[h]
%  \centering
%  \includegraphics{images/fig4.eps}
%  \caption{Identification des barettes SIMM de marque Micron
%  (Crucial Technology}
%  \label{im4}
%\end{figure}

%    \subsection{Bancs de mémoire}
%
%Les puces de mémoire, qu'elles soient de type DIP, SIMM, SIPP ou
%DIMM, sont organisées en bancs sur les cartes mères et les
%barrettes. Vous devez connaître l'agencement du banc de mémoire et
%sa position sur les cartes mères et les cartes mémoire quand vous
%ajoutez de la mémoire au système. En outre, les diagnostics
%portant sur la mémoire indiquent les emplacements des erreurs par
%octet et par adresse. Utilisez ces chiffres pour savoir où se
%trouve le banc défectueux.\\
%
%\begin{table}
%  \centering
%    \begin{tabular}{|m{1.8cm}|m{1.8cm}|m{1.8cm}|m{1.8cm}|m{1.8cm}
%    |m{1.8cm}|m{1.8cm}|}
%    \hline
%    % after \\ : \hline or \cline{col1-col2} \cline{col3-col4} ...
%    Processeur & Bus de données & Taille du banc (sans parité)&
%    Taille du banc (avec parité) & SIMM 30 broches  par banc &
%    SIMM 72 broches par banc & SIMM168 broches par banc \\
%\hline
%    8088  &  5bits  & 5bits &  9bits &  1  & $<$1* & $<$1* \\
%    8086  &  16bits & 16bits & 18bits & 2  & $<$1* & $<$1* \\
%    286 & 16bits & 16bits & 18bits & 2 &  $<$1* & $<$1* \\
%    386SX, SL,SLC & 16bits & 16bits & 18bits & 2 &  $<$1* & $<$1\\
%    386DX  & 32 bits & 32 bits & 36 bits & 4 & 1 & $<$1* \\
%    486SLC, SLC2 & 16bits & 16bits & 18bits & 2 & $<$1* & $<$1* \\
%    486SX, DX, DX2, DX4 & 32 bits & 32 bits & 36 bits & 4 & 1 &
%    $<$1*\\
%    Pentium, MMX & 64 bits & 64 bits & 72 bits & 8 & 2 & 1\\
%    Pentium, Pro, 2 & 64 bits & 64 bits & 72 bits & 8 &  2 &  1\\
%    \hline

%    \end{tabular}
%
%  \caption{Taille des bancs selon le type de PC}\label{5}
%\end{table}
%
%Le nombre de bits de chaque banc peut être atteint à l'aide de
%puces de 1 bit isolées, de barrettes SIMM ou de barrettes DIMM.
%Les ordinateurs récents n'emploient que des barrettes SIMM ou
%DIMM. Pour un ordinateur ayant un processeur 16 bits comme le
%386SX, on mettra deux barrettes SIMM 30 broches par banc. Toutes
%les barrettes SIMM d'un même banc doivent être identiques.\\
%
%Sur un ordinateur de type 486, chaque banc est formé soit de
%quatre barrettes SIMM 30 broches, soit dune barrette SIMM 72
%broches. Cette dernière est un modèle 32 ou 36 bits avec parité.
%On peut faire la différence en comptant le nombre de puces. On
%trouve huit puces de 4 bits, avec en plus pour la parité une puce
%4 bits ou quatre puces 1 bit. Comme vous pouvez le constater, les
%barrettes SIMM 30 broches sont moins intéressantes pour les
%systèmes 32 ou 64 bits parce que vous devez les utiliser par
%incrément de quatre ou huit par banc ! Ces barrettes SIMM n'étant
%disponibles qu'en 1, 4 ou 16 Mo, cela signifie qu'un banc de SIMM
%30 broches pour un 486 doit faire 4, 16 ou 64 Mo ; pour un
%Pentium, il doit être de 8, 32 ou 64 Mo de mémoire. Il n'y a pas
%de capacité intermédiaire. L'utilisation de barrettes SIMM 30
%broches dans des systèmes 32 et 64 bits limite artificiellement la
%configuration de la mémoire et ce n'est pas conseillé. Sur les
%systèmes 32 bits (comme les PC 486) qui utilisent des barrettes
%SIMM 72 broches, chaque barrette SIMM représente un banc séparé et
%peut être ajouté ou enlevé individuellement, pas forcément par
%groupe de quatre. La configuration de la mémoire est ainsi plus
%facile et plus souple. Dans les systèmes récents à 64 bits, deux
%barrettes SIMM à 72 broches sont requises par banc.\\
%
%Les barrettes DIMM sont idéales pour les Pentium et les systèmes
%plus puissants car le format 64 bits de la mémoire DIMM correspond
%à la largeur du bus du processeur. Donc, une barrette DIMM
%correspond à un banc.\\
%
%La disposition physique et l'ordre des barrettes SIMM ou DIMM est
%arbitraire et déterminée par les constructeurs. Vous pouvez
%choisir la disposition de votre carte mère ou de vos cartes
%d'extension en faisant des tests, mais cela prend du temps et ce
%n'est pas toujours facile, surtout si vous avez des problèmes avec
%votre système. La documentation de votre système ou de votre carte
%vous y aidera.

    \subsection{Contacts en or ou en étain}

Nombreux sont ceux qui ne comprennent pas l'importance des
contacts électriques des barrettes SIMM et DIMM. Il existe des
contacts en or ou en étain. Il a été dit que les contacts en or
étaient meilleurs mais ce n'est pas exact. La meilleure solution
consiste à installer des barrettes SIMM ou DIMM ayant des broches
en or sur des supports avec des contacts en or et les broches en
étain sur des supports à contacts en étain.\\

En ne respectant pas cette consigne, vous aurez des erreurs
mémoire. Cela peut intervenir entre six mois et un an après
l'installation.\\

Beaucoup de cartes mères Pentium et 486 sont équipées de supports
étamés et nécessitent donc des barrettes de mémoire étamées. Intel
recommande maintenant de ne pas utiliser des métaux différents
pour la mémoire d'un même ordinateur. Des études menées par les
fabricants de connecteurs ont montré qu'une forme de corrosion
peut se produire quand l'étain vient au contact de l'or ou
d'autres métaux. L'oxyde d'étain adhère à la surface d'or et en
durcissant s'oppose à une parfaite connexion. De ce fait, des
erreurs mémoire se produisent.\\

On pourrait penser que l'étain est mauvais conducteur parce qu'il
s'oxyde. Or, le contact est facile entre deux surfaces étamées car
elles sont tendres et se recourbent pour l'assurer.\\

Quand l'or et l'étain sont en contact, l'une des surfaces étant
plus dure, la couche d'oxyde épaissit et ne casse pas sous la
pression. En conclusion, ne mettez que des barrettes SIMM étamées
dans des connecteurs étamés et des SIMM dorées dans les
connecteurs dorés.\\

AMP, fabricant de connecteurs, a publié plusieurs documents
traitant ce sujet. Ces documents, rédigés en anglais, peuvent être
téléchargés au format PDF à partir du site Web d'AMP :
http://www.ampincorporated.com/.\\

La meilleure formule est certainement or sur or. Les systèmes haut
de gamme emploient cette solution.\\

%Si vous avez des métaux différents dans votre mémoire vous pouvez,
%pour une ou plusieurs machines, prévenir l'incident et nettoyer
%régulièrement les contacts des barrettes de mémoire. Mais ce n'est
%pas acceptable si vous gérez des centaines de machines. De plus,
%si votre ordinateur n'a pas le contrôle de parité ou 1ECC, lors de
%problèmes mémoire, vous ne pourrez pas identifier immédiatement la
%nature de ces problèmes.\\

%Le nettoyage des contacts n'est pas aisé car l'oxyde d'étain qui a
%durci sur la surface d'or est difficile à enlever sans abrasif. Il
%ne faut pas procéder à sec, pour éviter les décharges
%électrostatiques. Mais utiliser un produit nettoyant qui, par son
%humidité, lubrifiera les contacts et limitera les risques de
%décharges.\\

%Il y a cependant beaucoup de machines avec des contacts de métaux
%différents qui marchent très bien et depuis longtemps.\\
%
%Bien sûr, c'est un maigre argument. Il y a un tas de gens qui ont
%des bus SCSI trop longs, sans terminateur adapté et qui disent que
%ça marche. On voit aussi des câbles parallèles de plus de trois
%mètres de long qui ne posent pas de problèmes, et bien d'autres
%cas de figure, contraires aux règles, qui fonctionnent très
%bien.\\

L'épaisseur de la couche d'or sur les contacts retient aussi
l'attention. Certains s'inquiètent de la faible épaisseur de la
couche qui disparaîtra après une ou deux manipulations. Il est
certain que l'épaisseur du revêtement d'or dépend de la durée.
Mais à cause du prix élevé de l'or, on cherche à trouver
l'épaisseur la plus faible compatible avec l'usage requis.\\

Pour renforcer la solidité de la couche, on ajoute à l'or de
petites quantités de cobalt ou de nickel. Grâce à cela, ces
revêtements, qu'on peut appeler \textit{or renforcé}, autorisent
des centaines, voire des milliers de manipulations sans faillir.
Et leur efficacité peut encore être accrue par une sous-couche de
nickel. Les lubrifiants jouent également un rôle de premier plan
dans la durabilité des contacts en or.\\

%En augmentant l'épaisseur du mélange or nickel, on renforce encore
%la durabilité. Les résultats du laboratoire d'AMP présentés
%ci-dessous pour une sous-couche de nickel de 1,3 micron
%d'épaisseur utilisent une bille d'un diamètre de 0,635 cm lancée
%d'une distance de 1,27 cm avec une force de 100 gr.\\
%
%\begin{tabular}{l l}
%  Epaisseur en microns & Nombre de cycles avant destruction \\
%  0.4 & 200 \\
%  0.8 & 1000 \\
%  1.3 & 2000 \\
%\end{tabular}
%
%On constate qu'un revêtement d'or renforcé de 0,8 microns permet
%1000 manipulations avant destruction.\\
%
%Les connecteurs revêtus d'or produits par AMP ont 0,8 micron
%d'épaisseur d'or sur une base en nickel de 1,3 micron. Il semble
%que cela soit identique pour toutes les barrettes des autres
%fabricants.\\

Quant aux barrettes étamées, elles ont également 0,8 micron
d'étain sur une base en nickel de 1,3 micron.\\

%Le phénomène est plus important pour les barrettes DIMM, car elles
%n'ont qu'un contact par broche (les SIMM en ont deux), et elles
%ont plus de contacts (168) que les SIMM (72). De plus, pour les
%barrettes DIMM équipées de modules de type SRAM DDR, les vitesses
%sont de l'ordre de 3 ns sur les bus cadencés à 266 MHz. A cette
%vitesse, la plus petite résistance supplémentaire causera un
%problème.\\
%
%Pour ces raisons, il est recommandé de choisir des cartes mères
%ayant des connecteurs DIMM SDRAM aurifiés, d'utiliser des
%barrettes également en or et d'éviter les modèles étain (carte
%mère et barrettes).

    \subsection{Fiabilité de la mémoire}

Il est dans la nature de la mémoire de tomber en panne. Ses
défaillances sont de deux types : matériel et logiciel. Les pannes
de niveau matériel sont les plus faciles à comprendre. La puce
fonctionne et, tout à coup, pour une raison physique, la mémoire
tombe en panne permanente. Pour corriger cela, il faut souvent
changer un élément : une puce isolée ou une barrette SIMM ou DIMM
complète.\\

Les erreurs de niveau logiciel sont plus insidieuses. Elles ne
sont pas permanentes et peuvent disparaître ou revenir à
intervalles réguliers. On élimine en général en relançant
l'ordinateur.\\

Il y a vingt ans, Intel découvrit une raison qui frappa toute
l'industrie de la mémoire. Des particules alpha pouvaient causer
des erreurs en nombre important dans les DRAM de 16 Kbits qui
étaient disponibles à cette époque. Les particules alpha, de
faible énergie, devaient être stoppées par tout ce qui est fin et
léger comme une feuille de papier. Il devint alors évident quelles
préexistaient dans le matériau semi-conducteur. Des tests ont
montré qu'il y avait des traces de thorium et d'uranium dans la
céramique et le plastique qui composaient la puce. Cette
découverte obligea les fabricants à améliorer leur qualité de
production.\\

Aujourd'hui, cette cause d'anomalie a totalement disparu, à tel
point que certains croient que c'est la raison de l'abandon du
contrôle de parité. Il y a d'autres découvertes qui prouvent que
les particules alpha ne sont que pour une toute petite part dans
ce problème.\\

La majeure partie des anomalies est attribuée aux rayons
cosmiques. Des chercheurs d'IBM ont commencé à travailler sur les
erreurs dues aux rayons cosmiques présents sur terre. Ces
particules de haute énergie ne sont arrêtées ni par une feuille de
papier ni par des boucliers plus puissants. Le docteur J. F.
Ziegler a fait une étude pour comprendre les rayons cosmiques et
leur influence sur les erreurs en mémoire.\\

Un exemple de l'importance du phénomène a été montré avec un
échantillon de DRAM non-IBM, sur plusieurs millions d'heures de
test au niveau de la mer effectués avec un taux d'erreurs
logicielles de 5950 erreurs dans le temps, avec un étalon de temps
d'un milliard d'heures. Ceci a donné une erreur tous les six mois
pour un ordinateur moyen comprenant trente-six puces de mémoire.
Le même test, mené sous terre, avec un bouclier de plus de 15
mètres de roche, a éliminé toutes les erreurs. Ceci montre ce que
les rayons cosmiques peuvent provoquer, mais aussi que la
contamination par les particules alpha a totalement disparu.\\

Malheureusement, l'industrie n'a pas reconnu ce type d'erreurs,
dont la nature aléatoire peut être plus facilement expliquée par
les décharges électrostatiques, les surtensions ou les logiciels
instables, surtout dans les mises à jour mal testées des systèmes
d'exploitation ou des applications.\\

Des études ont montré que les erreurs de logiciels dans les
ordinateurs utilisant le code de correction d'erreurs (ECC) sont
trente fois plus nombreuses que les erreurs dues au matériel.\\

Des informations indiquent que sur certaines puces DRAM on aurait
mesuré des taux de 24 000 FIT d'erreurs logicielles. Ceci
correspond à une erreur par mois sur des systèmes actuels.\\

Comment composer avec ces erreurs ? Les ignorer n'est pas la
meilleure méthode, mais c'est malheureusement ce que font les
fabricants actuels. La bonne méthode est d'augmenter le niveau de
tolérance de panne. Ce qui veut dire qu'il faut trouver des moyens
de détecter et, si possible, corriger les erreurs dans les PC. Il
y a trois techniques de tolérance de panne dans les PC modernes
:\\
\begin{itemize}
  \item Sans parité ;
  \item Avec parité ;
  \item Code de correction d'erreur (ECC).\\
\end{itemize}

Les systèmes \textit{sans parité} n'intègrent aucun procédé de
tolérance d'erreurs. La raison toujours invoquée est le coût. Des
puces supplémentaires sont nécessaires pour gérer la parité ou les
mécanismes de contrôle ECC. Ceci entraîne un coût supplémentaire
d'environ 12,5 \%. De plus, les contrôleurs de mémoire sont
simplifiés en ne comportant pas de circuits pour gérer la parité.
Les machines portables adhèrent de même, pour une consommation
allégée. Les statistiques d'erreurs dans les machines actuelles
sont estimées à une erreur pour quelques mois, moins selon la
taille mémoire installée.\\

Ce taux est tolérable pour les ordinateurs simples qui ne sont pas
utilisés pour les applications stratégiques. L'extrême importance
du coût pour ce marché ne peut probablement pas justifier le coût
additionnel de mémoire ECC et du contrôle de parité.
L'inconvénient est que les erreurs peuvent entraîner des
conséquences sérieuses, par exemple dans les calculs bancaires ou
encore quand un réseau local se bloque.

    \subsubsection{Contrôle de parité}

IBM a établi une norme pour l'industrie : les neufs de puces de
mémoire constituant un banc de mémoire gèrent un bit chacune : un
bit par caractère, plus un bit spécial appelé bit de parité. Le
bit de parité permet au circuit de contrôle de la mémoire de
garder des traces des huit autres bits - il s'agit d'un contrôle
croisé de l'intégrité de chaque octet du système. Si le circuit
détecte une erreur, l'ordinateur s'arrête et affiche un message.
Avec les nouveaux systèmes d'exploitation tels que Windows ou
OS/2, une erreur de parité se manifeste généralement sous la forme
d'un plantage général. Au réamorçage de l'ordinateur, le BIOS
devrait détecter l'erreur et afficher le message correspondant.\\

Les barrettes SIMM et DIMM sont disponibles avec ou sans contrôle
de parité. A l'origine, tous les PC avaient ce contrôle pour
garantir une précision maximale. Depuis 1994, un changement de
tendance a vu le jour dans le marché des PC compatibles. Beaucoup
de systèmes sans contrôle de parité ont été vendus. Ces systèmes
acceptent des barrettes SIMM sans parité, ce qui fait baisser leur
prix d'environ 10\%. Le contrôle de parité ne permet pas de
corriger les erreurs mais avertit l'utilisateur lorsque l'une
d'elles survient. Ceci présente deux avantages :\\

\begin{itemize}
  \item mettre en garde contre les conséquences de calculs erronés
     sur des données incorrectes ;
  \item guider la recherche des sources d'erreurs et assurer un
    meilleur service.\\
\end{itemize}

Les PC peuvent facilement être conçus pour utiliser la mémoire
avec ou sans parité. Le coût additionnel sur la carte mère est
négligeable. Le seul coût supplémentaire d'environ 10 à 15\%
concerne le choix des barrettes SIMM ou DIMM.\\

Malheureusement, de nombreux constructeurs réputés commencent à
vendre des systèmes sans parité pour réduire leurs prix. Ceci a
débuté en 1994 et 1995, et continue. Personne ne voulant le dire,
ceci demeure donc une sorte de petit secret, un peu noir, au sein
de l'industrie informatique. On pouvait demander le dispositif de
parité mémoire à la commande, même si les configurations proposées
ne l'incluaient pas. Cela valait un surcoût de 10 à 15\% sur la
mémoire. Mais une bombe a secoué l'industrie à l'arrivée du
chipset Intel Triton 430FX, conçu pour le processeur Pentium. Il
n'acceptait pas le contrôle de parité. Il fut le plus vendu en
1995. Tous les chipsets suivants d'Intel étaient dans la même
situation, sauf un, le triton II 430HX. Cette fâcheuse tendance
est heureusement passée et les constructeurs sont finalement
revenus à la mémoire à tolérance d'erreurs.\\

Regardons comment fonctionne le contrôle de parité ; ensuite, nous
étudierons son successeur, le code de correction d'erreur ECC qui
non seulement détecte, mais corrige l'erreur à la volée.\\

C'est IBM qui a établi, à l'origine, la norme de parité impaire
pour contrôler les erreurs. L'explication suivante va permettre de
mieux comprendre ce que l'on entend par parité impaire. Les huit
bits qui composent un octet sont stockés en mémoire. Un
générateur/contrôleur de parité, intégré au processeur ou placé
dans une puce spéciale montée sur la carte mère, étudie les bits
de données en comptant le nombre de 1 que contient l'octet. Si
l'octet contient un nombre pair de bits, le générateur/contrôleur
de parité crée un 1 qu'elle stocke comme neuvième bit (le bit de
parité) dans la puce mémoire de parité. Ce qui donne un nombre
impair pour la somme des neuf bits. Par contre, si la somme des
huit bits donne un nombre impair, le bit de parité créé sera 0, ce
qui donne un total impair pour la somme des neuf bits. La valeur
du bit de parité est toujours choisie de manière que la somme des
neuf bits (huit bits plus le bit de parité), soit un nombre
impair. Rappelez-vous que les huit bits d'un octet sont numérotés
01234567. L'exemple suivant vous aidera à mieux comprendre.\\

\begin{tabular}{l l}
Numéro du bit de données : & 0 1 2 3 4 5 6 7\\
Valeur du bit de données : & 1 0 1 1 0 0 1 1\\
Bit de parité : & 0\\
\newline
\end{tabular}

Dans cet exemple, comme le total des bits de données de valeur 1
donne un nombre impair (5), le bit de parité prend la valeur 0
pour que la somme des neuf bits soit un nombre impair.\\

\noindent Voici un autre exemple :\\

\begin{tabular}{l l}
Numéro du bit de données : & 0 1 2 3 4 5 6 7\\
Valeur du bit de données : & 0 0 1 1 0 0 1 1\\
Bit de parité : & 1 \\
\newline
\end{tabular}

Dans cet exemple, comme le total des bits de données de valeur 1
donne un nombre pair (4), le bit de parité doit prendre la valeur
1 pour que la somme des neuf bits donne un nombre impair.\\

Le système lit à nouveau la mémoire après stockage et vérifie les
informations de parité. Si un octet (neuf bits) a un nombre pair
de bits de valeur 1, cet octet doit contenir une erreur. Mais le
système ne peut pas dire quel est le bit modifié, ou si un seul
bit a été modifié. Si trois bits ont été modifiés, l'octet
affichera une erreur de parité ; en revanche, si deux bits ont été
modifiés, le bit erroné peut passer inaperçu.\\

Les exemples suivants montrent les messages d'erreur de parité
affichés sur trois systèmes :\\

IBM PC :\begin{verbatim}PARITY CHECK x \end{verbatim}(contrôle de parité x) \\
IBM XT : \begin{verbatim}PARITY CHECK xyyyyy (z)
\end{verbatim}(contrôle de parité x yyyyy
(z))\\
IBM AT et XT derniers modèles :
\begin{verbatim}PARITY CHECK xyyyyy
\end{verbatim}(contrôle de
parité x yyyyy) \\
où x représente soit 1 soit 2 :\\

\begin{itemize}
  \item \begin{verbatim}1 = Error occurred on the motherboard (une erreur s'est
    produite sur la carte mère).\end{verbatim}
  \item \begin{verbatim}2 = Error occurred in an expansion slot (une erreur
    s'est produite sur un connecteur d'extension).\end{verbatim}
\end{itemize}

où yyyy représente un nombre de 00000 à FFFFF indiquant, en
notation hexadécimale, le bit sur lequel s'est produite
l'erreur.\\
\noindent où (z) est soit (S), soit (E) :\\
\begin{itemize}
  \item \begin{verbatim}(S) = Parity error occurred in the system unit
    (une erreur de parité s'est produite sur l'unité système).\end{verbatim}
  \item \begin{verbatim}(E) = Parity error occured in the expansion châssis
    (une erreur de parité s'est produite sur le châssis
    d'extension).\end{verbatim}
\end{itemize}


Lorsqu'une erreur de parité est détectée, les circuits de contrôle
de parité de la carte mère génèrent une interruption NMI
(\textit{Non-Maskable Interrupt}, interruption non masquable), qui
interrompt les traitements et requiert l'attention du système sur
cette erreur. Cette interruption déclenche l'exécution d'une
routine dans la ROM, qui efface l'écran et affiche un message en
haut à gauche de celui-ci. Ce message est différent selon le type
de l'ordinateur. Sur les vieux ordinateurs IBM, la routine de
contrôle de parité de la ROM arrête l'unité centrale. Dans ce cas,
l'ordinateur plante et vous devez le réinitialiser ou l'éteindre
puis le rallumer pour le relancer. Malheureusement, toutes les
données qui n'auront pas été sauvegardées seront perdues.\\

Beaucoup d'ordinateurs n'arrêtent pas l'unité centrale quand une
erreur de parité est détectée, mais vous laissent le choix de
réinitialiser l'ordinateur ou de continuer comme si rien ne
s'était passé. En outre, ces systèmes peuvent afficher un message
d'erreur différent des messages IBM, bien que l'information qu'ils
donnent soit à peu près la même.
%Par exemple, sur les systèmes
%avec un BIOS Phoenix, les messages sont :\\
%
%\begin{quote}
%Memory parity interrupt at xxxx:xxxx  (parité mémoire interrompue
%à l'adresse xxxx:xxxx) Type  (S)hut off NMI,  Type (R)eboot, other
%keys to continue  (appuyez sur S pour arrêter l'interruption,   R
%pour réinitialiser l'ordinateur,   ou sur une autre touche pour
%continuer)
%\end{quote}
%
%ou
%
%\begin{quote}
%I/O card parity interrupt at xxxx:xxxx (parité de carte d'E-S
%interrompue à l'adresse xxxxixxxx) Type (S)hut off NMI, Type
%(R)eboot, other keys to continue (appuyez sur S pour arrêter
%l'interruption, R pour réinitialiser l'ordinateur, ou sur une
%autre touche pour con- tinuer)
%\end{quote}
%
%Le premier de ces deux messages indique une erreur de parité au
%niveau de la carte mère (Parity Check 1), le second indique une
%erreur de parité d'un connecteur d'extension (Parity Check 2).
%Remarquez que l'adresse xxxx:xxxx pour la mémoire est donnée sous
%forme de segment-offset et non pas sous forme d'adresse linéaire
%comme dans les messages d'erreur IBM. L'adresse segment:offset
%vous donne l'emplacement de l'erreur au niveau de l'octet.\\
%
%Vous pouvez réagir de trois manières différentes à l'obtention
%d'un message d'erreur :\\
%
%\begin{itemize}
%  \item Si vous appuyez sur la touche S, le contrôle de parité
%    sera interrompu et le système reprendra ses opérations à
%    l'endroit où le contrôle a commencé.
%  \item Si vous appuyez sur R, le système se réinitialisera et
%    toutes les données qui n'ont pas été sauvegardées seront perdues.
%  \item Si vous appuyez sur une autre touche, le système reprendra
%    le fil de ses opérations avec le contrôle de parité désactivé.
%\end{itemize}
%
%Si le problème se reproduit, il risque de causer d'autres
%interruptions du contrôle. En général, il est plus prudent
%d'appuyer sur S, ce qui le désactive et permet de sauvegarder
%votre travail. Dans ce cas précis, il serait même préférable de le
%sauvegarder sur disquette pour éviter une quelconque erreur sur le
%disque dur. Vous devez aussi éviter d'écraser la version
%précédente de votre travail (qui est encore bonne), car vous
%pouvez être en train de sauvegarder un fichier endommagé du fait
%de la défaillance de la mémoire. Une fois le contrôle de parité
%désactivé, vos opérations de sauvegarde ne seront plus
%interrompues. Il est conseillé ensuite d'éteindre votre
%ordinateur, de le relancer et de lancer un logiciel de diagnostic
%de mémoire pour essayer de trouver l'erreur. Parfois, lorsque vous
%relancez votre ordinateur, l'autotest de mise sous tension signale
%l'erreur, mais vous pouvez avoir besoin de lancer ensuite un
%programme de diagnostic plus puissant pour la localiser.\\
%
%Le BIOS AMI affiche les messages d'erreur suivants :\\
%\begin{quote}
%ON BOARD PARITY ERROR ADDR (HEX) = (xxxxx) (erreur de parité sur
%la carte ; adresse (HEX) = (XXXXX)
%\end{quote}
%ou
%\begin{quote}
%OFF BOARD PARITY ERROR ADDR (HEX) = (xxxxx) (erreur de parité hors
%de la carte ; adresse (HEX) = (xxxxx)
%\end{quote}
%
%Ces messages indiquent qu'une erreur s'est produite dans la
%mémoire à l'adresse indiquée pendant l'autotest. Le premier
%message indique que l'erreur s'est produite au niveau de la carte
%mère, et le second au niveau d'un connecteur d'extension d'une
%carte d'extension. Le BIOS AMI peut aussi afficher les erreurs
%mémoire de cette manière :\\
%
%\begin{quote}
%Memory Parity error at xxxxx (erreur de parité de mémoire à
%l'adresse xxxxx)
%\end{quote}
%ou
%\begin{quote}
%I/O Card Parity Error at xxxxx (erreur de parité de carte d'E-S à
%l'adresse xxxx)
%\end{quote}
%
%Ces messages indiquent que l'erreur mémoire s'est produite à
%l'adresse indiquée pendant le fonctionnement normal de
%l'ordinateur. Le premier message indique une erreur de mémoire au
%niveau de la carte mère, et le second au niveau de la mémoire
%d'une carte d'extension.\\
%
%Même si de nombreux systèmes permettent de continuer à travailler
%après une erreur de parité, et autorisent même la désactivation
%des autres contrôles de parité, il peut être dangereux de
%continuer d'utiliser un système défectueux. L'idée est de vous
%laisser le temps d'enregistrer votre travail avant de faire le
%diagnostic et la réparation de l'ordinateur, mais faites attention
%à la manière de le faire.\\
%
%Après avoir enregistré votre travail, trouvez la cause de l'erreur
%de parité et réparez votre ordinateur. Vous pouvez être tenté
%d'arrêter le contrôle de parité et continuer à utiliser votre
%système comme si de rien n'était. Mais attention, si vous le
%faites, c'est un peu comme si vous dévissiez l'ampoule du témoin
%de pression d'huile de votre voiture qui a une fuite d'huile pour
%ne plus être ennuyé !\\

    \subsubsection{Code de correction d'erreur (ECC)}

Depuis la détection d'erreur de parité, un grand bond en avant a
été fait avec le code ECC (\textit{Error Code Correction}, code de
correction d'erreurs). En plus de détecter une erreur sur un bit,
le code ECC la corrige. Ce qui permet de poursuivre le traitement
sans interruption et sans données erronées. Le code ECC ne corrige
que les erreurs portant sur un seul bit et non sur deux bits
consécutifs (ces dernières sont détectées mais pas corrigées). Des
études ont montré que 98\% des erreurs portaient sur un seul bit.
Ce type de correction ECC est appelé SEC-DED. Il nécessite 7 bits
supplémentaires de contrôle pour 32 dans un système à 4 octets, et
huit dans un système à 8 octets. Dans le système à 4 octets, le
code ECC coûte plus cher que le contrôle de parité. Dans un
système 8 octets, les coûts sont équivalents.\\

Le code ECC se substitue au contrôleur de mémoire lors du calcul
des bits de contrôle dans une opération d'écriture en mémoire. Il
compare les bits de contrôle lus et calculés dans une opération de
lecture et, si besoin est, corrige les bits erronés. La logique
supplémentaire demandée par le code ECC dans le contrôleur n'est
pas importante à une époque ou la logique VLSI est bon marché,
mais ce code affecte les performances des écritures en mémoire. En
effet, l'opération doit être programmée pour attendre pendant le
calcul des bits de contrôle, et lire quand le système attend les
données corrigées. Pour l'écriture d'une partie d'un mot de
données, il faut d'abord lire le mot entier, puis les octets
concernés sont réécrits et enfin les nouveaux bits de contrôle
sont calculés. Ceci transforme une écriture de mots de données
partiels en une opération plus lente de lecture, puis d'écriture
modificatrice.\\

Beaucoup d'erreurs mémoire sont limitées à un bit et s'inscrivent
donc dans le champ d'application du code ECC. Ce dispositif est un
bon choix pour les serveurs, les stations de travail et les
applications importantes.

Le code ECC est basé sur l'algorithme de Hamming. Celui dépasse le
sujet de ce rapport. Vous pouvez toutefois trouver la

formalisation de l'algorithme de Hamming sur
http://cermics.enpc.fr/polys/oap/node52.html.

