Qu’est-ce la pagination mémoire et mémoire virtuelle ?

Dans les OS Windows ou Linux, on trouve les mécanismes de pagination de mémoire qui est le socle de la mémoire virtuelle.
Celle-ci permet de dépasser la taille de la mémoire RAM et physique en simulant de la mémoire virtuelle mais aussi permettre de partager des zones mémoires entre processus.

Ce tutoriel vous explique ce qu'est la pagination mémoire et décrit le fonctionnement générale de la mémoire virtuelle.

Qu'est-ce la pagination mémoire et mémoire virtuelle ?

Qu'est-ce la pagination mémoire et mémoire virtuelle ?

Les systèmes d'exploitation comme Linux ou Windows n'utilisent pas directement la mémoire RAM mais une mémoire intermédiaire dites mémoire virtuelle.

La mémoire virtuelle est un mécanisme de simulation de mémoire utiliser par le systèmes d'exploitations modernes.
Elle vise à proposer les fonctionnalités suivantes :

  • d'utiliser les espaces de stockage pour étendre la mémoire totale du PC
  • de mettre en place des mécanismes de protection de la mémoire 
  • le partage de mémoire inter-processus
  • Optimiser l'utilisation de la mémoire physique
On parle aussi de SWAP, que l'on traduit de l'anglais par échange ou permutation surtout dans le cas de Linux.

Pour cela, l'OS créé une zone de mémoire virtuelle découpée en pages.
Chaque page correspond à une zone de la mémoire physique ou au fichier d'échange ou partition SWAP.

Le fonctionnement de la mémoire virtuelle et physique d'un système d'exploitation
source https://fr.wikipedia.org/wiki/M%C3%A9moire_virtuelle#M%C3%A9moire_virtuelle_pagin%C3%A9e

L'OS fait donc en permanence la correspondance grâce la table de page.
Il s'agit donc d'un index géant entre les zones de mémoires virtuelles (pages) et les zones de mémoires physiques (frames/cadres).

La table des pages correspondance entre la mémoire virtuelle et physique (RAM)

Comme le montre l'image précédente, il y a plus de pages de mémoires virtuelles que de cadres de mémoires physiques.
Notamment à cause du faite qu'une partie de la mémoire virtuelle peut être déportée sur des supports de stockage comme un fichier d'échange ou une partition SWAP.
Ainsi la taille de la mémoire virtuelle est plus importante que la mémoire physique permettant d'étendre la quantité de mémoire totale.

Défaut de page et faute matérielle

Lorsqu'un processus tente de référencer une page qui n'est pas actuellement présente dans la RAM, le processeur traite cette référence mémoire non valide comme un défaut de page ou erreur de page (page fault) et transfère le contrôle du programme au système d'exploitation. Le système d'exploitation doit:

  1. Déterminer l'emplacement des données sur le disque
  2. Obtenir un cadre de page vide dans la RAM à utiliser comme conteneur pour les données
  3. Charger les données demandées dans le cadre de page disponible.
  4. Mettre à jour le tableau des pages pour faire référence au nouveau cadre de page
  5. Renvoyer le contrôle au programme, en réessayant de manière transparente l'instruction qui a causé l'erreur de page

Lorsque le cadre de page expulsé a été alloué dynamiquement par un programme pour contenir des données, ou si un programme l'a modifié depuis qu'il a été lu dans la RAM, l'OS doit être écrit sur le disque avant d'être libéré.
Si un programme référence ultérieurement la page expulsée, une autre erreur de page se produit et la page doit être relue dans la RAM.

Dans Windows, on peut afficher les défauts de page depuis le moniteur de ressources systèmes.
Ce dernier les nomme fautes matérielles qui n'a strictement rien à voir avec une défaillance matérielle.

Les fautes matérielles dans le moniteur de ressources systèmes

Étendre la mémoire totale du système

Comme on l'a vu plus haut, la taille de la mémoire virtuelle est plus importante que la mémoire physique.
Cela permet donc d'étendre la quantité totale de la mémoire disponible pour le système.
En effet, certaines pages ne sont pas en mémoire mais sont stockées sur un autre support (disque).
Lorsque l'on en a besoin, elles seront ramenées dans un cadre ce qui génère un défaut de page.

Cela génère des lenteurs, car souvent le fichier d'échange ou SWAP se trouve sur les disques.
Cela génère donc des accès disques important.
Or, la vitesse d'accès des disques dur est beaucoup plus lente que la mémoire RAM.
Ainsi lorsque le nombre de défaut de page est important, on parle de thrashing qui provoque un effondrement des performances du PC.

Optimiser l'utilisation de la mémoire : mémoire partagée (Shareable Memory), compression et SysMain

La pagination de la mémoire ouvre la porte à la mémoire partagée.
Afin d'économiser la mémoire physique, des processus peuvent partager des zones de mémoire identiques afin d'accéder à des informations communes.
Par exemple, une DLL et librairies communes à chaque processus.
Au lieu de dupliquer celle-ci, chaque processus accède à sa zone mémoire via les pages.
Ainsi, cela se traduit par des pages d'adresses communes aux processus.
La mémoire partagée est un mécanisme important d'optimisation de la mémoire dans les OS Windows et Linux.

Windows utilise aussi SysMain pour optimiser l'utilisation de la mémoire virtuelle.
Pour cela, l'OS met en place des algorithmes de statistiques d'utilisation des pages qu'il peut garder un certains temps dans une mémoire cache.
Ainsi, si l'utilisateur relance une application ayant besoin de celle-ci, les données sont toujours en mémoire pour y accéder plus rapidement.

La méthode utilisée par le système d'exploitation pour sélectionner le cadre de page à réutiliser, qui est son algorithme de remplacement de page, est importante pour l'efficacité.
Le système d'exploitation prédit le cadre de page le moins susceptible d'être bientôt nécessaire, souvent via l'algorithme le moins récemment utilisé (LRU) ou un algorithme basé sur l'ensemble de travail du programme.
Pour augmenter encore la réactivité, les systèmes de pagination peuvent prédire quelles pages seront bientôt nécessaires, en les chargeant de manière préventive dans la RAM avant qu'un programme les référence.

Enfin un autre mécanisme d'optimisation est la compression des pages.
Cela permet de réduire la taille de la mémoire virtuelle et éviter l'utilisation des supports de stockage.

Protection de la mémoire

Des mécanismes de vérifications et de protection de la mémoire sont aussi mis en place dans la mémoire virtuelle.
Notamment les pages comportent des bits de protections.
Selon les cas, cela peut générer des crashs du système. Par exemple le BSOD PAGE_FAULT_IN_NONPAGED_AREA qui indique qu'une mémoire système non valide a été référencée.
En général, l'adresse mémoire est incorrecte ou l'adresse mémoire pointe vers la mémoire libérée.

La mémoire virtuelle et pagination dans Windows 10

La pagination mémoire est donc un mécanisme de la mémoire virtuelle qui donne accès à différentes sous mémoire.

Le gestionnaire de tâches de Windows 10 permet d'afficher l'état de la mémoire de Windows notamment à travers l'onglet détails :

  • Plage de travail (Working set) : L'ensemble de travail représente la quantité de mémoire virtuelle validée qui se trouve dans la mémoire physique et appartient au processus.
  • Plage de mémoire partagée (shareable memory) : La mémoire partagée par le processus
  • Plage de mémoire privée (Private Bytes) : Ce graphique montre la mémoire virtuelle privée engagée dans le fichier d'échange de Windows

Plus de détails :

La mémoire virtuelle et pagination dans Windows

Dans Windows, la mémoire paginée et virtuelle se présente sous la forme de deux fichiers d'échange :

  • Pagefile.sys : fichier de pagination qui permet de simuler de la mémoire en utilisant votre disque dur. Windows utilise aussi le fichier pagefile.sys pour les dump mémoire en de BSOD
  • Swapfile.sys : fichier de pagination à destination des applications de Windows Store, des applications Métro, des applications modernes, applications Windows 8, application

L'article suivant donne plus d'informations sur ce dernier :

La mémoire virtuelle et pagination dans Linux

Le fonctionnement de la mémoire dans Linux est décrit dans cet article complet :

Des gestionnaires de tâches existent mais aussi des commandes comme top, atop, htop pour afficher l'état des processus, CPU et mémoire.

Afficher l'état des processus, CPU et mémoire dans Linux avec top

Enfin on peut aussi utiliser la commande free pour afficher la taille de la mémoire, SWAP utilisée et libre.

La mémoire virtuelle est stockée dans une partition SWAP qui est définit lors de l'installation mais que l'on peut réduire ou étendre par la suite.

La partition SWAP dans Linux

On peut aussi activer et désactiver le SWAP avec les commandes swapoff et swapon.

Liens

source : https://en.wikipedia.org/wiki/Memory_paging

Cet article est sous licence Creative Commons BY-NC-SA.
Vous êtes autorisé à partager et modifier cet article, à condition de créditer le site ainsi que la licence, d'utiliser la même licence si vous modifiez l'oeuvre et de ne pas en faire d'utilisation commerciale.

Trouver la solution sur le forum d'aide

Vous êtes arrivé au terme de l'article Qu’est-ce la pagination mémoire et mémoire virtuelle ? mais vous n'avez pas trouvé la solution à votre problème...

Suivez ces articles du forum pour trouver une réponse :
Sinon créez votre propre demande pour obtenir de l'aide gratuite.
Plus de détails : Comment obtenir de l'aide sur le forum