Volcado de memoria

Ajustar Compartir Imprimir Citar

En informática, un volcado de núcleo, volcado de memoria, volcado de emergencia, volcado de almacenamiento, volcado del sistema, o volcado ABEND consiste en el estado registrado de la memoria de trabajo de un programa de computadora en un momento específico, generalmente cuando el programa se bloqueó o finalizó de manera anormal. En la práctica, otras piezas clave del estado del programa generalmente se descargan al mismo tiempo, incluidos los registros del procesador, que pueden incluir el contador del programa y el puntero de la pila, la información de administración de la memoria y otros indicadores e información del sistema operativo y del procesador. Un volcado de instantánea (o volcado de instantánea) es un volcado de memoria solicitado por el operador de la computadora o por el programa en ejecución, después de lo cual el programa puede continuar. Los volcados del núcleo se utilizan a menudo para ayudar a diagnosticar y depurar errores en los programas informáticos.

En muchos sistemas operativos, una excepción fatal en un programa desencadena automáticamente un volcado del núcleo. Por extensión, la frase "to dump core" ha venido a significar en muchos casos, cualquier error fatal, independientemente de que exista un registro de la memoria del programa. El término "volcado de memoria", "volcado de memoria" o simplemente "volcado" también se ha convertido en jerga para indicar cualquier salida de una gran cantidad de datos sin procesar para un examen más detallado u otros fines.

Antecedentes

El nombre proviene de la memoria de núcleo magnético, la principal forma de memoria de acceso aleatorio desde la década de 1950 hasta la década de 1970. El nombre se ha mantenido mucho tiempo después de que la tecnología de núcleo magnético quedara obsoleta.

Los primeros volcados del núcleo eran copias impresas en papel del contenido de la memoria, generalmente dispuestas en columnas de números octales o hexadecimales (un "volcado hexadecimal"), a veces acompañadas de sus interpretaciones como instrucciones en lenguaje de máquina, cadenas de texto, o números decimales o de punto flotante (cf. desensamblador).

A medida que aumentaba el tamaño de la memoria y se desarrollaban utilidades de análisis post-mortem, los volcados se escribían en medios magnéticos como cintas o discos.

En lugar de mostrar solo el contenido de la memoria aplicable, los sistemas operativos modernos suelen generar un archivo que contiene una imagen de la memoria que pertenece al proceso bloqueado, o las imágenes de la memoria de partes del espacio de direcciones relacionadas con ese proceso, junto con otra información, como los valores de los registros del procesador, el contador del programa, los indicadores del sistema y otra información útil para determinar la causa raíz del bloqueo. Estos archivos se pueden ver como texto, imprimir o analizar con herramientas especializadas como elfdump en Unix y sistemas similares a Unix, objdump y kdump en Linux, IPCS (Interactive Problem Control System) en IBM z/OS, DVF (Dump Viewing Facility) en IBM z/VM, WinDbg en Microsoft Windows, Valgrind u otros depuradores.

En algunos sistemas operativos, una aplicación o un operador pueden solicitar una instantánea de los bloques de almacenamiento seleccionados, en lugar de todo el almacenamiento utilizado por la aplicación o el sistema operativo.

Usos

Los volcados del núcleo pueden servir como útiles ayudas para la depuración en varias situaciones. En los primeros sistemas independientes o de procesamiento por lotes, los volcados del núcleo permitían a un usuario depurar un programa sin monopolizar la instalación informática (muy costosa) para la depuración; una copia impresa también podría ser más conveniente que la depuración usando los interruptores y las luces del panel frontal.

En equipos compartidos, ya sea de tiempo compartido, procesamiento por lotes o sistemas de servidor, los volcados de núcleo permiten la depuración fuera de línea del sistema operativo, de modo que el sistema pueda volver a funcionar de inmediato.

Los volcados de núcleo permiten a un usuario guardar un bloqueo para un análisis posterior o fuera del sitio, o para compararlo con otros bloqueos. Para las computadoras integradas, puede ser poco práctico admitir la depuración en la propia computadora, por lo que el análisis de un volcado puede realizarse en una computadora diferente. Algunos sistemas operativos, como las primeras versiones de Unix, no permitían adjuntar depuradores a los procesos en ejecución, por lo que era necesario volcar el núcleo para ejecutar un depurador en el contenido de la memoria de un proceso.

Los volcados del núcleo se pueden usar para capturar datos liberados durante la asignación de memoria dinámica y, por lo tanto, se pueden usar para recuperar información de un programa que ya no se está ejecutando. En ausencia de un depurador interactivo, un programador asiduo puede utilizar el volcado del núcleo para determinar el error a partir de un examen directo.

Los volcados instantáneos a veces son una forma conveniente para que las aplicaciones registren resultados de depuración rápidos y sucios.

Análisis

Un volcado de núcleo generalmente representa el contenido completo de las regiones volcadas del espacio de direcciones del proceso volcado. Según el sistema operativo, el volcado puede contener pocas o ninguna estructura de datos para facilitar la interpretación de las regiones de memoria. En estos sistemas, la interpretación exitosa requiere que el programa o el usuario que intenta interpretar el volcado comprenda la estructura del uso de la memoria del programa.

Un depurador puede usar una tabla de símbolos, si existe, para ayudar al programador a interpretar volcados, identificando variables simbólicamente y mostrando el código fuente; si la tabla de símbolos no está disponible, es posible una menor interpretación del volcado, pero aún puede haber suficiente para determinar la causa del problema. También hay herramientas especiales llamadas analizadores de volcados para analizar volcados. Una herramienta popular, disponible en muchos sistemas operativos, es GNU binutils' objdump.

En los sistemas operativos modernos similares a Unix, los administradores y programadores pueden leer archivos de volcado del núcleo mediante la biblioteca de descriptores de archivos binarios (BFD) Binutils de GNU y el depurador de GNU (gdb) y objdump que utilizan esta biblioteca. Esta biblioteca proporcionará los datos sin procesar para una dirección dada en una región de memoria desde un volcado de núcleo; no sabe nada sobre variables o estructuras de datos en esa región de memoria, por lo que la aplicación que usa la biblioteca para leer el volcado del núcleo tendrá que determinar las direcciones de las variables y determinar el diseño de las estructuras de datos en sí, por ejemplo, usando la tabla de símbolos para el programa en proceso de depuración.

Los analistas de volcados de memoria de sistemas Linux pueden usar kdump o Linux Kernel Crash Dump (LKCD).

Los volcados del núcleo pueden guardar el contexto (estado) de un proceso en un estado determinado para volver a él más tarde. Los sistemas pueden tener una alta disponibilidad mediante la transferencia del núcleo entre procesadores, a veces a través de los propios archivos de volcado del núcleo.

El núcleo también se puede volcar en un host remoto a través de una red (lo cual es un riesgo de seguridad).

Archivos de volcado del núcleo

Formato

En sistemas operativos más antiguos y simples, cada proceso tenía un espacio de direcciones contiguo, por lo que un archivo de volcado a veces era simplemente un archivo con la secuencia de bytes, dígitos, caracteres o palabras. En otras máquinas anteriores, un archivo de volcado contenía registros discretos, cada uno con una dirección de almacenamiento y los contenidos asociados. En las primeras máquinas, el volcado a menudo lo escribía un programa de volcado independiente en lugar de la aplicación o el sistema operativo.

En IBM System/360, los sistemas operativos estándar escribieron volcados ABEND y SNAP formateados, con las direcciones, registros, contenido de almacenamiento, etc., todo convertido en formularios imprimibles. Las versiones posteriores agregaron la capacidad de escribir volcados sin formato, llamados en ese momento volcados de imagen central.

En los sistemas operativos modernos, el espacio de direcciones de un proceso puede contener lagunas y puede compartir páginas con otros procesos o archivos, por lo que se utilizan representaciones más elaboradas; también pueden incluir otra información sobre el estado del programa en el momento del volcado.

En los sistemas similares a Unix, los volcados del núcleo generalmente usan el formato de imagen ejecutable estándar:

Nombramiento

OS / 360 y sucesoras

(feminine)

Como Unix

Otros

Volcados de memoria de Windows

Microsoft Windows admite dos formatos de volcado de memoria, que se describen a continuación.

Volcados de modo kernel

Hay cinco tipos de volcados en modo kernel:

Para analizar los volcados en modo kernel de Windows, se utilizan herramientas de depuración para Windows.

Volcados de memoria en modo usuario

El volcado de memoria en modo usuario, también conocido como minivolcado, es un volcado de memoria de un solo proceso. Contiene registros de datos seleccionados: memoria de proceso completa o parcial (filtrada); lista de los subprocesos con sus pilas de llamadas y estado (como registros o TEB); información sobre los identificadores de los objetos del núcleo; lista de bibliotecas cargadas y descargadas. Lista completa de opciones disponibles en la enumeración MINIDUMP_TYPE.

Misiones espaciales

El programa Voyager de la NASA fue probablemente la primera nave en utilizar de forma rutinaria la función de volcado de núcleo en el segmento de espacio profundo. La función de volcado del núcleo es una función de telemetría obligatoria para el segmento de espacio profundo, ya que se ha demostrado que minimiza los costos de diagnóstico del sistema. La nave Voyager utiliza volcados de núcleo de rutina para detectar daños en la memoria causados por eventos de rayos cósmicos.

Los sistemas de volcado de núcleo de Space Mission se basan principalmente en kits de herramientas existentes para la CPU o el subsistema de destino. Sin embargo, durante la duración de una misión, el subsistema de volcado del núcleo puede modificarse o mejorarse sustancialmente para las necesidades específicas de la misión.