En informática , un volcado de núcleo , [un] volcado de memoria , volcado de 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 de computadora en un momento específico, generalmente cuando el programa se ha bloqueado o ha terminado de forma anormal. [2] En la práctica, otras partes clave del estado del programa generalmente se volcan al mismo tiempo, incluidos los registros del procesador , que pueden incluir el contador del programa y el puntero de la pila , información de administración de memoria y otras banderas e información del procesador y del sistema operativo. Un volcado instantáneo (o volcado instantáneo ) es un volcado de memoria solicitado por el operador de la computadora o por el programa en ejecución, después del cual el programa puede continuar. Los volcados de núcleo se utilizan a menudo para ayudar a diagnosticar y depurar errores en 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 "volcar el núcleo" 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 núcleo", "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. [3] [4]
El nombre proviene de la memoria de núcleo magnético , [5] la principal forma de memoria de acceso aleatorio desde los años cincuenta hasta los setenta. El nombre se mantuvo mucho después de que la tecnología de núcleo magnético se volviera obsoleta.
Los primeros volcados de núcleo eran impresiones en papel [6] del contenido de la memoria, generalmente 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 decimales o flotantes. números de puntos ( 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 generalmente generan un archivo que contiene una imagen de la memoria que pertenece 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 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 pueden verse como texto, imprimirse o analizarse con herramientas especializadas como elfdump en Unix y sistemas similares a Unix , objdump y kdump en Linux , IPCS (Sistema de control interactivo de problemas) 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 los bloques de almacenamiento seleccionados, en lugar de todo el almacenamiento utilizado por la aplicación o el sistema operativo.
Los volcados de núcleo pueden servir como útiles ayudas de depuración en varias situaciones. En los primeros sistemas independientes o de procesamiento por lotes , los volcados de núcleo permitían al usuario depurar un programa sin monopolizar las (muy caras) instalaciones informáticas para la depuración; una copia impresa también podría ser más conveniente que depurar usando interruptores y luces del panel frontal .
En computadoras compartidas, ya sean sistemas de tiempo compartido, procesamiento por lotes o servidores, 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 núcleo permiten al usuario guardar un fallo para un análisis posterior o externo, o para compararlo con otros fallos. Para computadoras integradas , puede resultar 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 admitían la conexión de depuradores a los procesos en ejecución, por lo que eran necesarios volcados de núcleo para ejecutar un depurador en el contenido de la memoria de un proceso.
Los volcados de núcleo se pueden utilizar para capturar datos liberados durante la asignación de memoria dinámica y, por 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 núcleo para determinar el error mediante un examen directo.
Los volcados instantáneos son a veces una forma conveniente para que las aplicaciones registren resultados de depuración rápidos y sucios.
Un volcado de núcleo generalmente representa el contenido completo de las regiones volcadas del espacio de direcciones del proceso volcado. Dependiendo del sistema operativo, el volcado puede contener pocas o ninguna estructura de datos para ayudar a 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 la memoria del programa.
Un depurador puede utilizar una tabla de símbolos , si existe, para ayudar al programador a interpretar volcados, identificar variables simbólicamente y mostrar el código fuente; Si la tabla de símbolos no está disponible, es posible realizar menos interpretaciones del volcado, pero aún puede haber suficientes posibilidades para determinar la causa del problema. También existen herramientas especiales llamadas analizadores de volcados para analizar volcados. Una herramienta popular, disponible en muchos sistemas operativos, es objdump de GNU binutils .
En los sistemas operativos modernos tipo Unix , los administradores y programadores pueden leer archivos de volcado de núcleo utilizando la biblioteca de descriptores de archivos binarios (BFD) GNU Binutils y el depurador GNU (gdb) y objdump que utilizan esta biblioteca. Esta biblioteca proporcionará los datos sin procesar para una dirección determinada en una región de memoria a partir de 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 de memoria tendrá que determinar las direcciones de las variables y determinar el diseño de las estructuras de datos, 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 utilizar kdump o Linux Kernel Crash Dump (LKCD). [9]
Los volcados de 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 transfiriendo el 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 para la seguridad). [10]
Los usuarios de mainframes IBM que ejecutan z/OS pueden explorar SVC y volcados de transacciones utilizando el Sistema Interactivo de Control de Problemas (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 y-disparar navegación [c] de volcados.
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 una 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 con 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 IBM System/360 , los sistemas operativos estándar escribieron volcados ABEND y SNAP formateados, con las direcciones, registros, contenidos de almacenamiento, etc., todos convertidos en formularios imprimibles. Las versiones posteriores agregaron la capacidad de escribir volcados [e] sin formato , llamados en ese momento volcados de imágenes centrales (también conocidos como volcados SVC).
En los sistemas operativos modernos, el espacio de direcciones de un 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 núcleo 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 kernel de Linux ), se puede especificar un nombre diferente mediante procfs usando el /proc/sys/kernel/core_pattern
archivo de configuración; el nombre especificado también puede ser una plantilla que contenga etiquetas sustituidas, por ejemplo, por el nombre del archivo ejecutable, el ID del proceso o el motivo del volcado. [dieciséis]vmcore
o vmcore.incomplete
..dmp
; por ejemplo, los volcados de núcleo pueden tener nombres 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 en modo kernel de Windows se utilizan herramientas de depuración para Windows . [19]
El volcado de memoria en modo de usuario, también conocido como minivolcado , [20] es un volcado de memoria de un solo proceso. Contiene registros de datos seleccionados: memoria de proceso total o parcial (filtrada); lista de subprocesos con sus pilas de llamadas y estado (como registros o TEB ); información sobre 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úcleos en el segmento del espacio profundo. La función de volcado de núcleo es una función de telemetría obligatoria para el segmento del espacio profundo, ya que se ha demostrado que minimiza los costos de diagnóstico del sistema. [ cita necesaria ] La nave Voyager utiliza volcados de núcleos de rutina para detectar daños en la memoria causados por eventos de rayos cósmicos .
Los sistemas de volcado de núcleos de Space Mission se basan principalmente en kits de herramientas existentes para la CPU o subsistema de destino. Sin embargo, durante la duración de una misión, el subsistema de volcado de núcleos puede modificarse o mejorarse sustancialmente para 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 volcados.
Los servicios de volcado de memoria remota, como netdump
, transmiten el contenido de la memoria a través de la red sin cifrar.
ACTIVE, MAIN o STORAGE especifica el almacenamiento central para el espacio de direcciones en el que IPCS se está ejecutando actualmente 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 de nombres de dominio arbitrarios bajo instalación y control del operador [12] .Descripciones del formato de archivo.
Volcados del núcleo del kernel: