« Adressage mémoire » : différence entre les versions

Un article de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
PouX (discuter | contributions)
Lequinow (discuter | contributions)
Aucun résumé des modifications
 
(30 versions intermédiaires par 19 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{Voir homonymes|Adresse}}
{{Voir homonymes|Adresse}}
{{À sourcer|date=février 2024}}
L’'''adressage mémoire''' est une technique électronique et informatique permettant à certains composants d'accéder à la [[mémoire (informatique)|mémoire]]. Une [[Pointeur (programmation)|adresse mémoire]] est un identifiant qui désigne une zone particulière de la [[mémoire physique]] des données peuvent être lues et stockées, temporairement ([[mémoire vive]]) ou de façon durable ([[mémoire non volatile]]). Cet identifiant est usuellement un nombre [[Entier (informatique)|entier]].

L’'''adressage mémoire''' est, en [[électronique (technique)|électronique]] et en [[informatique]], la façon dont se fait l'accès aux [[donnée]]s conservées en [[mémoire (informatique)|mémoire]]. Une [[Pointeur (programmation)|adresse mémoire]] est un nombre [[entier naturel]] (rarement une autre sorte d'[[identifiant]]) qui désigne une zone particulière de la mémoire, ou juste le début d'une zone. Le plus souvent, une donnée peut être lue ou écrite. La mémoire peut être temporaire ([[mémoire vive]]) pour le travail ou au contraire durable ([[mémoire non volatile]]) pour le stockage.


== Utilisation ==
== Utilisation ==


L'immense majorité des programmes informatiques fait usage de la mémoire lors de son exécution. Le stockage temporaire d'une donnée (une [[variable (informatique)|variable]]) implique l'accès à la mémoire vive : dans ce cas, c'est le [[processeur]] qui écrit sur le [[bus d'adresse|bus]]. Lors d'un accès à un composant [[Accès direct à la mémoire|DMA]] (par exemple un disque dur), c'est le contrôleur DMA qui, cette fois, agit directement sur le bus système.
L'immense majorité des programmes informatiques fait usage de la mémoire lors de son exécution. Le stockage temporaire d'une donnée (une [[variable (informatique)|variable]]) implique l'accès à la mémoire vive : dans ce cas, c'est le [[processeur]] qui écrit sur le [[bus d'adresse|bus]]. Lors d'un accès à un composant [[Accès direct à la mémoire|DMA]] (par exemple un disque dur), c'est le contrôleur DMA qui, cette fois, agit directement sur le bus système.

== Adresse physique et adresse virtuelle ==
[[File:MMU and IOMMU fr.svg|thumb|Adresses virtuelles et physiques traduites par un IOMMU et un MMU.]]

Les ordinateurs assez puissants pour faire fonctionner de nombreux programmes simultanément sont généralement équipés d'une [[unité de gestion de mémoire]] (MMU) capable de traduire à la volée les adresses mémoire envoyées par le [[processeur]] à la mémoire. C'est notamment le cas des [[ordinateur personnel|ordinateurs personnels]] depuis les [[années 1990]]. Lorsqu'une telle unité est en fonction, les adresses émises par le processeur sont alors des adresses virtuelles, et les adresses traduites qui arrivent à la mémoire sont des adresses physiques.

Le système d'exploitation peut notamment programmer l'unité de gestion de mémoire pour :
* empêcher chaque [[processus (informatique)|processus]] d'accéder à la mémoire du système et des autres processus ;
** cela permet de détecter et interrompre un processus dysfonctionnel avant qu'il ne corrompe des données qui ne lui appartiennent pas ;
** sans cela, les processus pourraient espionner les données des autres processus ;
* simuler de grandes zones d'adresses contiguës disponibles, alors que les adresses physiques disponibles sont [[Fragmentation (informatique)|fragmentées]] ;
* simuler une plus grande quantité de mémoire vive qu'il n'en existe réellement, c'est la [[mémoire virtuelle]] ;

Les composants périphériques jouissant d'un [[accès direct à la mémoire]] peuvent aussi voir leurs adresses traduites par une unité de gestion de mémoire dédiée (IOMMU).


== Adressage direct ==
== Adressage direct ==


L'interface utilisée est dans la plupart des cas un [[bus d'adresse|bus]], c'est-à-dire un ensemble de fils dédiés à une utilisation particulière (ici l'accès à la mémoire).
L'interface utilisée est dans la plupart des cas un [[bus d'adresse|bus]], c'est-à-dire un ensemble de fils destinés à une utilisation particulière (ici l'accès à la mémoire).


Sur N fils, on peut coder [[Système binaire|2<small><sup>N</sup></small> valeurs]]. Ainsi, en précisant la ''largeur'' du bus d'adresse, en nombre de [[bit (informatique)|bit]]s (ou fils), on indique la capacité mémoire maximum accessible par le processeur (la taille de son espace d'adressage).
Sur N fils, on peut coder [[Système binaire|2<sup>N</sup> valeurs]]. Ainsi, en précisant la ''largeur'' du bus d'adresse, en nombre de [[bit (informatique)|bit]]s (ou fils), on indique la capacité mémoire maximum accessible par le processeur (la taille de son espace d'adressage).


En plus des fils codant l'adresse, la [[mémoire vive]] nécessite au moins un fil supplémentaire indiquant l'opération qui sera faite sur la mémoire : lecture ou écriture.
En plus des fils codant l'adresse, la [[mémoire vive]] nécessite au moins un fil supplémentaire indiquant l'opération qui sera faite sur la mémoire : lecture ou écriture.
Ligne 18 : Ligne 34 :
Un bus d'adresse trop petit, donc un adressage mémoire restreint, a été l'un des facteurs déterminants dans la disparition de certaines lignées d'ordinateurs. Par exemple, le [[PDP-10]], une machine 36 bits dont l'espace d'adressage n'était que de 18 bits (256 [[octet|kibioctets]]), n'a jamais eu de successeur. La gamme de [[mini-ordinateur]]s [[PDP-11]] de [[Digital Equipment Corporation|DEC]] a été remplacée par les [[VAX]], ce qui est d'ailleurs l'abréviation de ''{{lang|en|Virtual Address Extension}}''.
Un bus d'adresse trop petit, donc un adressage mémoire restreint, a été l'un des facteurs déterminants dans la disparition de certaines lignées d'ordinateurs. Par exemple, le [[PDP-10]], une machine 36 bits dont l'espace d'adressage n'était que de 18 bits (256 [[octet|kibioctets]]), n'a jamais eu de successeur. La gamme de [[mini-ordinateur]]s [[PDP-11]] de [[Digital Equipment Corporation|DEC]] a été remplacée par les [[VAX]], ce qui est d'ailleurs l'abréviation de ''{{lang|en|Virtual Address Extension}}''.


== Adressage indirect ==
On parle d'adressage indirect lorsque, pour accéder à une donnée, on récupère son adresse dans une variable<ref name="Zaks">Cf. par exemple {{ouvrage|auteur=R. Zaks|lien auteur=Rodnay Zaks|titre=Programmation du 6502|éditeur=SYBEX éditions|lieu=|année=1980 |publi= 2e édition|isbn=2902414242|pages=372|chap=Techniques d'adressage|passage=181}}</ref> (ou segment de mémoire). C'est donc un [[Référence (programmation)|adressage par référence]] au contenu de cette autre variable. L'adressage indirect est la méthode la plus pratique pour accéder séquentiellement à des données stockées de façon régulière, par un [[Structure de contrôle#Boucles|mécanisme de boucle]] : on peut ainsi balayer toute une zone de données (composantes d'un [[Vecteur (structure de données)|vecteur]], d'un [[Tableau (structure de données)|tableau]], d'un [[Arbre enraciné|arbre]]{{Etc.}}) en faisant varier un [[Indice#Repérage|indice]] qui détermine la position. Dans les microprocesseurs, cette technique était réalisée grâce aux [[Registre d'index|registres d'index]], qui permettent de construire l'adresse mémoire sur une seule instruction-machine.

== Notes ==
{{Références}}
== Articles connexes ==
== Articles connexes ==
* [[Mémoire virtuelle]]
* [[Mémoire virtuelle]]
Ligne 23 : Ligne 44 :
* [[Offset (informatique)|Offset]]
* [[Offset (informatique)|Offset]]


{{Palette|Types de données}}
{{Portail|Informatique|Programmation informatique}}
{{Portail|Informatique|Programmation informatique}}


Ligne 28 : Ligne 50 :
[[Catégorie:Programmation informatique]]
[[Catégorie:Programmation informatique]]


[[ar:عنوان مادي]]
[[bs:Memorijska adresa]]
[[ca:Adreça de memòria]]
[[cs:Adresa (programování)]]
[[de:Speicheradresse]]
[[el:Μνήμη υπολογιστή#Διευθύνσεις μνήμης και χώρος διευθύνσεων]]
[[el:Μνήμη υπολογιστή#Διευθύνσεις μνήμης και χώρος διευθύνσεων]]
[[en:Memory address]]
[[es:Dirección de memoria]]
[[et:Mäluaadress]]
[[hr:Memorijska adresa]]
[[it:Indirizzo di memoria]]
[[ja:メモリアドレス]]
[[ka:მეხსიერების მისამართი]]
[[ko:메모리 주소]]
[[nl:Geheugenadres]]
[[pl:Adres bezwzględny]]
[[pt:Endereço (memória)]]
[[ru:Адресация памяти]]
[[simple:Memory address]]
[[sv:Minnesadress]]
[[zh:物理地址]]

Dernière version du 24 février 2024 à 23:07

L’adressage mémoire est, en électronique et en informatique, la façon dont se fait l'accès aux données conservées en mémoire. Une adresse mémoire est un nombre entier naturel (rarement une autre sorte d'identifiant) qui désigne une zone particulière de la mémoire, ou juste le début d'une zone. Le plus souvent, une donnée peut être lue ou écrite. La mémoire peut être temporaire (mémoire vive) pour le travail ou au contraire durable (mémoire non volatile) pour le stockage.

Utilisation[modifier | modifier le code]

L'immense majorité des programmes informatiques fait usage de la mémoire lors de son exécution. Le stockage temporaire d'une donnée (une variable) implique l'accès à la mémoire vive : dans ce cas, c'est le processeur qui écrit sur le bus. Lors d'un accès à un composant DMA (par exemple un disque dur), c'est le contrôleur DMA qui, cette fois, agit directement sur le bus système.

Adresse physique et adresse virtuelle[modifier | modifier le code]

Adresses virtuelles et physiques traduites par un IOMMU et un MMU.

Les ordinateurs assez puissants pour faire fonctionner de nombreux programmes simultanément sont généralement équipés d'une unité de gestion de mémoire (MMU) capable de traduire à la volée les adresses mémoire envoyées par le processeur à la mémoire. C'est notamment le cas des ordinateurs personnels depuis les années 1990. Lorsqu'une telle unité est en fonction, les adresses émises par le processeur sont alors des adresses virtuelles, et les adresses traduites qui arrivent à la mémoire sont des adresses physiques.

Le système d'exploitation peut notamment programmer l'unité de gestion de mémoire pour :

  • empêcher chaque processus d'accéder à la mémoire du système et des autres processus ;
    • cela permet de détecter et interrompre un processus dysfonctionnel avant qu'il ne corrompe des données qui ne lui appartiennent pas ;
    • sans cela, les processus pourraient espionner les données des autres processus ;
  • simuler de grandes zones d'adresses contiguës disponibles, alors que les adresses physiques disponibles sont fragmentées ;
  • simuler une plus grande quantité de mémoire vive qu'il n'en existe réellement, c'est la mémoire virtuelle ;

Les composants périphériques jouissant d'un accès direct à la mémoire peuvent aussi voir leurs adresses traduites par une unité de gestion de mémoire dédiée (IOMMU).

Adressage direct[modifier | modifier le code]

L'interface utilisée est dans la plupart des cas un bus, c'est-à-dire un ensemble de fils destinés à une utilisation particulière (ici l'accès à la mémoire).

Sur N fils, on peut coder 2N valeurs. Ainsi, en précisant la largeur du bus d'adresse, en nombre de bits (ou fils), on indique la capacité mémoire maximum accessible par le processeur (la taille de son espace d'adressage).

En plus des fils codant l'adresse, la mémoire vive nécessite au moins un fil supplémentaire indiquant l'opération qui sera faite sur la mémoire : lecture ou écriture.

Il est possible de multiplexer le bus d'adresse avec le bus de données, en mettant en commun un certain nombre de fils, sachant qu'un signal supplémentaire devra être généré pour savoir comment interpréter les valeurs binaires circulant sur ces fils (adresse ou données). Un exemple de processeurs avec bus multiplexé : les 8086 ou 8088 d'Intel.

Un bus d'adresse trop petit, donc un adressage mémoire restreint, a été l'un des facteurs déterminants dans la disparition de certaines lignées d'ordinateurs. Par exemple, le PDP-10, une machine 36 bits dont l'espace d'adressage n'était que de 18 bits (256 kibioctets), n'a jamais eu de successeur. La gamme de mini-ordinateurs PDP-11 de DEC a été remplacée par les VAX, ce qui est d'ailleurs l'abréviation de Virtual Address Extension.

Adressage indirect[modifier | modifier le code]

On parle d'adressage indirect lorsque, pour accéder à une donnée, on récupère son adresse dans une variable[1] (ou segment de mémoire). C'est donc un adressage par référence au contenu de cette autre variable. L'adressage indirect est la méthode la plus pratique pour accéder séquentiellement à des données stockées de façon régulière, par un mécanisme de boucle : on peut ainsi balayer toute une zone de données (composantes d'un vecteur, d'un tableau, d'un arbreetc.) en faisant varier un indice qui détermine la position. Dans les microprocesseurs, cette technique était réalisée grâce aux registres d'index, qui permettent de construire l'adresse mémoire sur une seule instruction-machine.

Notes[modifier | modifier le code]

  1. Cf. par exemple R. Zaks, Programmation du 6502, SYBEX éditions, (réimpr. 2e édition), 372 p. (ISBN 2902414242), « Techniques d'adressage », p. 181

Articles connexes[modifier | modifier le code]