Introducción a los volcados de memoria en Windows
Un volcado de memoria, o memory dump en inglés, es una instantánea del estado interno de un programa, ya sea una aplicación en modo usuario o el núcleo del sistema operativo. En otros sistemas se emplea más el término core dump con un significado similar o equivalente. El estado interno comprende, entre otros, los valores de los registros "visibles" del procesador y porciones significativas del espacio de direcciones de memoria que incluyen código, datos y pila.
Los volcados de memoria se pueden clasificar atendiendo al tipo de información capturada o a su extensión (nivel de detalle). Así podemos tener volcados de memoria de una aplicación o del sistema, y volcados pequeños, completos o solamente del núcleo del sistema operativo.
Nota: lo siguiente se aplica a la familia Windows NT, especialmente a Windows 2000 y sus sucesores. Quedan excluidos Windows 95, Windows 98 y Windows Millennium: estos sistemas incluyen una herramienta de diagnóstico de errores de aplicación denominada Dr. Watson que no tiene nada que ver con la de los sistemas Windows NT. Véanse KB185837 y KB275481 para obtener más información.
Volcados de memoria de aplicación
La familia Windows NT incorpora el programa Dr. Watson, un tipo de herramienta que se conoce como depurador Just-In-Time (JIT) o post-mortem. Dr. Watson entra en acción cuando una aplicación encuentra un error, típicamente una infracción de acceso a memoria, para el que no tiene previsto un gestor de excepciones. Dr. Watson crea un archivo en el que registra diversa información técnica sobre el error y captura el estado interno de la aplicación en un volcado de memoria (archivo User.dmp) para un análisis posterior.
Se puede encontrar más información sobre Dr. Watson en KB103861, KB308538, El Just-In-Time Debugger... (por Rodrigo Corral), Ese "extraño" mensaje: La memoria no se puede "read" (por Daniel Martín) y otros muchos sitios, incluyendo la propia ayuda de Windows.
Microsoft también proporciona herramientas más avanzadas, como User Mode Process Dump o ADPlus (véase KB286350), que permiten generar volcados de memoria de aplicaciones, verdaderas instantáneas de ejecución, de forma automatizada o interactiva (por línea de comandos). Esto puede ser útil para diagnosticar bloqueos y otras situaciones anómalas sin tener que interrumpir bruscamente dichas aplicaciones.
Volcados de memoria del sistema
Los sistemas operativos más comunes, con ayuda de la plataforma hardware subyacente, contemplan al menos dos modos de ejecución fundamentales: modo núcleo (o kernel) y modo usuario. El núcleo del sistema y los controladores de dispositivo se ejecutan en modo núcleo, por lo que tienen acceso total a los recursos del equipo. Sin embargo, las aplicaciones se ejecutan en modo usuario, más restringido. El sistema operativo les expone un conjunto de interfaces de programación como único medio de interacción con él, impidiéndoles el acceso directo al hardware. En general el sistema no se viene abajo ante un fallo en modo usuario, sino que cesa su ejecución solamente la aplicación afectada.
Como ya hemos comentado, el modo núcleo carece de restricciones, por tanto cualquier fallo o descuido es potencialmente catastrófico. Si Windows detecta o es informado de una anomalía que no puede ignorar ni gestionar de ningún modo razonable, entonces muestra la temida pantalla azul de la muerte y se detiene. En otros sistemas operativos esta circunstancia recibe el nombre de kernel panic.
Windows puede generar tres tipos de volcados de memoria del sistema: pequeño (minidump), del núcleo o completo. La única opción antes de Windows 2000 era el volcado completo.
- El volcado pequeño es un archivo de 64 kilobytes en sistemas de 32 bits, o de 128 KB en sistemas de 64 bits. Contiene información muy básica sobre el problema sucedido y el estado del sistema, por lo que sólo aguanta análisis muy superficiales.
- El volcado del núcleo contiene las porciones del núcleo y los controladores que están presentes en la memoria física. Su tamaño es variable.
- El volcado completo recoge una instantánea de toda la memoria física. Esta opción no está disponible en sistemas de 32 bits que disponen de más de 2 GB de memoria física.
Se necesita disponer de un archivo de paginación en el volumen en que está instalado Windows y, además, proporcionarle un tamaño mínimo que sea suficiente para alojar un volcado del tipo configurado. La ubicación definitiva del volcado también deberá tener espacio libre de sobra.
De acuerdo con el artículo KB254649, los sistemas Windows clientes (Windows 2000 Professional y todas las ediciones Windows XP) vienen configurados para generar un volcado pequeño, mientras que los sistemas servidores (Windows Server 2003 y ediciones Server de Windows 2000) generan volcados completos de forma predeterminada. En sistemas de escritorio sugiero la configuración de volcado de memoria del núcleo sin reinicio automático: más detallado que el volcado pequeño, más reducido que el volcado completo, y con opción a leer el texto de la pantalla azul.
Una configuración sensata del volcado de memoria permitirá investigar y analizar STOPs, ya que es prácticamente imposible determinar la causa real mediante la simple observación de los datos técnicos de la pantalla azul y las circunstancias en que se produjo. Dichos análisis se llevarán a cabo con las herramientas del paquete Microsoft Debugging Tools for Windows, y en especial WinDBG.