Administrador de tareas: ¿Tamaño de máquina virtual más pequeño que el uso de Mem?

4

El Administrador de tareas de Windows XP puede mostrar dos columnas diferentes con respecto al uso de memoria de los procesos. Uno es Mem Usagey el otro es VM Size(no se muestra de forma predeterminada, debe activarlo).

Por lo que he reunido, VM sizees el tamaño de todo el espacio de memoria ocupado por el proceso, y Mem Usagees la cantidad de memoria actualmente comprometida y utilizada. Este supuesto es verificado por la mayoría de los procesos cuando VM Sizees solo un poco más grande que Mem Usage. Por ejemplo, mi Outlook actualmente tiene 79.724 K VM Sizey 56.600 K en Mem Usage.

Pero no para otros procesos, tales como Firefox, que actualmente cuenta con 171.900 K para Mem Usagey sólo 156.440 K en VM Size. ¿Cómo puede un proceso usar más memoria que la cantidad de memoria virtual asignada?

Entonces, tal vez mi interpretación de estas columnas es incorrecta. ¿Qué quieren decir realmente?

shoosh
fuente

Respuestas:

1

De los temas de Ayuda del Administrador de tareas de Windows XP:

Uso de memoria
En el Administrador de tareas, el conjunto de trabajo actual de un proceso, en kilobytes. El conjunto de trabajo actual es el número de páginas que actualmente residen en la memoria. En la pestaña Procesos del Administrador de tareas, el encabezado de la columna es Uso de memoria.

Tamaño de memoria virtual
En el Administrador de tareas, la cantidad de memoria virtual, o espacio de direcciones, comprometida con un proceso. En la pestaña Procesos del Administrador de tareas, el encabezado de la columna es Tamaño de máquina virtual.

Entonces, Mem Usage es la cantidad de RAM física actualmente asignada a un proceso, y VM Size es la cantidad de memoria virtual (basada en disco) actualmente asignada a un proceso.

Estos dos contadores son independientes, aunque un proceso que muestra un número alto en uno generalmente mostrará un número alto para el otro. Es solo que no hay una relación específica entre los dos.

boot13
fuente
0

La definición de "memoria virtual" se basa en la redefinición del espacio de direcciones con direcciones de memoria virtual contiguas para "engañar" a los programas y hacerles creer que están utilizando grandes bloques de direcciones contiguas. fuente

Entonces, a veces puede haber cosas de pestañas antiguas en el espacio de direcciones de VM. Por ejemplo, tengo 50 pestañas abiertas en mi sesión de navegador en este momento. Si hago clic en la primera pestaña, lo más probable es que esté en la VM esperando a que lo llamen. Por lo tanto, tomará un segundo dibujar en la pantalla. Empiezo a escuchar que el disco duro se agita mientras saca esa pestaña de VM

Si ese no es el caso. Puede ser que FF esté perdiendo memoria o que una extensión sea el culpable. Tuve un problema como el del complemento del reproductor web divx en una versión beta de firefox.

Kelbizzle
fuente
0

La única explicación que veo es la fragmentación de la memoria. Cuando el proceso asigna 1 octeto, cuenta para 1 octeto en el tamaño de VM. Pero este 1 octeto ocupa una página de la memoria física: para el sistema operativo Windows, una página es 4K. Entonces, si la memoria del proceso está fragmentada y usa muchos bloques pequeños, puede conducir a un uso de memoria física enorme en comparación con el tamaño de memoria real asignado.


fuente
@ user30375 Lo siento, pero no es así como funciona. Ciertamente puede llamar a malloc o HeapAlloc por un byte, pero esas llamadas funcionan dentro del vas ya asignado para el montón de proceso. (En realidad, las asignaciones de almacenamiento dinámico siempre se redondean al menos a 8 bytes iirc, pero eso no cambia esta explicación). Si el almacenamiento dinámico tiene suficiente espacio libre para satisfacer esa solicitud, entonces el "tamaño de VM" no cambia en absoluto. Si no es así, el administrador de almacenamiento dinámico asigna más confirmación privada para usted con VirtualAlloc, y eso siempre ocurre en fragmentos del tamaño de una página.
Jamie Hanrahan
0

Lo sentimos, pero todas estas respuestas fallan.

La respuesta corta: la VM sizecolumna no refleja el espacio total de direcciones virtuales ("vas") definido por el proceso. Es solo un subconjunto de eso. Específicamente, es el espacio de direcciones "privado comprometido" (también conocido como "cargo de compromiso" del proceso).

Mientras que la Mem Usagecolumna muestra el subconjunto del espacio total de direcciones virtuales del proceso que es "válido" para el proceso, es decir, se puede acceder sin incurrir en un error de página.

(Es común, pero impreciso, decir que es el subconjunto que está "en RAM". "Válido", es decir, en el conjunto de trabajo del proceso, significa que está en la memoria y se puede acceder sin incurrir en un fallo de página. Pero debido a la acción de las memorias caché de página (listas de páginas en espera y modificadas), más memoria compartida, generalmente hay un poco del proceso que está en la RAM pero requiere un error de página para acceder ... pero será un error de página "suave" , es decir, uno que no implique E / S de disco. Una vez resuelta, la página se encuentra en el conjunto de trabajo del proceso y las referencias adicionales no generarán fallas ... a menos que se elimine posteriormente del conjunto de trabajo).

Entonces, si VM sizeno es todo el tamaño virtual del proceso, ¿dónde está el resto? El otro contribuyente importante al espacio total de direcciones virtuales de un proceso es el espacio de direcciones mapeado . La diferencia entre ellos es que el compromiso privado es vas: de ahora en adelante lo llamaré privado; no existe el privado no comprometido: está respaldado por el archivo de paginación, mientras que el vas mapeado está respaldado por los archivos a los que está mapeado.

"Respaldado por" significa que la parte que no se puede guardar en la RAM se guarda en esos archivos.

También hay espacio virtual no paginado (muy pequeño) y, posiblemente, memoria "mapeada físicamente" (muy poco utilizada).

El total de todos estos podría denominarse el espacio de direcciones virtuales accesible total del proceso, porque se puede hacer referencia a todo sin incurrir en una infracción de acceso a la memoria (pero, para las partes paginables, podría incurrir en un error de página, pero eso no ' t significa que no son accesibles; solo significa que el primer acceso lleva un poco más de tiempo).

Las dos primeras partes, espacio de direcciones privadas asignadas y asignadas, podrían denominarse espacio total de direcciones virtuales paginables .

La Mem Usagecolumna debería haberse llamado "Conjunto de trabajo (total)". Normalmente será más pequeño que el total de páginas paginables Desafortunadamente, el Administrador de tareas de XP no tiene un contador para este último. Pero de todos modos, la Mem Usagecolumna muestra cuánto del espacio total de direcciones virtuales paginables puede ser referenciado por el proceso sin incurrir en un error de página. Parte de esto serán páginas físicas asociadas con páginas privadas comprometidas, y algunas con páginas asignadas.

Si el administrador de tareas de XP tuviera algunas columnas más disponibles, vería las relaciones que espera ver: el total de páginas paginables (para las cuales ahora no hay un contador) nunca debería ser más pequeño que el conjunto de trabajo total (llamado Mem Usageen XP); y el vas privado comprometido nunca debe ser más pequeño que la parte privada del conjunto de trabajo del proceso.

El administrador de tareas en versiones posteriores de Windows tiene algunos más de estos contadores. La herramienta Process Explorer de Sysinternals tiene aún más. En el Explorador de procesos:

"Conjunto de trabajo" es el conjunto de trabajo total del proceso

"WS Shareable" es el subconjunto del total que se comparte potencialmente con otros procesos (es un subconjunto del vas mapeado)

"WS Shared" es el subconjunto de "WS Shareable" que en realidad se comparte con otros procesos, es decir, también se encuentra en los conjuntos de trabajo de otros procesos.

"WS Private" es el subconjunto de "Conjunto de trabajo" que no se puede compartir con otros procesos. Está asociado y es un subconjunto del proceso privado comprometido del proceso.

"Bytes privados" es el vas comprometido privado del proceso. Notarás que siempre es más grande que "WS Private", que es la relación que estás buscando.

"Tamaño virtual" es la cantidad total de vas no libres en el proceso. Esto incluye vas privados y compartidos, pero también espacio de direcciones "reservado". "Reservado" no es accesible, casi no ocupa espacio físico en ningún lugar, pero reserva rangos de direcciones virtuales. No incluye regiones asignadas físicamente (también conocida como memoria "AWE"). En x64 con Win 8.1 y versiones posteriores, también puede incluir un área gigantesca (2,147,483,648 K, o 2 TiB) reservada para una nueva característica llamada "Control Flow Guard". Para obtener información al respecto, consulte esta entrada en el blog de Alex Ionescu .

Jamie Hanrahan
fuente
Ha utilizado la abreviatura 'vas' a lo largo de su respuesta sin definirla. Sería útil si pudieras hacer eso.
boot13
Suponiendo que tiene razón, y mi respuesta 'falla', me pregunto si podría señalar exactamente dónde la ayuda del Administrador de tareas es incorrecta. Supongo que no tiene mucho sentido informar un problema de documentación en Windows XP a Microsoft, pero sería bueno saber exactamente qué se equivocaron allí.
boot13
@ boot13 Tengo que preguntar por qué me pediste que lo definiera, luego edité mi respuesta para eliminar la definición que agregué.
Jamie Hanrahan
Sí, eso también lo noté. No lo hice intencionalmente. Los dos estábamos editando al mismo tiempo. ¡Pero pensé que eso no debía suceder con los sitios de Stack Exchange! De todos modos, lo siento, no fue intencional.
boot13
Usted escribió "Tamaño de VM en el Administrador de tareas, la cantidad de memoria virtual, o espacio de direcciones, comprometida con un proceso. El Tamaño de VM es la cantidad de memoria virtual (basada en disco) actualmente asignada a un proceso. Pero no lo es. Es solo el privado comprometido. El mapeado también se considera "comprometido" (y ciertamente está respaldado por disco; mientras que el privado confirmado solo está respaldado por disco si hay un archivo de paginación). Y re "Mem Usage es la cantidad de RAM asignada actualmente a un proceso " , no todo está asignado exclusivamente al proceso, pero eso es lo que la mayoría piensa cuando escuchan esa palabra.
Jamie Hanrahan
-1

Solo adivinando, ¿pueden ser bloques de memoria compartidos que fueron asignados por Firefox, luego entregados a alguna otra tarea y no asignados por FF pero que todavía se consideran propiedad de él?

Whitequark
fuente
-1

El tamaño de VM en el administrador de tareas se refiere a la cantidad de paginación a la memoria virtual real (archivo de intercambio) en el disco. Linky

JNK
fuente
Lo siento, pero no. Si esto fuera cierto, la columna "Tamaño de VM" siempre sería cero en los sistemas que no tienen un archivo de paginación. Pero no lo es. El artículo que vinculó es totalmente incorrecto.
Jamie Hanrahan