Mémoire virtuelle

Principe

Lors de la compilation d'un programme écrit dans un langage de haut niveau, toutes les références à des variables locales ou globales sont transformées en des références à des emplacements mémoire alloués à ces variables. Les variables globales sont généralement allouées dans la zone des données alors que les variables locales sont plutôt allouées sur la pile. Les pointeurs de certains langages comme C ou C++ ou les références de Java sont aussi des adresses qui sont manipulées de manière explicites.

Dans un ordinateur sans mémoire virtuelle, les adresses manipulées implicitement ou explicitement par les programmes correspondent aux adresses réelles des données en mémoire. Le principe de mémoire virtuelle est de séparer les adresses manipulées par les programmes et les adresses réelles des données en mémoire. Les adresses manipulées par les programmes sont appelées adresses virtuelles et les adresses des données en mémoire sont appelées adresses physiques.

Chaque programme dispose d'un espace d'adressage virtuel constitué de toutes les adresses virtuelles. Pour que les programmes fonctionnent correctement, il doit y avoir une correspondance entre les adresses virtuelles et les adresses physiques. Cette correspondance est assurée conjointement d'une part au niveau matériel par un circuit adjoint au processeur appelé MMU (Memory Management Unit) et d'autre part au niveau logiciel par le système d'exploitation. Dans les micro-processeurs récents, ce circuit MMU est souvent intégré au processeur.

Fonctionnement

L'espace d'adressage virtuel de chaque programme ainsi que l'espace mémoire sont divisés en blocs appelés pages de même taille. Cette taille est très souvent de l'ordre 4 Ko mais peut aussi être de 8 ou 16 Ko sur des micro-processeurs 64 bits. Un bloc de l'espace d'adressage virtuel est appelé page virtuelle et un bloc de l'espace mémoire est appelé page physique. L'article wikipedia utilise les termes page et frame. Pour chaque page virtuelle utilisée par un programme correspond une page physique. Le système maintient pour chaque programme une table de correspondance entre les pages virtuelles et les pages physiques. Cette table est appelée table des pages. Elle est bien sûr propre à chaque programme. Deux programmes fonctionnant simultanément peuvent utiliser la même adresse virtuelle, par exemple 0x1234, pour des données différentes qui doivent donc se trouver à des adresses physiques différentes.

Schéma du principe de la mémoire virtuelle
Principe de la mémoire virtuelle

Translation Lookaside Buffer

Schéma du Translation Lookaside Buffer
Fonctionnement du Translation Lookaside Buffer

Swap

Schéma du principe de la mémoire virtuelle avec swap
Principe de la mémoire virtuelle avec swap

Table des pages hiérarchique

Schéma de table des pages hiérarchique
Table des pages hiérarchique

Schéma du la Structure des entrées de la table des pages
Structure des entrées (Dword) de la table des pages (80x86)

Linux

Cet article développe entre autre l'organisation propre à linux pour la mémoire virtuelle.