stringtranslate.com

Паника ядра

Паника ядра в Ubuntu 4.10 , вызванная ошибкой VFS.

Сообщение о панике ядра в системе Linux
Паника ядра OpenSolaris.
Паника ядра OpenSolaris .
Паника ядра в Ubuntu 13.04 «Raring Ringtail» (ядро Linux 3.8) в Oracle VM VirtualBox

Паника ядра (иногда сокращенно KP [1] ) — это мера безопасности, принимаемая ядром операционной системы при обнаружении внутренней фатальной ошибки , при которой оно либо не может безопасно восстановиться, либо продолжение работы системы будет иметь более высокий риск потери крупных данных. Термин в значительной степени специфичен для Unix и Unix-подобных систем. Эквивалентом в операционных системах Microsoft Windows является ошибка остановки , часто называемая «синим экраном смерти».

Процедуры ядра , которые обрабатывают паники, известные как panic()в исходном коде Unix, полученном от AT&T и BSD , обычно предназначены для вывода сообщения об ошибке на консоль , выгрузки образа памяти ядра на диск для последующей отладки , а затем либо ожидания ручной перезагрузки системы, либо инициирования автоматической перезагрузки . [2] Предоставляемая информация носит сугубо технический характер и направлена ​​на помощь системному администратору или разработчику программного обеспечения в диагностике проблемы. Паники ядра также могут быть вызваны ошибками, возникающими за пределами пространства ядра . Например, многие операционные системы Unix впадают в панику, если процесс init , который выполняется в пространстве пользователя , завершается. [3] [4]

История

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

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

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

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

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

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

Причины

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

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

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

static int __ref kernel_init ( void * не используется ) {     ... /*  * Мы пробуем каждый из этих вариантов, пока один из них не увенчается успехом.  *  * Оболочку 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" )) return 0 ;                     panic ( "Init не найден. Попробуйте передать параметр init= ядру. " "См. Linux Documentation/init.txt для получения инструкций." ); } 

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

линукс

Паника ядра, наблюдаемая на консоли iKVM

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

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

macOS

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

Если в течение трех минут после первой произойдет пять новых паник ядра, Mac отобразит запрещающий знак на тридцать секунд, а затем выключится; это известно как «повторяющаяся паника ядра». [18]

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

Смотрите также

Ссылки

  1. ^ "KP - Kernel Panic (Linux) | AcronymFinder". www.acronymfinder.com . Архивировано из оригинала 26 октября 2015 г. Получено 6 января 2016 г.
  2. ^ "FreeBSD 11.0 - man-страница для panic (freebsd section 9) - Unix & Linux Commands". www.unix.com . Архивировано из оригинала 1 апреля 2024 г. Получено 26 октября 2010 г.
  3. ^ "boot failure-init died - Unix Linux Forums - HP-UX". www.unix.com . Архивировано из оригинала 1 апреля 2024 г. Получено 12 июня 2013 г.
  4. ^ Рэндольф Дж. Гербер (1 сентября 1999 г.). "Re: PANIC: init died". Группа новостей : comp.sys.sgi.admin. Архивировано из оригинала 22 января 2011 г. Получено 9 декабря 2017 г.
  5. ^ Daniel P. Siewiorek; Robert S. Swarz (1998). Надежные компьютерные системы: проектирование и оценка. AK Peters, Ltd. стр. 622. ISBN 978-1-56881-092-8. Получено 6 мая 2011 г. .
  6. ^ "Unix and Multics". www.multicians.org . Архивировано из оригинала 5 августа 2012 г. Получено 25 мая 2005 г.
  7. ^ "Исходный код /usr/sys/ken/prf.c". Архивировано из оригинала 24 февраля 2021 г.из V6 UNIX
  8. Стивен М. Хэнкок (22 ноября 2002 г.). Tru64 UNIX troubleshooting: diagnosticing and repairing system problemsHP Technologies SeriesITPro collection. Digital Press. стр. 119–126. ISBN 978-1-55558-274-6. Получено 3 мая 2011 г. .
  9. ^ Майкл Джанг (2006). Linux-раздражители для гиков. O'Reilly Media, Inc. стр. 267–274. ISBN 978-0-596-00801-7. Получено 29 апреля 2011 г. .
  10. Дэвид Поуг (17 декабря 2009 г.). Переход на Mac: недостающее руководство, издание Snow Leopard. O'Reilly Media, Inc. стр. 589. ISBN 978-0-596-80425-1. Получено 4 мая 2011 г. .
  11. ^ Грег Кроа-Хартман (2007). Ядро Linux в двух словах. O'Reilly Media, Inc. стр. 59. ISBN 978-0-596-10079-7. Получено 3 мая 2011 г. .
  12. Вольфганг Мауэрер (26 сентября 2008 г.). Профессиональная архитектура ядра Linux. Джон Уайли и сыновья. стр. 1238–1239. ISBN 978-0-470-34343-2. Архивировано из оригинала 1 апреля 2024 г. . Получено 3 мая 2011 г. .
  13. ^ "linux/init/main.c". LXR Cross Referencer . Архивировано из оригинала 6 октября 2022 г.
  14. ^ "Linux Device Drivers, Chapter 4" (PDF) . Архивировано (PDF) из оригинала 14 ноября 2014 г. . Получено 21 июля 2016 г. .
  15. ^ Джеймс Киркланд; Дэвид Кармайкл; Кристофер Л. Тинкер; Грегори Л. Тинкер (май 2006 г.). Устранение неполадок Linux для системных администраторов и опытных пользователей. Prentice Hall . стр. 62. ISBN 9780132797399. Архивировано из оригинала 1 апреля 2024 г. . Получено 5 февраля 2016 г. .
  16. ^ "OS X: О панике ядра - Поддержка Apple". support.apple.com . Архивировано из оригинала 21 мая 2013 г.
  17. ^ "Новый экран смерти для Mac OS X". OSXBook.com . Архивировано из оригинала 1 мая 2012 г. Получено 30 апреля 2011 г.
  18. ^ "OS X: О панике ядра". Поддержка Apple . Apple. Архивировано из оригинала 24 мая 2018 г.