2ème partie
Dans notre numéro de novembre, nous avons commencé cette série en deux parties
sur la gestion de la mémoire dans Windows NT en introduisant le concept de mémoire
virtuelle. Nous avons vu l'utilisation par le processeur d'un système de traduction
d'adresses virtuelles en adresses physiques à deux niveaux. Nous avons évoqué
la pagination et deux puissantes fonctions du Gestionnaire de mémoire : le mapping
de fichiers en mémoire et la mémoire copy-on-write.
Ce mois-ci nous allons détailler encore les structures de données internes utilisées
par le Gestionnaire de mémoire pour faire le suivi de l'état de la mémoire. Nous
évoquerons les working sets et la base de données PFN (Page Frame Number). Nous
terminerons par une exploration d'autres structures de données utilisées par le
Gestionnaire de mémoire pour faire le suivi de la mémoire partagée par deux ou
plusieurs applications, et nous aborderons les Objets de section, structures de
données utilisées par la base de données PFN pour mettre en oeuvre le mapping des
fichiers en mémoire.
Au coeur de la gestion de la mémoire sous Windows NT (II)
L’incidence la plus forte du Gestionnaire de mémoire sur les performances des
applications et du système résulte de sa capacité à allouer de la mémoire physique
à chaque processus actif. La quantité de mémoire affectée par le Gestionnaire
de mémoire à un processus s’appelle le working set. Chaque processus en a un.
Un working set spécial, baptisé working set système, représente la mémoire physique
appartenant à des parties de l’Executive NT, aux drivers de périphériques et au
Gestionnaire de cache.
S’il a un working set trop petit, un processus risque de provoquer un nombre élevé
d’erreurs de page lorsqu’il accède aux pages des tables décrivant les données
non présentes en mémoire mais situées soit dans l’image exécutable du processus
sur le disque, soit dans le fichier de pagination. A chacun de ces accès le Gestionnaire
de mémoire doit intervenir et effectuer des E/S de disque pour récupérer les données.
S’il a un working set trop grand, le processus n’encourt pas d’erreur de page,
mais sa mémoire physique risque de contenir des données auxquelles le processus
n’accèdera pas pendant quelque temps et dont d’autres processus pourraient avoir
besoin.
C’est pourquoi, le Gestionnaire de mémoire doit essayer d’atteindre un équilibre
pour tous les processus en fonction de leurs modes d’utilisation de la mémoire.
Windows NT offre deux politiques de gestion de mémoire : l’extraction
de page et le remplacement de page
Windows NT offre deux politiques de gestion de mémoire : l’extraction de page
(page fetch policy) et le remplacement de page (page replacement policy).
Le choix de l’une ou l’autre de ces politiques affecte le mode de gestion des
working sets. La politique d’extraction de page est la méthode utilisée par NT
pour mettre en mémoire les données d’un processus. Windows NT utilise la politique
d’extraction de page la plus commune, la pagination à la demande (demand paging).
Dans cette politique, les données d’un processus sont chargées lorsqu’un processus
y accède.
Il existe une politique d’extraction de page différente, dite de pré-extraction
(prefetching) qui oblige le Gestionnaire de mémoire à mettre les données
d’un processus en mémoire, avant que celui-ci ne les demande. La pré-extraction
peut améliorer les performances d’une application au détriment d’autres applications
car la prévision, par le Gestionnaire de mémoire des données nécessaires à un
processus, risque d’être imparfaite.
On risque ainsi de gaspiller de la mémoire physique en stockant des données inutiles.
Windows NT met donc en oeuvre une légère variante de la pagination à la demande
: la pagination sur demande groupée (clustered demand paging). Au lieu
de ne mettre dans le working set d’un processus que la page à laquelle le processus
accède, le Gestionnaire de mémoire tente de mettre les pages entourant celle qui
est demandée. Cette méthode repose sur l’idée que si un processus accède à une
page, il accède aussi probablement à la mémoire qui la précède ou la suit immédiatement.
Les pages que le Gestionnaire de mémoire met en mémoire forment donc un groupe
(cluster). Dans NT les groupes peuvent aller de 0 à 7 pages, en fonction
de la quantité de mémoire physique du système et de l’accès ou non par le système
au code ou aux données.La politique de remplacement de page guide le Gestionnaire
de mémoire pour décider de la page à supprimer.
Le Gestionnaire de mémoire doit, en effet, supprimer des pages, chaque fois que
la mémoire physique est remplie de pages en cours d’utilisation et qu’il faut
de l’espace pour accueillir une nouvelle page de données à laquelle un processus
est en train d’accéder. Les politiques de remplacement peuvent être qualifiées
de globales ou de locales. Avec une politique globale, le Gestionnaire
de mémoire considère toutes les pages de mémoire physique comme susceptibles d’être
remplacées, sans tenir compte du working set auquel elles appartiennent.
Dans une politique locale, il ne considère comme potentiellement remplaçables
que les pages du working set du processus qui est en train d’accéder à la page
à mettre ne mémoire. L’inconvénient d’une politique globale est qu’un processus
malicieux peut, en accédant à de grandes quantités de mémoire, avoir très rapidement
une incidence fâcheuse sur tous les autres processus du système en chassant de
force leurs données de la mémoire. Tout comme pour la politique d’extraction,
NT met en oeuvre une variante de cette politique.
Cette variante est locale, parce qu’elle considère d’abord les pages du working
set du processus qui accède aux données. Mais elle est aussi globale car elle
supprime des pages des working sets d’autres processus, si leurs besoins en mémoire
sont faibles.Les politiques de remplacement se caractérisent en outre par la méthode
qu’elles appliquent pour choisir une page à remplacer en dehors des pages locales
ou globales. Une politique, baptisée FIFO (first in first out ou premier entré,
premier sorti) supprime les pages dans l’ordre de leur ajout dans le working set.
Un autre algorithme a toutefois un effet plus positif sur les performances des
applications : c’est le LRU (least recently used ou algorithme d’ancienneté).
Celui-ci demande à la MMU (Memory Management Unit) d’indiquer au Gestionnaire
de mémoire si un processus a accédé récemment à une page particulière. L’algorithme
LRU remplace d’abord les pages auxquelles les processus n’ont pas accédé depuis
le plus longtemps. Sur les systèmes monoprocesseurs, Windows NT utilise l’algorithme
de l’horloge (clock algorithm), forme simplifiée du remplacement LRU basée sur
un suivi limité des accès assurés par la MMU.
Chaque fois qu’un processus fait référence à une page, la MMU définit un bit indicateur
Accédé dans les Tables des Valeurs de Page (TVP). Si le drapeau Accédé n’est pas
activé, le Gestionnaire de mémoire sait qu’aucun processus n’a accédé à la page
depuis la dernière fois qu’il a examiné la TVP.Le working set de chaque processus,
y compris celui du système, a une taille minimale, une taille courante et une
taille maximale.
Sur un système NT typique doté de 64 Mo de mémoire physique, la taille minimale
par défaut est de 200 Ko et la taille maximale par défaut de 1,4 Mo. Les processus
disposant du privilège PROCESS_SET_QUOTA peuvent dépasser ces valeurs au moyen
de l’API Win32. Au démarrage, un processus génère un grand nombre d’erreurs de
page lorsqu’il fait référence aux données de la cartographie de mémoire virtuelle
(il s’agit le plus souvent d’une image exécutable) qu’il doit mettre en mémoire
physique.
Le Gestionnaire de mémoire permet à la taille courante du working set d’un processus
d’augmenter si nécessaire jusqu’à son maximum. Lorsqu’un working set a atteint
sa taille maximale, le Gestionnaire de mémoire n’autorise l’entrée de pages supplémentaires
que si beaucoup de pages libres (non utilisées) sont disponibles. Dans le cas
contraire, le Gestionnaire de mémoire applique la politique de remplacement que
je viens de décrire pour déterminer la page du working set à remplacer.
Les pages du working set sont rassemblées dans une liste que parcourt le Gestionnaire
de mémoire. Sur un système monoprocesseur, si le Gestionnaire de mémoire trouve
une page avec le drapeau Accédé, il supprime le drapeau et passe aux pages suivantes,
en sélectionnant pour le remplacement celles dont le drapeau Accédé a été supprimé.
Il évite ainsi les pages auxquelles le processus a accédé depuis sa précédente
recherche, car il suppose qu’il risque d’y accéder de nouveau.
Si le Gestionnaire de mémoire ne trouve pas de pages à sélectionner pour le remplacement,
il recommence à parcourir la liste et trouve presque à coup sûr une page dont
il a supprimé l’indicateur Accédé lors d’une précédente lecture et à laquelle
le processus n’a pas accédé depuis lors.
Le Gestionnaire de mémoire examine également tous les working sets pour
déterminer si le thread du Balance Set Manager doit les réduire
Sur un système multiprocesseur, le Gestionnaire de mémoire ne supprime pas les
drapeaux Accédés pendant les lectures, car toute modification d’une TVP sur un
multiprocesseur invalide les valeurs du TLB (Translation Look-aside Buffer, décrit
le mois dernier) sur tous les processeurs.
Si le Gestionnaire de mémoire invalide la traduction en mémoire cache d’une adresse,
en supprimant son drapeau Accédé, celle-ci doit de nouveau repasser par les trois
longues étapes de traduction en mémoire virtuelle lors du prochain appel d’un
processus. Résultat, sur les multiprocesseurs l’algorithme de remplacement de
page est effectivement aléatoire. Microsoft développe des algorithmes de remplacement
plus efficaces pour la version multiprocesseur de Windows 2000.
Téléchargez cette ressource
Travail à distance – Guide complet pour les Directions IT et Métiers
Le travail à distance met à l'épreuve la maturité numérique des entreprises en termes de Cybersécurité, d'espace de travail, de bien-être des collaborateurs, de communication et gestion de projet à distance. Découvrez, dans ce nouveau Guide Kyocera, quels leviers activer prioritairement pour mettre en place des solutions de travail à domicile efficaces, pérennes et sécurisées.