Ils sont parmi les premiers
acronymes que l'on
apprend en informatique : RAM et ROM, respectivement pour
Random Access Memory et Read Only Memory.
Si on comprend facilement qu'une mémoire « Read
Only » (lecture seulement, si un anglophobe passe par là)
ne change pas avec le temps et reste toujours la même, la
pertinence du terme « Random access » (accès
aléatoire) peut paraître plus discutable.
Pendant mes jeunes années, j'ai longtemps été obligé de
retenir bêtement que « RAM = mémoire vive », ne
voyant pas le rapport entre le sigle et son utilisation
concrète. Pire, j'ai cru au tout début que cette zone servait
uniquement au générateur de nombres aléatoires !
Et puis j'ai appris je ne sais plus trop comment la vraie
signification. Mais j'ai pu constater que de nombreuses
personnes baignaient toujours dans l'ignorance, et je me
propose donc de partager mon savoir dans un acte de
mansuétude
d'une extrême
munificence.
(J'ai un peu honte d'avoir mis un lien « en savoir plus », vu que l'explication tient en quelques lignes ; disons juste que c'est pour les statistiques.)
Au tout début de l'informatique, les programmes étaient écrits sur des cartes perforées. D'ailleurs, la représentation théorique d'un ordinateur (la machine de Turing) est un simple ruban infini de 0 et de 1 ; ce qui montre qu'en 70 ans l'informatique n'a pas fait d'avancée exceptionnellement novatrice.
Ces cartes perforées étaient déplacées par une machine, à une vitesse forcément finie impliquant que le passage de l'état n à n+1 prenne un certain temps t0.
Imaginez un programme en train de s'exécuter sur cette carte perforée, disons qu'il est à la case 500 et que l'instruction sur cette case est un saut vers une autre adresse mémoire (JMP, BRU, MOV… ). Examinons deux situations différentes :
- Demande de saut vers l'adresse 510 : le ruban doit se décaler de |510 - 500| = 10 positions, ce qui prend un temps de 10t0.
- Demande de saut vers l'adresse 10 : le ruban doit se décaler de |10 - 500| = 490 positions, ce qui prend un temps de 490t0.
Autrement dit, le temps d'accès à la mémoire dépend de l'adresse en cours et de l'adresse à atteindre : le programmeur consciencieux devra veiller à placer côte-à-côte les instructions qui peuvent être connectées par un saut. Un vrai casse-tête !
Avec la mémoire vive moderne qu'on trouve dans nos PC, le
ruban a disparu ; et l'accès à n'importe quel élément de
la mémoire se fait en temps constant, quelle que soit la
position demandée et la position actuelle – un avantage
indéniable pour le multitâche et la programmation !
Autrement dit, deux adresses
choisies aléatoirement ont le même temps
d'accès : et voilà qui explique l'origine du mot ;)
Pour conclure, une petite annexe : la mémoire RAM n'est pas forcément volatile (disparition des données à la coupure du courant) ! Si les barrettes de RAM à l'intérieur de nos PC le sont par exemple, ce n'est pas le cas d'une clé USB qui est pourtant aussi une mémoire RAM.