Cet article décrit les principes et les implémentations de la mémoire virtuelle, qui est le niveau de la hiérarchie mémoire compris entre la mémoire principale et les mémoires secondaires (disques magnétiques).
La mémoire virtuelle joue un double rôle. D'une part, elle fournit à l'utilisateur un espace mémoire quasi illimité, sans avoir à se préoccuper de la taille et de la nature (DRAM ou disques) des mémoires physiques réellement implémentées, tout en étant protégé contre les interactions volontaires ou involontaires d'autres programmes, que ce soient les siens ou ceux d'autres utilisateurs. D'autre part, elle réalise, par matériel et par logiciel sous contrôle du système d'exploitation, les transferts nécessaires entre la mémoire principale et les mémoires secondaires lorsque le code ou les données nécessaires ne sont pas dans la mémoire principale.
L'espace mémoire virtuel peut être structuré ou non. La structuration se réalise de différentes manières : segmentation en assembleur, segmentation comme extension d'adresse ou segmentation des machines-systèmes. Sans structuration, l'espace est dit « à plat ». Depuis les processeurs 32 bits, l'espace virtuel, segmenté ou non, est découpé en pages de taille fixe. Les systèmes à plat paginés sont d'abord présentés, avec les techniques de traduction d'adresses (tables des pages directes, tables des pages inverses utilisant le hachage, TLB pour accélérer les traductions) et de protection au niveau des pages. Les différents algorithmes de remplacement sont expliqués. Ensuite, les systèmes avec segmentation et pagination, caractéristiques des machines-systèmes sont présentés d'abord dans le cas général, puis illustrés dans le cas des architectures IA-32, qui utilisent une approche très pure de la segmentation paginée.
La manière dont les systèmes d'exploitation les plus connus implémentent la mémoire virtuelle est ensuite abordée. Multics utilisait la segmentation paginée. VAX-VMS au contraire utilisait une mémoire virtuelle à plat pour laquelle la notion de segments correspondait à des super-pages utilisées comme extension de l'espace d'adressage. Les systèmes Windows sont significatifs de l'évolution des mémoires virtuelles. De la version initiale Windows 1 à Windows Millenium, les systèmes successifs ont utilisé la segmentation paginée implantée dans les différents processeurs IA-32. Cependant, la version Windows NT développée en parallèle à partir de 1993 utilisait un système à plat, prévu pour être portable avec micronoyaux et HAL (couche d'adaptation au matériel), notamment sur les processeurs RISC qui n'utilisent pas la segmentation. Millenium a été le dernier représentant de la gamme utilisant la segmentation. Les versions 64 bits depuis Windows XP utilisent le mode à plat. Linux utilise le mode à plat.
L'histoire des mémoires virtuelles est celle de la naissance, de la vie et de la mort de la segmentation. Elle a disparu dans les versions 64 bits, remplacée par l'adressage à plat.