<< Chapter < Page Chapter >> Page >

Además de tener un impacto negativo en el rendimiento debido a las fallas de cache, el sistema de memoria virtual puede disminuir la velocidad de ejecución de su programa, si es demasiado grande para caber en la memoria del sistema, o está compitiendo con otros trabajos grandes por usar una memoria escasa.

En la mayoría de las implementaciones de UNIX, el sistema operativo descarga automáticamente al área de intercambio parte de las páginas de aquellos programas demasiado grandes para caber en la memoria disponible. No arrojan el programa completo; sólo sucede cuando la memoria está completamente justa, o cuando su programa ha estado inactivo durante un rato. En tal caso, algunas páginas individuales se ponen en el área de intercambio para su recuperación posterior. En primer término, debe usted estar consciente de que esto está sucediendo, si es que todavía no se ha percatado. Y en segundo término, si está pasando, los patrones de acceso a memoria se tornan críticos. Cuando las referencias sean muy dispersas, su tiempo de ejecución quedará dominado completamente por la E/S a disco.

Si lo planea con anticipación, puede hacer que un sistema de memoria virtual trabaje para usted cuando su programa sea demasiado grande para alojarse en la memoria física de la máquina. Las técnicas son exactamente las mismas que las empleadas para afinar una aplicación sin espacio en memoria principal administrada por software, o bucles anidados. Consiste en "bloquear" las referencias a memoria, de forma que los datos consumidos en los vecinos usen una mayor porción de cada página de memoria virtual antes de regresarla a disco para hacer espacio para otra. Examinamos las técnicas para bloqueos en el [link] Capítulo 8.

Calibrando el tamaño de su programa y el tamaño de la memoria

¿Cómo puede asegurar que se ha quedado sin espacio en memoria principal? Hay varias formas de comprobar la paginación en la máquina, pero tal vez la prueba más sencilla es comparar el tamaño de su programa con la cantidad de memoria disponible. Esto se hace mediante el comando size :


% size myprogram

En una máquina con UNIX Sistema V, la salida será similar a la siguiente:


53872 + 53460 + 10010772 = 10118104

En un sistema derivado del UNIX de Berkeley, se verá similar a:


text data bss hex decimal 53872 53460 10010772 9a63d8 10118104

Los tres primeros campos describen la cantidad de memoria necesaria para tres porciones distintas de su programa. La primera, el segmento de texto, contabiliza las instrucciones de máquina que forman su programa. La segunda, el segmento de datos, incluye los valores inicializados en su programa, tales como los contenidos de las sentencias de datos, bloques comunes, externos, cadenas de caracteres, etc. El tercer componente, bss (block started by symbol), usualmente es el mayor. Describe un área de datos sin inicializar en su programa. Esta área está formada de bloques comunes que no están ocupados por un bloque de datos. El último campo es la suma de las tres secciones, en bytes. Advertencia: El comando size no le da una panorámica completa si su programa aparta memoria dinámicamente, o mantiene datos en la pila. Esta área es especialmente importante para los programas en C y FORTRAN que crean arreglos grandes que no están en la sección COMMON.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Cómputo de alto rendimiento. OpenStax CNX. Sep 02, 2011 Download for free at http://cnx.org/content/col11356/1.2
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Cómputo de alto rendimiento' conversation and receive update notifications?

Ask