Partager via


Plage de travail

L’ensemble de travail d’un processus est l’ensemble de pages dans l’espace d’adressage virtuel du processus qui résident actuellement dans la mémoire physique. Le jeu de travail contient uniquement des allocations de mémoire paginables ; Les allocations de mémoire non paginables telles que les extensions de fenêtrage d’adresses (AWE) ou les allocations de pages volumineuses ne sont pas incluses dans l’ensemble de travail.

Lorsqu’un processus fait référence à une mémoire paginable qui n’est pas actuellement dans son jeu de travail, une erreur de page se produit. Le gestionnaire d’erreurs de page système tente de résoudre l’erreur de page et, si elle réussit, la page est ajoutée à l’ensemble de travail. (L’accès à AWE ou aux allocations de pages volumineuses ne provoque jamais une erreur de page, car ces allocations ne peuvent pas être paginables.)

Une erreur de page matérielle doit être résolue en lisant le contenu de la page à partir du magasin de stockage de la page, qui est le fichier de pagination système ou un fichier mappé en mémoire créé par le processus. Une erreur de page réversible peut être résolue sans accéder au magasin de stockage. Une erreur de page logicielle se produit lorsque :

  • La page se trouve dans l’ensemble de travail d’un autre processus, donc elle est déjà résidente en mémoire.
  • La page est en transition, car elle a été supprimée des ensembles de travail de tous les processus qui utilisaient la page et n’a pas encore été réaffectée, ou elle est déjà résidente à la suite d’une opération de prérécupération du gestionnaire de mémoire.
  • Un processus fait référence à une page virtuelle allouée pour la première fois (parfois appelée erreur de demande zéro).

Les pages peuvent être supprimées d’un jeu de travail de processus à la suite des actions suivantes :

  • Le processus réduit ou vide l’ensemble de travail en appelant la fonction SetProcessWorkingSetSize, SetProcessWorkingSetSizeEx ou EmptyWorkingSet .
  • Le processus appelle la fonction VirtualUnlock sur une plage de mémoire qui n’est pas verrouillée.
  • Le processus annule le mappage d’une vue mappée d’un fichier à l’aide de la fonction UnmapViewOfFile .
  • Le gestionnaire de mémoire supprime les pages du groupe de travail pour créer plus de mémoire disponible.
  • Le gestionnaire de mémoire doit supprimer une page du jeu de travail pour faire de la place pour une nouvelle page (par exemple, parce que le jeu de travail est à sa taille maximale).

Si plusieurs processus partagent une page, la suppression de la page de l’ensemble de travail d’un processus n’affecte pas les autres processus. Une fois qu’une page a été supprimée des ensembles de travail de tous les processus qui l’utilisaient, la page devient une page de transition. Les pages de transition restent mises en cache dans la RAM jusqu’à ce que la page soit référencée à nouveau par un processus ou réaffectée (par exemple, remplies de zéros et données à un autre processus). Si une page de transition a été modifiée depuis sa dernière écriture sur le disque (autrement dit, si la page est « sale »), la page doit être écrite dans son magasin de stockage avant de pouvoir être réaffectée. Le système peut commencer à écrire sale pages de transition dans son magasin de stockage dès que ces pages sont disponibles.

Chaque processus a une taille de groupe de travail minimale et maximale qui affecte le comportement de pagination de la mémoire virtuelle du processus. Pour obtenir la taille actuelle du jeu de travail d’un processus spécifié, utilisez la fonction GetProcessMemoryInfo . Pour obtenir ou modifier les tailles minimales et maximales des ensembles de travail, utilisez les fonctions GetProcessWorkingSetSizeEx et SetProcessWorkingSetSizeEx .

Le processus status’interface de programmation d’application (PSAPI) fournit un certain nombre de fonctions qui retournent des informations détaillées sur l’ensemble de travail d’un processus. Pour plus d’informations, consultez Informations sur l’ensemble de travail.