En informática , un volcado de memoria , volcado de memoria , volcado de memoria por caída , volcado de almacenamiento , volcado de sistema o volcado ABEND [1] consiste en el estado registrado de la memoria de trabajo de un programa informático en un momento específico, generalmente cuando el programa se ha bloqueado o ha finalizado de forma anormal. [2] En la práctica, normalmente se vuelcan al mismo tiempo otras piezas clave del estado del programa , incluidos los registros del procesador , que pueden incluir el contador del programa y el puntero de pila , información de gestión de memoria y otros indicadores e información del procesador y del sistema operativo. Un volcado de instantánea (o volcado instantáneo ) es un volcado de memoria solicitado por el operador del ordenador o por el programa en ejecución, tras el cual el programa puede continuar. Los volcados de memoria 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 activa automáticamente un volcado de memoria. Por extensión, la frase "volcar memoria" ha llegado a significar en muchos casos cualquier error fatal, independientemente de si existe 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 su posterior examen u otros fines. [3] [4]
El nombre proviene de memoria de núcleo magnético , [5] la principal forma de memoria de acceso aleatorio desde la década de 1950 hasta la de 1970. El nombre se mantuvo mucho tiempo después de que la tecnología de núcleo magnético se volviera obsoleta.
Los primeros volcados de memoria eran impresiones en papel [6] del contenido de la memoria, normalmente organizados en columnas de números octales o hexadecimales (un " volcado hexadecimal "), a veces acompañados 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 aumentaron los tamaños de memoria y se desarrollaron utilidades de análisis post mortem, los volcados se escribieron en medios magnéticos como cintas o discos.
En lugar de mostrar únicamente el contenido de la memoria aplicable, los sistemas operativos modernos suelen generar un archivo que contiene una imagen de la memoria perteneciente al proceso bloqueado, o las imágenes de 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 sistemas Unix y similares a Unix , objdump y kdump en Linux , IPCS (Interactive Problem Control System) en IBM z/OS , [7] DVF (Dump Viewing Facility) en IBM z/VM , [8] WinDbg en Microsoft Windows, Valgrind u otros depuradores.
En algunos sistemas operativos [b], una aplicación u operador puede solicitar una instantánea de bloques de almacenamiento seleccionados, en lugar de todo el almacenamiento utilizado por la aplicación o el sistema operativo.
Los volcados de memoria pueden resultar útiles como ayuda para la depuración en diversas situaciones. En los primeros sistemas independientes o de procesamiento por lotes , los volcados de memoria permitían al usuario depurar un programa sin monopolizar la (muy costosa) función de procesamiento para la depuración; una impresión también podía ser más conveniente que la depuración mediante interruptores y luces del panel frontal .
En computadoras compartidas, ya sean de tiempo compartido, de 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 inmediatamente.
Los volcados de memoria permiten al usuario guardar un fallo para analizarlo más tarde o fuera del sitio, o para compararlo con otros fallos. En el caso de los equipos integrados , puede resultar poco práctico admitir la depuración en el propio equipo, por lo que el análisis de un volcado puede realizarse en un equipo diferente. Algunos sistemas operativos, como las primeras versiones de Unix, no admitían la conexión de depuradores a los procesos en ejecución, por lo que los volcados de memoria eran necesarios para ejecutar un depurador en el contenido de la memoria de un proceso.
Los volcados de memoria se pueden utilizar para capturar datos liberados durante la asignación dinámica de memoria y, por lo tanto, se pueden utilizar 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 de memoria para determinar el error mediante un examen directo.
Los volcados de instantáneas a veces son una forma conveniente para que las aplicaciones registren resultados de depuración rápidos y sencillos.
Un volcado de memoria 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, una interpretación exitosa requiere que el programa o el usuario que intenta interpretar el volcado comprenda la estructura del uso de memoria del programa.
Un depurador puede utilizar una tabla de símbolos , si existe, para ayudar al programador a interpretar los volcados, identificando las 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 existen herramientas especiales llamadas analizadores de volcados para analizar los volcados. Una herramienta popular, disponible en muchos sistemas operativos, es objdump de GNU binutils .
En los sistemas operativos modernos de tipo Unix , los administradores y programadores pueden leer archivos de volcado de memoria utilizando la biblioteca GNU Binutils Binary File Descriptor (BFD), y el depurador 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 memoria; no sabe nada sobre las variables o estructuras de datos en esa región de memoria, por lo que la aplicación que utiliza la biblioteca para leer el volcado de memoria tendrá que determinar las direcciones de las variables y determinar la disposición de las estructuras de datos por sí misma, por ejemplo, utilizando la tabla de símbolos para el programa que se está depurando.
Los analistas de volcados de memoria de sistemas Linux pueden utilizar kdump o Linux Kernel Crash Dump (LKCD). [9]
Los volcados de memoria permiten guardar el contexto (estado) de un proceso en un estado determinado para volver a él más tarde. Los sistemas pueden lograr una alta disponibilidad mediante la transferencia de núcleos entre procesadores, a veces a través de los propios archivos de volcado de memoria.
El núcleo también se puede volcar en un host remoto a través de una red (lo que supone un riesgo de seguridad). [10]
Los usuarios de mainframes IBM que ejecutan z/OS pueden explorar volcados de SVC y transacciones utilizando Interactive Problem Control System (IPCS), un lector de volcados de pantalla completa que se introdujo originalmente en OS/VS2 (MVS) , admite scripts escritos por el usuario en REXX y admite la exploración de volcados con solo apuntar y disparar [c] .
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, [d] caracteres [d] o palabras. En otras máquinas antiguas, un archivo de volcado contenía registros discretos, cada uno de los cuales contenía una dirección de almacenamiento y el contenido asociado. 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.
El monitor IBSYS para IBM 7090 incluía un programa de volcado de almacenamiento del núcleo del sistema [11] que admitía volcados post-motem y instantáneos.
En el IBM System/360 , los sistemas operativos estándar escribían volcados ABEND y SNAP formateados, con las direcciones, registros, contenidos de almacenamiento, etc., todos convertidos a formatos imprimibles. Las versiones posteriores añadieron la capacidad de escribir volcados [e] sin formato , denominados en aquel momento volcados de imagen de núcleo (también conocidos como volcados SVC).
En los sistemas operativos modernos, un espacio de direcciones de proceso puede contener espacios 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 sistemas tipo Unix , los volcados de memoria generalmente utilizan el formato de imagen ejecutable estándar :
SYSABEND
y SYSUDUMP
para un volcado ABEND formateado y a ddnames arbitrarios para volcados SNAP, o definir esos ddnames como SYSOUT. [f]SYS1.DUMP
[i] en el momento de la falla, así como un volcado de consola solicitado por el operador.coreadm
permite configurar el nombre y la ubicación de los archivos principales.core
. En Linux (desde las versiones 2.4.21 y 2.6 de la línea principal del núcleo Linux ), se puede especificar un nombre diferente a través de procfs utilizando el /proc/sys/kernel/core_pattern
archivo de configuración; el nombre especificado también puede ser una plantilla que contenga etiquetas sustituidas por, por ejemplo, el nombre del archivo ejecutable, el ID del proceso o el motivo del volcado. [16]vmcore
o vmcore.incomplete
..dmp
; por ejemplo, los volcados de memoria pueden tener el nombre memory.dmp
o \Minidump\Mini051509-01.dmp
.Microsoft Windows admite dos formatos de volcado de memoria, que se describen a continuación.
Hay cinco tipos de volcados en modo kernel: [17]
Para analizar los volcados de kernel en modo Windows se utilizan herramientas de depuración para Windows . [19]
El volcado de memoria en modo usuario, también conocido como minidump , [20] 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 MINIDUMP_TYPE
enum. [21]
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 de 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. [ cita requerida ] La nave Voyager utiliza volcados de núcleo de forma rutinaria para detectar daños en la memoria a causa de eventos de rayos cósmicos .
Los sistemas de volcado de memoria de las misiones espaciales se basan principalmente en conjuntos 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 de memoria puede modificarse o mejorarse sustancialmente para satisfacer las necesidades específicas de la misión.
Hasta la llegada de kdump, Linux Kernel Crash Dump (LKCD) era el mecanismo popular para obtener y analizar archivos de volcado.
Los servicios de volcado de memoria remota, como netdump
, transmiten el contenido de la memoria a través de la red sin cifrar.
ACTIVO, PRINCIPAL o ALMACENAMIENTO especifica el almacenamiento central para el espacio de direcciones en el que se está ejecutando actualmente IPCS y le permite acceder a ese almacenamiento activo como fuente de volcado. Puede acceder al almacenamiento privado y a cualquier almacenamiento común al que pueda acceder un programa no autorizado.
SYS1.DUMPnn
(nn de 00 a 99). z/OS admite múltiples conjuntos de datos de volcado del sistema con patrones dsname arbitrarios bajo el control de la instalación y el operador [12] .Descripciones del formato de archivo
Volcados de núcleo del kernel: