4.4. Mémoire virtuelle : informations détaillées

Il convient tout d'abord d'examiner un nouveau concept, celui de l'espace d'adressage virtuel. Ce dernier correspond à la quantité maximale d'espace d'adressage disponible pour une application. Il varie en fonction de l'architecture du système et du système d'exploitation lui-même. L'espace d'adressage virtuel dépend de l'architecture car c'est elle qui définit la quantité de bits disponibles à des fins d'adressage. L'espace adressage virtuel dépend aussi du système d'exploitation car il est possible que la manière selon laquelle il a été implémenté ne fasse intervenir des limites supplémentaires allant au-delà de celles imposées par l'architecture elle-même.

Le mot "virtuel" dans l'expression espace d'adressage virtuel fait référence au nombre total d'emplacements de mémoire dotés d'une adresse unique disponibles pour une application mais ne fait pas référence à la quantité de mémoire physique, quelle soit installée dans le système ou dédiée à l'application à tout moment donné.

Dans notre exemple, l'espace d'adressage virtuel de notre application est de 15000 octets.

Afin d'implémenter la mémoire virtuelle, il est nécessaire que le système informatique dispose de matériel spécifique pour la gestion de mémoire. Ce dernier est souvent connu sous l'acronyme MMU (de l'anglais Memory Management Unit ou unité de gestion de mémoire). Sans MMU, lorsque le CPU accède à la RAM, les emplacements de cette dernière ne changent jamais — l'adresse mémoire 123 correspond toujours au même emplacement physique au sein de la mémoire vive.

Toutefois, avec MMU, les adresses mémoire font l'objet d'une étape de traduction avant tout accès à la mémoire. Ainsi, l'adresse mémoire 123 se verra peut-être mise en correspondance avec l'adresse physique 82043 à un moment donné et avec l'adresse physique 20468 à un autre. Dans une telle situation néanmoins, le temps de gestion du système nécessaire pour effectuer le suivi individuel de la correspondance entre les adresses virtuelles et les adresses physiques pour des millions d'octets de mémoire serait beaucoup trop long. Ainsi, au lieu de ce processus, MMU découpe la mémoire vive en pages — des sections de mémoire contiguës d'une taille déterminée qui sont traitées par MMU comme des entités indépendantes.

Le suivi des pages et des traductions de leurs adresses peut apparaître comme étant une étape quelque peu inutile et compliquée, mais elle représente en fait un élément crucial à l'implémentation de mémoire virtuelle, comme l'expliquent le point suivant.

Revenant à notre application hypothétique dotée d'un espace d'adressage de 15000 octets, imaginez que la première instruction de l'application accède à des données stockées à l'adresse 12374. Supposez également que notre ordinateur ne dispose que de 12288 octets de RAM physique. Que se passe-t-il lorsque le CPU tente d'accéder à l'adresse 12374 ?

Le processus ayant lieu dans ce cas est appelé défaut de page.

4.4.1. Défauts de pages

Un défaut de page correspond à une série d'événements se déroulant lorsqu'un programme essaie d'accéder à des données (ou à un code) qui se trouvent dans son espace d'adressage mais ne sont pas actuellement placées dans la mémoire vive (ou RAM) du système. Le système d'exploitation doit traiter les défauts de pages en permettant, d'une manière ou d'une autre, l'accès à la mémoire des données recherchées afin que le programme puisse continuer ses opérations, comme si le défaut de page ne s'était jamais produit.

Dans le cas de notre application hypothétique, le CPU transmet d'abord l'adresse recherchée (12374) au MMU. Toutefois, ce dernier ne disposantd'aucune traduction pour cette adresse, il interrompt le CPU et engendre l'exécution du logiciel, appelé pilote de défauts de pages. Ce dernier détermine alors les mesures à prendre pour résoudre le défaut de page en question. À cet égard, il peut :

Alors que les trois premières mesures sont relativement simples, la dernière elle,ne l'est pas du tout. Pour bien comprendre ce dernier point, il est nécessaire d'aborder des sujets supplémentaires.

4.4.2. Jeu de pages de travail

L'ensemble des pages de mémoire physique actuellement dédiées à un processus spécifique est connu sous le terme de jeu de pages de travail (ou working set) de ce processus. Le nombre de pages faisant partie de ce jeu de pages de travail peut augmenter ou diminuer selon la quantité globale de pages disponibles sur tout le système.

Le jeu de pages de travail grandit lorsque la page du processus fait défaut. Le jeu de pages de travail en revanche diminue au fur et à mesure que le nombre des pages libres baisse. Afin d'éviter d'être complètement à cours de mémoire, il est nécessaire de retirer des pages des jeux de pages de travail du processus et de les transformer en pages libres qui pourront être utilisées ultérieurement. Le système d'exploitation réduit les jeux de pages de travail des processesus de plusieurs manières :

Afin de déterminer des jeux de pages de travail pour tous les processus, le système d'exploitation doit effectuer un suivi des informations relatives à l'utilisation de toutes les pages. De cette manière, il est à même de déterminer les pages précises qui sont activement utilisées (et doivent donc demeurer en mémoire) et celles qui ne le sont pas (et peuvent par conséquent être retirées de la mémoire). Dans la plupart des cas, un genre d'algorithme basé sur les pages utilisées le moins récemment permet de déterminer les pages spécifiques pouvant être retirées des jeux de pages de travail des processus.

4.4.3. Échange (ou swapping)

Alors que l'échange ou swapping (c'est-à-dire l'écriture de pages modifiées dans l'espace d'échange de mémoire du système) fait partie des opérations normales d'un système, il est possible que le swapping devienne trop important. Il est important de faire attention à un swapping excessif car la situation suivante peut facilement se produire de façon répétée :

Si cette série d'événements est répandue, elle porte le nom de thrashing (ou écroulement) et indique que la quantité de mémoire vive est insuffisante pour faire face à la charge de travail actuelle. L'écroulement a un impact extrêmement négatif sur la performance du système dans la mesure où le CPU et les charges d'E/S qui peuvent résulter d'une telle situation dépassent rapidement la charge imposée par le travail proprement dit d'un système. Dans des cas extrêmes, il est possible que le système n'effectue aucun travail utile et monopolise toutes ses ressources pour le déplacement de pages depuis la mémoire et vers la mémoire.