Из Википедии, бесплатной энциклопедии
  (Перенаправлен из дампа памяти )
Перейти к навигации Перейти к поиску

В вычислении , в дампе ядра , [а] дамп памяти , аварийный дамп , система сброс или ABEND дамп [1] состоит из записанного состояния рабочей памяти в виде компьютерной программы , в то время , определенного, как правило , когда программа разбилась или в противном случае завершился ненормально. [2] На практике, другие ключевые части состояния программы обычно сбрасываются одновременно, включая регистры процессора , которые могут включать в себя счетчик программ и указатель стека., информация об управлении памятью и другие флаги и информация о процессоре и операционной системе. Свалка снимка (или оснастка свалка ) представляет собой дамп памяти с просьбой оператором компьютера или запущенной программой, после чего программа может продолжать. Дампы ядра часто используются для диагностики и отладки ошибок в компьютерных программах.

Во многих операционных системах фатальная исключительная ситуация в программе автоматически запускает дамп памяти. В более широком смысле фраза «сделать дамп ядра» во многих случаях означает любую фатальную ошибку, независимо от того, существует ли запись в программной памяти. Термин «дамп ядра», «дамп памяти» или просто «дамп» также стал жаргоном, обозначающим любой вывод большого количества необработанных данных для дальнейшего изучения или других целей. [3] [4]

Фон [ править ]

Название происходит от магнитного сердечника памяти , [5] основной формой оперативной памяти с 1950 - х до 1970 - х годов. Название осталось еще долгое время после того, как технология магнитных сердечников устарела.

Самые ранние дампы ядра представляли собой бумажные распечатки [6] содержимого памяти, обычно расположенные в столбцах восьмеричных или шестнадцатеричных чисел (« шестнадцатеричный дамп »), иногда сопровождаемые их интерпретацией как инструкции машинного языка , текстовые строки, десятичные или плавающие числа. номера точек ( ср. дизассемблер ).

По мере увеличения объема памяти и разработки утилит для посмертного анализа дампы записывались на магнитные носители, такие как лента или диск.

Вместо того, чтобы отображать только содержимое соответствующей памяти, современные операционные системы обычно генерируют файл, содержащий изображение памяти, принадлежащей аварийному процессу, или образы памяти частей адресного пространства, связанных с этим процессом, вместе с другой информацией, такой как в качестве значений регистров процессора, счетчика программ, системных флагов и другой информации, полезной для определения основной причины сбоя. Эти файлы можно просматривать в виде текста, распечатывать или анализировать с помощью специализированных инструментов, таких как elfdump в Unix и Unix-подобных системах, objdump и kdump в Linux , IPCS (Interactive Problem Control System) в IBM System z , [7] WinDbg в Microsoft Windows, Valgrind или других отладчиках.

В некоторых операционных системах [b] приложение или оператор может запросить моментальный снимок выбранных блоков хранения, а не всего хранилища, используемого приложением или операционной системой.

Использует [ редактировать ]

Дампы ядра могут служить полезными средствами отладки в нескольких ситуациях. В ранних автономных системах или системах с пакетной обработкой дампы ядра позволяли пользователю отлаживать программу, не монополизируя (очень дорогое) вычислительное средство для отладки; распечатка также может быть удобнее, чем отладка с использованием переключателей и индикаторов на передней панели .

На общих компьютерах, будь то система с разделением времени, пакетная обработка или серверные системы, дампы ядра позволяют выполнять отладку операционной системы в автономном режиме , так что система может немедленно вернуться в работу.

Дампы ядра позволяют пользователю сохранить сбой для более позднего или удаленного анализа или сравнения с другими сбоями. Для встроенных компьютеров поддержка отладки на самом компьютере может оказаться непрактичной, поэтому анализ дампа может выполняться на другом компьютере. Некоторые операционные системы, такие как ранние версии Unix , не поддерживали присоединение отладчиков к запущенным процессам, поэтому для запуска отладчика содержимого памяти процесса были необходимы дампы ядра.

Дампы ядра могут использоваться для сбора данных, освобожденных во время выделения динамической памяти, и, таким образом, могут использоваться для извлечения информации из программы, которая больше не выполняется. При отсутствии интерактивного отладчика дамп ядра может быть использован усердным программистом для определения ошибки путем прямого исследования.

Моментальные дампы иногда являются удобным способом для приложений записывать быструю и грязную отладочную информацию.

Анализ [ править ]

Дамп ядра обычно представляет собой полное содержимое выгруженных областей адресного пространства выгруженного процесса. В зависимости от операционной системы дамп может содержать мало структур данных или вообще не содержать их, чтобы облегчить интерпретацию областей памяти. В этих системах для успешной интерпретации требуется, чтобы программа или пользователь, пытающийся интерпретировать дамп, понимали структуру использования памяти программой.

Отладчик может использовать таблицу символов , если таковая существует, чтобы помочь программисту интерпретировать дампы, символически идентифицируя переменные и отображая исходный код; если таблица символов недоступна, возможна меньшая интерпретация дампа, но все же может быть достаточно возможностей для определения причины проблемы. Существуют также специальные инструменты, называемые анализаторами дампов, для анализа дампов. Одним из популярных инструментов, доступных во многих операционных системах, является objdump GNU binutils .

В современных Unix-подобных операционных системах администраторы и программисты могут читать файлы дампа ядра с помощью библиотеки дескрипторов двоичных файлов GNU Binutils (BFD), а также отладчика GNU (gdb) и objdump, которые используют эту библиотеку. Эта библиотека предоставит необработанные данные для заданного адреса в области памяти из дампа памяти; он ничего не знает о переменных или структурах данных в этой области памяти, поэтому приложение, использующее библиотеку для чтения дампа памяти, должно будет определить адреса переменных и само расположение структур данных, например, с помощью таблицы символов для отлаживаемой программы.

Аналитики аварийных дампов систем Linux могут использовать kdump или аварийный дамп ядра Linux (LKCD). [8]

Дампы ядра могут сохранять контекст (состояние) процесса в заданном состоянии для возврата к нему позже. Системы можно сделать высокодоступными, передав ядро ​​между процессорами, иногда через сами файлы дампа ядра.

Ядро также можно выгрузить на удаленный хост по сети (что представляет собой угрозу безопасности). [9]

Файлы дампа ядра [ править ]

Форматировать [ редактировать ]

В более старых и более простых операционных системах каждый процесс имел непрерывное адресное пространство, поэтому файл дампа иногда был просто файлом с последовательностью байтов, цифр, [c] символов [c] или слов. На других ранних машинах файл дампа содержал отдельные записи, каждая из которых содержала адрес хранилища и соответствующее содержимое. На ранних машинах дамп часто создавался автономной программой дампа, а не приложением или операционной системой.

В IBM System / 360 стандартные операционные системы записывали отформатированные дампы ABEND и SNAP с адресами, регистрами, содержимым хранилища и т. Д., Преобразованными в формы для печати. В более поздних выпусках добавлена ​​возможность записи неформатированных дампов [d] , которые в то время назывались дампами основного образа.

В современных операционных системах адресное пространство процесса может иметь пробелы и разделять страницы с другими процессами или файлами, поэтому используются более сложные представления; они также могут включать другую информацию о состоянии программы во время дампа.

В Unix-подобных системах дампы ядра обычно используют стандартный исполняемый формат образа :

  • a.out в старых версиях Unix ,
  • ELF в современных системах Linux , System V , Solaris и BSD ,
  • Mach-O в macOS и т. Д.

Именование [ править ]

OS / 360 и последующие [ править ]

  • В OS / 360 и последующих версиях задание может назначать произвольные имена наборов данных (DSN) для ddnames SYSABENDи SYSUDUMPдля форматированного дампа ABEND и для произвольных ddname для дампа SNAP, или определять эти ddnames как SYSOUT. [e]
  • Средство оценки и устранения повреждений (DAR) добавило автоматический неформатированный дамп [g] в набор данных SYS1.DUMP[h] во время сбоя, а также дамп консоли, запрошенный оператором.
  • Дамп новой транзакции очень похож на старые формы дампа.

Unix-подобный [ править ]

  • Начиная с Solaris 8, системная утилита coreadmпозволяет настраивать имя и расположение файлов ядра.
  • Дампы пользовательских процессов традиционно создаются в виде core. В Linux (начиная с версий 2.4.21 и 2.6 основной ветки ядра Linux ) можно указать другое имя через procfs с /proc/sys/kernel/core_patternпомощью файла конфигурации; указанное имя также может быть шаблоном, который содержит теги, замененные, например, именем исполняемого файла, идентификатором процесса или причиной дампа. [10]
  • Общесистемные дампы в современных Unix-подобных системах часто отображаются как vmcoreили vmcore.incomplete.

Другое [ править ]

  • Такие системы, как Microsoft Windows , в которых используются расширения файлов , могут использовать расширения .dmp; например, дампы ядра могут называться memory.dmpили \Minidump\Mini051509-01.dmp.

Дампы памяти Windows [ править ]

Microsoft Windows поддерживает два формата дампа памяти, описанные ниже.

Дампы в режиме ядра [ править ]

Существует пять типов дампов режима ядра: [11]

  • Полный дамп памяти - содержит полную физическую память целевой системы.
  • Дамп памяти ядра - содержит всю память, используемую ядром во время сбоя.
  • Небольшой дамп памяти - содержит различную информацию, такую ​​как код остановки, параметры, список загруженных драйверов устройств и т. Д.
  • Автоматический дамп памяти (Windows 8 и более поздние версии) - то же самое, что и дамп памяти ядра, но если файл подкачки одновременно управляется системой и слишком мал для захвата дамп памяти ядра, он автоматически увеличит файл подкачки как минимум до размера ОЗУ для четыре недели, затем уменьшите его до меньшего размера. [12]
  • Дамп активной памяти (Windows 10 и новее) - содержит большую часть памяти, используемой ядром и приложениями пользовательского режима.

Для анализа дампов режима ядра Windows используются Debugging Tools for Windows . [13]

Дампы памяти в пользовательском режиме [ править ]

Дамп памяти пользовательского режима, также известный как минисвалки , [14] является дампом памяти одного процесса. Он содержит выбранные записи данных: полную или частичную (отфильтрованную) память процесса; список потоков с их стеками вызовов и состоянием (например, регистры или TEB ); информация о дескрипторах объектов ядра; список загруженных и выгруженных библиотек . Полный список опций доступен в MINIDUMP_TYPEenum. [15]

Космические миссии [ править ]

Программа НАСА « Вояджер» была, вероятно, первым аппаратом, который регулярно использовал функцию дампа ядра в сегменте дальнего космоса. Функция дампа ядра является обязательной функцией телеметрии для сегмента Deep Space, поскольку, как было доказано, минимизирует затраты на диагностику системы [ необходима цитата ] . Корабль "Вояджер" использует обычные дампы ядра, чтобы обнаружить повреждение памяти в результате космических лучей .

Системы дампа ядра Space Mission в основном основаны на существующих инструментах для целевого ЦП или подсистемы. Тем не менее, в течение миссии подсистема дампа активной зоны может быть существенно модифицирована или улучшена для конкретных нужд миссии.

См. Также [ править ]

  • Дамп базы данных
  • Шестнадцатеричный дамп
  • Копирование файлов

Ссылки [ править ]

  1. ^ «Информация об AIX 7.1» .[ постоянная мертвая ссылка ]
  2. ^ core(4) : Файл ядра процесса -Справочное руководство по форматам файлов  Solaris 10
  3. ^ Кори Янссен. «Что такое дамп базы данных? - Определение из Техопедии» . Techopedia.com . Проверено 29 июня 2015 года .
  4. ^ «Как настроить компьютер для получения полного дампа памяти» . sophos.com . 12 июля 2010 . Проверено 29 июня 2015 года .
  5. ^ Оксфордский словарь английского языка , sv 'core'
  6. ^ "определение дампа памяти" .
  7. ^ Роджерс, Пол; Кэри, Дэвид (август 2005 г.). Сбор и анализ диагностических данных z / OS (PDF) . Корпорация IBM. С. 77–93. ISBN  0738493996. Проверено 29 января 2021 года .
  8. ^ Венкатесваран, Sreekrishnan (2008). Основные драйверы устройств Linux . Серия разработок программного обеспечения с открытым исходным кодом Prentice Hall. Прентис Холл. п. 623. ISBN 978-0-13-239655-4. Проверено 15 июля 2010 . До появления kdump дамп ядра Linux (LKCD) был популярным механизмом для получения и анализа дампов.
  9. ^ Проект документации Fedora (2010). Fedora 13 Руководство по безопасности . Fultus Corporation. п. 63. ISBN 978-1-59682-214-6. Проверено 29 сентября 2010 . Службы удаленного дампа памяти, например netdump, передают содержимое памяти по сети в незашифрованном виде.
  10. ^ "core (5) - страница руководства Linux" . man7.org . 2015-12-05 . Проверено 17 апреля 2016 .
  11. ^ "Разновидности файлов дампа режима ядра" . Microsoft . Проверено 22 февраля 2018 .
  12. ^ "Автоматический дамп памяти" . Microsoft. 28 ноября 2017 . Проверено 16 марта 2018 .
  13. ^ «Начало работы с WinDbg (режим ядра)» . Проверено 30 сентября 2014 года .
  14. ^ "Файлы минидампа" . Проверено 30 сентября 2014 года .
  15. ^ "Перечисление MINIDUMP_TYPE" . Проверено 30 сентября 2014 года .

Примечания [ править ]

  1. ^ Термин « ядро» устарел на современном оборудовании, но используется во многих системах по историческим причинам.
  2. ^ Например, z / OS
  3. ^ a b Некоторые старые машины были десятичными .
  4. ^ В том смысле, что записи были двоичными, а не отформатированы для печати.
  5. Файлы ^ SYStem OUTput (SYSOUT) - это временные файлы, принадлежащие программе SPOOL .
  6. ^ Изначально пакетная утилита IMDPRDMP; в настоящее время это команда TSO ирепертуар панели ISPF для интерактивной системы управления проблемами (IPCS).
  7. ^ IBM предоставила инструменты для извлечения и форматирования данных из неформатированного дампа; эти инструменты [f] часто упрощают работу с неформатированным дампом, чем даже с небольшим отформатированным дампом.
  8. ^ С тех пор было несколько изменений имен, и z / OS поддерживает несколько наборов данных системного дампа с произвольными dsnames.

Внешние ссылки [ править ]

Описание формата файла

  • core(5) -  Руководство программиста Linux - Форматы файлов
  • core(4) -  Справочное руководство по форматам файлов Solaris 10
  • core(4) -  Руководство по форматам файлов HP-UX 11i
  • core(5) -  Руководство по форматам файлов FreeBSD
  • core(5) -  Руководство по форматам файлов OpenBSD
  • core(5) -  Руководство по форматам файлов NetBSD
  • core(5) -  Руководство по форматам файлов Darwin и macOS
  • Файлы минидампа

Дампы ядра ядра:

  • savecore(1M) -  Справочное руководство по командам системного администратора Solaris 10
  • Техническая записка Apple TN2118: дампы ядра ядра