Паника ядра

редактировать

Сообщение о панике ядра из системы Linux Паника ядра в Ubuntu 13.04 (Linux 3.8) в Oracle VM VirtualBox

A kernel panic (иногда сокращенно KP ) - это мера безопасности, принимаемая ядром операционной системы при обнаружении внутренняя фатальная ошибка, при которой невозможно безопасное восстановление или система не может продолжать работать без гораздо более высокого риска серьезной потери данных. Этот термин в основном характерен для Unix и Unix-подобных систем. Для операционных систем Microsoft Windows эквивалентным термином является «Stop error », что приводит к появлению экрана проверки ошибок, на котором код проверки ошибок отображается на синем фоне в ранних версиях Windows (в просторечии известный как «Синий экран смерти » или BSoD) или на зеленом фоне на платформе Xbox One, а также в предварительных сборках Windows 10.

Подпрограммы ядра , которые обрабатывают паники, известные как panic ()в ATT -предполагаемом и BSD исходном коде Unix кода, обычно предназначены для вывода сообщения об ошибке в консоль, выгрузки образа памяти ядра на диск для посмертной отладки, а затем либо ожидания для перезагрузки системы вручную или инициировать автоматическую перезагрузку. Предоставленная информация носит сугубо технический характер и призвана помочь системному администратору или разработчику программного обеспечения в диагностике проблемы. Паника ядра также может быть вызвана ошибками, происходящими вне пространства ядра. Например, во многих операционных системах Unix происходит паника, если процесс init, который выполняется в пользовательском пространстве, завершается.

Содержание

  • 1 История
  • 2 Причины
  • 3 Особенности операционной системы
    • 3.1 Linux
    • 3.2 macOS
  • 4 См. Также
  • 5 Ссылки

История

Ядро Unix поддерживает внутреннюю согласованность и корректность времени выполнения с утверждениями в качестве механизма обнаружения ошибок. Основное предположение состоит в том, что оборудование и программное обеспечение должны работать правильно, а сбой утверждения приводит к панике, то есть к добровольной остановке всей активности системы. Паника ядра была введена в ранней версии Unix и продемонстрировала существенное различие между философией проектирования Unix и ее предшественником Multics. Разработчик Multics Том ван Влек вспоминает обсуждение этого изменения с разработчиком Unix Деннисом Ритчи :

Я заметил Деннису, что половина кода, который я писал в Multics, составляла код восстановления после ошибок. Он сказал: «Мы оставили все это. Если есть ошибка, у нас есть такая процедура, которая называется паника, и когда она вызывается, машина вылетает, и вы кричите по коридору:« Эй, перезагрузите ее »».

Исходная функция panic ()практически не изменилась с пятой редакции UNIX на UNIX 32V на основе VAX и выводила только сообщение об ошибке без другой информации, а затем отбрасывала систему в бесконечный цикл холостого хода.

Исходный код функции panic ()в V6 UNIX :

/ * * Если консоль выключена, * panicstr содержит аргумент для последнего * вызова паники. * / char * panicstr; / * * Паника вызывается при * неустранимых фатальных ошибках. * Он синхронизирует, печатает «panic: mesg» и * затем зацикливается. * / panic (s) char * s; {panicstr = s; Обновить(); printf ("паника:% s \ n", s); для (;;) idle (); }

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

Причины

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

После перекомпиляции двоичный образ ядра из исходного кода, паника ядра при загрузке результирующего ядра является общей проблемой, если ядро ​​было неправильно настроено, скомпилировано или установлено. Дополнительное оборудование или неисправность RAM также могут быть источниками фатальных ошибок ядра во время запуска из-за несовместимости с ОС или отсутствия драйвера устройства. Ядро также может перейти в panic (), если оно не может найти корневую файловую систему. На заключительных этапах инициализации ядра пользовательского пространства обычно запускается паника, если не удается создать init. Также может возникнуть паника, если процесс инициализации завершится, поскольку в этом случае система станет непригодной для использования.

Ниже представлена ​​реализация финальной инициализации ядра Linux в kernel_init ():

static int __ref kernel_init (void * unused) {... / * * Мы пробуем каждый из них, пока не добьемся успеха. * * Оболочку Bourne можно использовать вместо init, если мы * пытаемся восстановить действительно сломанную машину. * / if (execute_command) {if (! run_init_process (execute_command)) return 0; pr_err ("Не удалось выполнить% s. Попытки по умолчанию... \ n", execute_command); } if (! run_init_process ("/ sbin / init") ||! run_init_process ("/ etc / init") ||! run_init_process ("/ bin / init") ||! run_init_process ("/ bin / sh")) возврат 0; panic («Не найдено ни одного файла инициализации. Попробуйте передать параметр init = ядру.» «См. документацию Linux / init.txt для руководства.»); }

Особенности операционной системы

Linux

Паника ядра в консоли iKVM

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

В Linux из-за паники ядра индикаторы клавиатуры мигают как визуальное указание критического состояния.

macOS

Когда паника ядра происходит в Mac OS X 10.2–10.7, компьютер отображает многоязычное сообщение, информирующее пользователя о необходимости перезагрузки системы. До версии 10.2 отображалось более традиционное сообщение о панике в стиле Unix; в 10.8 и более поздних версиях компьютер автоматически перезагружается, и после перезагрузки отображается сообщение. Формат сообщения варьируется от версии к версии:

  • 10.0–10.1: система отображает на экране текст с подробными сведениями об ошибке и перестает отвечать.
  • 10.2: опускается черная прозрачная занавеска затем отображает сообщение на белом фоне, информирующее пользователя о том, что он должен перезагрузить компьютер. Сообщение отображается на английском, французском, немецком и японском.
  • 10.3–10.5: паника ядра почти такая же, как и в версии 10.2. но фон экрана ошибки черный.
  • 10.6–10.7-10.8: текст был изменен и теперь включает перевод на испанский.
  • 10.9 и более поздние версии: Компьютер перестает отвечать и сразу же перезагружается. Когда компьютер запускается из резервной копии, он показывает предупреждающее сообщение в течение нескольких секунд о перезагрузке компьютера из-за паники ядра, а затем компьютер перезагружается. Теперь сообщение содержит перевод на китайский.

Иногда, когда в течение трех минут после первой аварии ядра возникает пять или более, Mac отображает запрещающий знак в течение 30 секунд., а затем завершите работу (это известно как «повторяющаяся паника ядра»).

Во всех версиях выше 10.2 текст накладывается на символ режима ожидания и не является полноэкранным. Информация об отладке сохраняется в NVRAM и записывается в файл журнала при перезагрузке. В 10.7 есть функция автоматического перезапуска после паники ядра. В некоторых случаях в 10.2 и более поздних версиях помимо символа режима ожидания может отображаться белый текст с подробным описанием ошибки.

См. также

На Викискладе есть носители, относящиеся к панике ядра.

Ссылки

Последняя правка сделана 2021-05-25 04:30:04
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте