2011-08-05 12 views
17

Estoy pensando en incluir las banderas PE IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP y IMAGE_FILE_NET_RUN_FROM_SWAP en mi ejecutable.¿Existen riesgos asociados con IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP o IMAGE_FILE_NET_RUN_FROM_SWAP?

La idea es evitar excepciones ocasionales vistas por los clientes que ejecutan el ejecutable desde la red, por ejemplo cuando los volúmenes de red no se vuelven a conectar después del reposo. Hasta ahora, siempre hemos aconsejado a los clientes que ejecuten ejecutables desde volúmenes conectados localmente.

Sin embargo, no sé lo suficiente acerca de la memoria virtual, el cargador, etc., para saber qué riesgos hay asociados con el uso de estos indicadores PE, si los hay.

Por ejemplo, si hago esto, mi ejecutable consumirá más memoria física, especialmente si hay varias instancias del ejecutable ejecutándose al mismo tiempo?

Lamento que no pueda dar más ejemplos de riesgos potenciales, pero esa es la naturaleza de mi pregunta. Tengo la sensación de que podría haber inconvenientes para hacer esto, pero simplemente no sé cuáles podrían ser esos inconvenientes.

+0

Debería hacer un arranque en frío más lento ya que todo el EXE se copia en el archivo de paginación. No tengo idea si Windows es lo suficientemente inteligente como para compartir páginas, lo dudo un poco. Process Explorer te dirá, mira Bytes privados. –

+0

@Hans ¿Se ha copiado el EXE en el archivo de paginación en carga, o las páginas se copian allí si están paginadas? ¿Y cómo interpretar Bytes privados? Soy realmente terriblemente ignorante del funcionamiento de la memoria virtual. –

+0

La operación de entrada de página es el problema, no la salida de página. Entonces, sí, todas las páginas deben copiarse para que puedan ser localizadas más tarde. Bytes privados es la cantidad de VM que no se puede compartir. –

Respuesta

11

El cargador de PE funciona en conjunto con el administrador de memoria virtual. En pocas palabras, su ejecutable no está tan cargado como paginado por demanda. Y, por supuesto, paginado por demanda. Como los ejecutables están bloqueados y no cambian, esto funciona bastante bien. No se necesita intercambio; RAM solo contiene las partes de MRU.

Las banderas PE cambian esto. Si se cumplen las condiciones, el ejecutable no está bloqueado y podría cambiar/desaparecer. Esto significa que VMM debe mantener todas sus páginas en RAM o swap, incluso al inicio. Eso es una gran cantidad de copia y uso de RAM, pero como resultado, la pérdida de la red ya no provoca fallas de entrada de página. Y cuando la memoria RAM es baja, las páginas no pueden descartarse, pero deben guardarse para intercambiar.

En particular, estos indicadores funcionan si y solo si se cumplen las condiciones. IMAGE_FILE_NET_RUN_FROM_SWAP no afecta a las aplicaciones que se ejecutan localmente. Entonces, los únicos clientes que pagan el precio en RAM/swap son aquellos que eligen hacerlo.

+1

Gracias por su respuesta. Mis pruebas parecen indicar que el ejecutable está bloqueado. No puedo borrarlo cuando se ejecuta en un volumen de red. ¿Hay implicaciones en el uso de la memoria física si se ejecutan varias instancias? Supongo que no, las páginas aún se comparten entre diferentes procesos. Si le entiendo correctamente, la única implicación en el rendimiento es que si el sistema operativo decide enviar una página del ejecutable, esas páginas se copian para intercambiarlas en lugar de simplemente descartarlas. –

+2

@DavidHeffernan La imagen se copió para intercambiar en el momento de la carga, no en el momento de la salida de la página. (Eso es una especie de punto de la bandera, después de todo.) Simplemente se descartan en el momento de la salida de la página, ya que ya hay una copia segura en el intercambio. –

+0

Gracias @Raymond. Creo que entiendo los problemas bastante bien ahora.Fundamentalmente, mi problema aquí es que mi comprensión del sistema de memoria virtual es incompleta. Debo desenterrar mi libro interno de Windows y retocarlo. –

Cuestiones relacionadas