Espacio de trabajo

El conjunto de trabajo de un proceso es el conjunto de páginas en el espacio de direcciones virtuales del proceso que actualmente residen en memoria física. El conjunto de trabajo solo contiene asignaciones de memoria paginables; Las asignaciones de memoria no paginables, como las extensiones de ventana de direcciones (AWE) o las asignaciones de páginas grandes no se incluyen en el conjunto de trabajo.

Cuando un proceso hace referencia a la memoria paginable que no está actualmente en su conjunto de trabajo, se produce un error de página . El controlador de errores de página del sistema intenta resolver el error de página y, si se ejecuta correctamente, la página se agrega al conjunto de trabajo. (El acceso a las asignaciones de páginas grandes o AWE nunca provoca un error de página, ya que estas asignaciones no son paginables).

Un error de página duro debe resolverse leyendo el contenido de la página del almacén de respaldo de la página, que es el archivo de paginación del sistema o un archivo asignado a memoria creado por el proceso. Se puede resolver un error de página temporal sin tener acceso al almacén de respaldo. Se produce un error de página temporal cuando:

  • La página está en el conjunto de trabajo de algún otro proceso, por lo que ya está residente en la memoria.
  • La página está en transición, ya que se ha quitado de los conjuntos de trabajo de todos los procesos que estaban usando la página y aún no se ha reasignado, o ya está residente como resultado de una operación de captura previa del administrador de memoria.
  • Un proceso hace referencia a una página virtual asignada por primera vez (a veces denominada error de demanda cero).

Las páginas se pueden quitar de un conjunto de trabajo de proceso como resultado de las siguientes acciones:

  • El proceso reduce o vacía el conjunto de trabajo llamando a la función SetProcessWorkingSetSize, SetProcessWorkingSetSizeEx o EmptyWorkingSet .
  • El proceso llama a la función VirtualUnlock en un intervalo de memoria que no está bloqueado.
  • El proceso desasigna una vista asignada de un archivo mediante la función UnmapViewOfFile .
  • El administrador de memoria recorta las páginas del conjunto de trabajo para crear más memoria disponible.
  • El administrador de memoria debe quitar una página del conjunto de trabajo para hacer espacio para una nueva página (por ejemplo, porque el conjunto de trabajo tiene su tamaño máximo).

Si varios procesos comparten una página, quitar la página del conjunto de trabajo de un proceso no afecta a otros procesos. Después de quitar una página de los conjuntos de trabajo de todos los procesos que lo estaban usando, la página se convierte en una página de transición. Las páginas de transición permanecen almacenadas en caché en la RAM hasta que algún proceso o se vuelve a asignar a la página (por ejemplo, rellenado con ceros y dado a otro proceso). Si se ha modificado una página de transición desde que se escribió por última vez en el disco (es decir, si la página está "desfasada"), la página debe escribirse en su almacén de respaldo antes de que se pueda reasignar. El sistema puede empezar a escribir páginas de transición desfasadas en su almacén de respaldo tan pronto como estas páginas estén disponibles.

Cada proceso tiene un tamaño mínimo y máximo del conjunto de trabajo que afecta al comportamiento de paginación de memoria virtual del proceso. Para obtener el tamaño actual del conjunto de trabajo de un proceso especificado, use la función GetProcessMemoryInfo . Para obtener o cambiar los tamaños mínimos y máximos del conjunto de trabajo, use las funciones GetProcessWorkingSetSizeEx y SetProcessWorkingSetSizeEx .

La interfaz de programación de aplicaciones de estado de proceso (PSAPI) proporciona una serie de funciones que devuelven información detallada sobre el conjunto de trabajo de un proceso. Para obtener más información, consulte Información del conjunto de trabajo.