В вычислительной технике дамп ядра , дамп памяти , аварийный дамп , дамп хранилища , дамп системы или дамп ABEND [1] состоит из записанного состояния рабочей памяти компьютерной программы в определенное время, обычно когда программа произошел сбой или иным образом аварийно завершилось работу. [2] На практике другие ключевые фрагменты состояния программы обычно выгружаются одновременно, включая регистры процессора , которые могут включать программный счетчик и указатель стека , информацию управления памятью, а также другие флаги и информацию процессора и операционной системы. Дамп моментального снимка (или дамп моментального снимка ) — это дамп памяти, запрошенный оператором компьютера или запущенной программой, после которого программа может продолжить работу. Дампы ядра часто используются для помощи в диагностике и отладке ошибок в компьютерных программах.
Во многих операционных системах фатальное исключение в программе автоматически вызывает дамп ядра. В более широком смысле фраза «сбросить ядро» во многих случаях стала означать любую фатальную ошибку, независимо от того, существует ли запись в памяти программы. Термин «дамп ядра», «дамп памяти» или просто «дамп» также стал жаргоном, обозначающим любой вывод большого количества необработанных данных для дальнейшего изучения или других целей. [3] [4]
Название происходит от памяти с магнитным сердечником , [5] основной формы оперативной памяти с 1950-х по 1970-е годы. Это название сохранилось еще долгое время после того, как технология магнитных сердечников устарела.
Самые ранние дампы ядра представляли собой бумажные распечатки [6] содержимого памяти, обычно расположенные в столбцах восьмеричных или шестнадцатеричных чисел (« шестнадцатеричный дамп »), иногда сопровождаемые их интерпретацией в виде инструкций машинного языка , текстовых строк, десятичных или плавающих чисел. номера точек ( см. дизассемблер ).
По мере увеличения размеров памяти и разработки утилит посмертного анализа дампы записывались на магнитные носители, такие как лента или диск.
Вместо того, чтобы отображать только содержимое соответствующей памяти, современные операционные системы обычно генерируют файл, содержащий образ памяти, принадлежащей аварийному процессу, или образы памяти частей адресного пространства , связанных с этим процессом, а также другую информацию, такую как в качестве значений регистров процессора, счетчика программ, системных флагов и другой информации, полезной для определения основной причины сбоя. Эти файлы можно просмотреть как текст, распечатать или проанализировать с помощью специализированных инструментов, таких как elfdump в Unix и Unix-подобных системах, objdump и kdump в Linux , IPCS (интерактивная система контроля проблем) в IBM z/OS , [7] DVF ( Средство просмотра дампов) в IBM z/VM , [8] WinDbg в Microsoft Windows, Valgrind или других отладчиках.
В некоторых операционных системах [b] приложение или оператор могут запросить снимок выбранных блоков хранилища, а не всего хранилища, используемого приложением или операционной системой.
Дампы ядра могут служить полезным средством отладки в нескольких ситуациях. В ранних автономных системах или системах пакетной обработки дампы ядра позволяли пользователю отлаживать программу, не монополизируя (очень дорогостоящие) вычислительные мощности для отладки; распечатка также может быть более удобной, чем отладка с использованием переключателей и индикаторов на передней панели .
На общих компьютерах, будь то системы с разделением времени, пакетной обработкой или серверные системы, дампы ядра позволяют проводить автономную отладку операционной системы , чтобы система могла немедленно вернуться в работу.
Дампы ядра позволяют пользователю сохранить сбой для последующего или дистанционного анализа или сравнения с другими сбоями. Для встраиваемых компьютеров поддержка отладки на самом компьютере может оказаться нецелесообразной, поэтому анализ дампа может выполняться на другом компьютере. Некоторые операционные системы, такие как ранние версии Unix , не поддерживали подключение отладчиков к запущенным процессам, поэтому для запуска отладчика с содержимым памяти процесса были необходимы дампы ядра.
Дампы ядра можно использовать для захвата данных, освобождаемых во время динамического выделения памяти , и, таким образом, их можно использовать для извлечения информации из программы, которая больше не работает. При отсутствии интерактивного отладчика старательный программист может использовать дамп ядра для определения ошибки путем непосредственного изучения.
Snap-дампы иногда являются для приложений удобным способом записи быстрых и грязных результатов отладки.
Дамп ядра обычно представляет собой полное содержимое выгруженных областей адресного пространства выгруженного процесса. В зависимости от операционной системы дамп может содержать мало структур данных или вообще не содержать их, что облегчает интерпретацию областей памяти. В этих системах успешная интерпретация требует, чтобы программа или пользователь, пытающийся интерпретировать дамп, понимали структуру использования памяти программой.
Отладчик может использовать таблицу символов , если она существует, чтобы помочь программисту интерпретировать дампы, символически определяя переменные и отображая исходный код; если таблица символов недоступна, возможна меньшая интерпретация дампа, но ее все равно может быть достаточно, чтобы определить причину проблемы. Существуют также специальные инструменты, называемые анализаторами дампов, для анализа дампов. Одним из популярных инструментов, доступных во многих операционных системах, является objdump из GNU binutils .
В современных Unix-подобных операционных системах администраторы и программисты могут читать файлы дампа ядра, используя библиотеку дескрипторов двоичных файлов GNU Binutils (BFD), а также отладчик GNU (gdb) и objdump, которые используют эту библиотеку. Эта библиотека будет предоставлять необработанные данные для данного адреса в области памяти из дампа ядра; он ничего не знает о переменных или структурах данных в этой области памяти, поэтому приложению, использующему библиотеку для чтения дампа ядра, придется самому определять адреса переменных и расположение структур данных, например, с помощью таблицы символов для программы, находящейся в стадии отладки.
Аналитики аварийных дампов систем Linux могут использовать kdump или аварийный дамп ядра Linux (LKCD). [9]
Дампы ядра могут сохранять контекст (состояние) процесса в заданном состоянии для последующего возврата к нему. Системы можно обеспечить высокую доступность путем передачи ядра между процессорами, иногда с помощью самих файлов дампа ядра.
Ядро также можно сбросить на удаленный хост по сети (что представляет угрозу безопасности). [10]
В старых и более простых операционных системах каждый процесс имел непрерывное адресное пространство, поэтому файл дампа иногда представлял собой просто файл с последовательностью байтов, цифр, символов [c] или слов. На других ранних машинах файл дампа содержал отдельные записи, каждая из которых содержала адрес хранилища и связанное с ним содержимое. На ранних машинах дамп часто записывался отдельной программой дампа, а не приложением или операционной системой.
В IBM System/360 стандартные операционные системы записывали отформатированные дампы ABEND и SNAP с адресами, регистрами, содержимым хранилища и т. д., преобразованными в печатные формы. В более поздних выпусках была добавлена возможность записи неформатированных дампов [d] , которые в то время назывались дампами основного образа.
В современных операционных системах адресное пространство процесса может содержать пробелы и может использовать общие страницы с другими процессами или файлами, поэтому используются более сложные представления; они также могут включать другую информацию о состоянии программы на момент дампа.
В Unix-подобных системах дампы ядра обычно используют стандартный формат исполняемого образа :
SYSABEND
и SYSUDUMP
для форматированного дампа ABEND, а также произвольным именам ddname для дампов SNAP или определять эти ddnames как SYSOUT. [э]SYS1.DUMP
[h] во время сбоя, а также дамп консоли, запрошенный оператором.coreadm
позволяет настраивать имя и расположение основных файлов.core
. В Linux (начиная с версий 2.4.21 и 2.6 основной ветки ядра Linux ) другое имя можно указать через procfs с помощью /proc/sys/kernel/core_pattern
файла конфигурации; указанное имя также может быть шаблоном, содержащим теги, замененные, например, именем исполняемого файла, идентификатором процесса или причиной дампа. [15]vmcore
или vmcore.incomplete
..dmp
; например, дамп ядра может иметь имя memory.dmp
или \Minidump\Mini051509-01.dmp
.Microsoft Windows поддерживает два формата дампа памяти, описанные ниже.
Существует пять типов дампов режима ядра: [16]
Для анализа дампов режима ядра Windows используются инструменты отладки для Windows . [18]
Дамп памяти пользовательского режима, также известный как минидамп [19] , представляет собой дамп памяти одного процесса. Он содержит выбранные записи данных: полную или частичную (отфильтрованную) память процесса; список потоков с их стеками вызовов и состоянием (например, регистры или TEB ); информация об дескрипторах объектов ядра; список загруженных и выгруженных библиотек . Полный список опций, доступных в MINIDUMP_TYPE
перечислении. [20]
Программа НАСА «Вояджер», вероятно, была первым кораблем, который регулярно использовал функцию сброса активной зоны в сегменте глубокого космоса. Функция дампа ядра является обязательной функцией телеметрии для сегмента Deep Space, поскольку доказано, что она минимизирует затраты на диагностику системы . Корабль «Вояджер» использует регулярные дампы ядра, чтобы обнаружить повреждение памяти в результате событий космических лучей .
Системы дампа ядра космической миссии в основном основаны на существующих наборах инструментов для целевого процессора или подсистемы. Однако в ходе миссии подсистема сброса активной зоны может быть существенно модифицирована или усовершенствована в соответствии с конкретными потребностями миссии.
До появления kdump популярным механизмом получения и анализа дампов был Linux Kernel Crash Dump (LKCD).
Службы удаленного дампа памяти, такие как netdump
, передают содержимое памяти по сети в незашифрованном виде.
ACTIVE, MAIN или STORAGE задают центральное хранилище для адресного пространства, в котором в данный момент работает IPCS, и позволяют вам получить доступ к этому активному хранилищу в качестве источника дампа.
Вы можете получить доступ к личному хранилищу и любому общему хранилищу, доступному неавторизованной программе.
SYS1.DUMPnn
(nn от 00 до 99). z/OS поддерживает несколько наборов данных дампа системы с произвольными шаблонами dsname при установке и под контролем оператора [11] .Описание формата файла
Дампы ядра ядра: