Red Hat Enterprise Linux 3: Introduction à l'administration système | ||
---|---|---|
Précédent | Chapitre 4. Mémoire physique et mémoire virtuelle | Suivant |
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.
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 :
Trouver l'emplacement de la page recherchée sur le disque et la lire (c'est généralement le cas si le défaut de page se situe au niveau d'une page de code)
Confirmer que la page recherchée se trouve déjà dans la mémoire vive (mais n'est pas allouée au processus en cours) et reconfigurer le MMU de manière à ce qu'il renvoie bien à cette page
Renvoyer vers une page spéciale ne contenant rien d'autre que des zéros et allouer ensuite une page seulement si elle est modifiée (on parle alors d'une page copiée par écriture ou copy on write, une technique est souvent utilisée pour des pages des données initialisées avec des zéros)
Obtenir cette page d'un autre emplacement (un point que nous traiterons plus tard de manière détaillée)
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.
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 :
En enregistrant des pages modifiées dans un endroit particulier du périphérique de stockage de masse (auquel on fait généralement référence sous le terme d'espace d'échange ou de pagination, parfois aussi appelé swapping ou paging space)
En identifiant des page non modifiées comme étant des pages libres (il n'est pas nécessaire d'enregistrer ces pages sur un disque étant donné qu'elles n'ont pas été modifiées)
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.
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 :
Des pages d'un processus sont échangées
Le processus est en mesure d'être exécuté et tente d'accéder à une page échangée
La page est remise en mémoire (forçant probablement le déchargement des pages d'autres processus)
Un peu plus tard cette page est échangée à nouveau
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.
Précédent | Sommaire | Suivant |
Concepts élémentaires de la mémoire virtuelle | Niveau supérieur | Implications de la mémoire virtuelle au niveau de la performance |