Паника ядра
Паника ядра (иногда сокращенно КП). [1] ) — это мера безопасности, принимаемая операционной системы при ядром обнаружении внутренней фатальной ошибки , из-за которой либо оно не может безопасно восстановиться, либо продолжение работы системы будет иметь более высокий риск серьезной потери данных. Этот термин в значительной степени специфичен для Unix и Unix-подобных систем. Эквивалентом в операционных системах Microsoft Windows является стоп-ошибка , часто называемая «синим экраном смерти».
Подпрограммы ядра , обрабатывающие панику, известные как panic()
в исходном коде AT&T и BSD Unix, как правило, предназначены для вывода сообщения об ошибке на консоль , дампа образа памяти ядра на диск для последующей отладки , а затем либо ожидания перезагрузки системы вручную, либо запуска автоматическая перезагрузка . [2] Предоставленная информация носит сугубо технический характер и призвана помочь системному администратору или разработчику программного обеспечения в диагностике проблемы. Паника ядра также может быть вызвана ошибками, возникшими за пределами пространства ядра . Например, многие операционные системы Unix впадают в панику, если процесс инициализации , выполняющийся в пространстве пользователя , завершается. [3] [4]
История
[ редактировать ]Ядро Unix поддерживает внутреннюю согласованность и во время выполнения корректность с помощью утверждений в качестве механизма обнаружения ошибок . Основное предположение состоит в том, что аппаратное и программное обеспечение должно работать правильно, а невыполнение утверждения приводит к панике , то есть добровольной остановке всей системной активности. [5] Паника ядра появилась в ранней версии Unix и продемонстрировала существенное различие между философией проектирования Unix и ее предшественником Multics . Разработчик Multics Том ван Флек вспоминает обсуждение этого изменения с разработчиком Unix Деннисом Ритчи :
Я заметил Деннису, что половина кода, который я писал в Multics, представляла собой код восстановления ошибок. Он сказал: «Мы исключили все это. Если происходит ошибка, у нас есть такая процедура, называемая паникой, и когда она вызывается, машина выходит из строя, и вы кричите в коридор: «Эй, перезагрузите ее » . [6]
Оригинал panic()
Функция практически не изменилась от UNIX пятого издания до UNIX 32V на базе VAX и выдавала только сообщение об ошибке без какой-либо другой информации, а затем погружала систему в бесконечный цикл простоя.
Исходный код panic()
функция в V6 UNIX : [7]
/* * Если консоль выключена, * паникастр содержит аргумент для последнего * вызова паники. */ char * panicstr ; /* * Паника вызывается при неразрешимых * фатальных ошибках. * Он синхронизируется, печатает «panic: mesg» и * затем зацикливается. */ паника ( ы ) char * s ; { паникастр = s ; обновлять (); printf ( "паника: %s \n " , s ); для (;;) простоя (); }
Unix кодовой базы По мере расширения panic()
Также была улучшена функция вывода на консоль различных форм отладочной информации.
Причины
[ редактировать ]Паника может возникнуть в результате аппаратного сбоя или программного сбоя в операционной системе. Во многих случаях операционная система способна продолжить работу после возникновения ошибки. Однако система находится в нестабильном состоянии, и вместо того, чтобы рисковать нарушением безопасности и повреждением данных, операционная система останавливается, чтобы предотвратить дальнейший ущерб и облегчить диагностику ошибки и, в обычных случаях, перезагрузку. [8]
После перекомпиляции двоичного образа ядра из исходного кода частой проблемой является паника ядра при загрузке полученного ядра, если ядро не было правильно настроено, скомпилировано или установлено. [9] Дополнительное оборудование или неисправная оперативная память также могут быть источниками фатальных ошибок ядра во время запуска из-за несовместимости с ОС или отсутствия драйвера устройства . [10] Ядро также может войти в panic()
если он не может найти корневую файловую систему . [11] На заключительных этапах инициализации пользовательского пространства ядра обычно возникает паника, если запуск init завершается неудачно. Паника также может возникнуть, если процесс инициализации завершится, поскольку тогда система станет непригодной для использования. [12]
Ниже приведена реализация окончательной инициализации ядра Linux в kernel_init()
: [13]
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 ; паника ( "Init не найден. Попробуйте передать параметр init= ядру. " "См. документацию Linux/init.txt для получения инструкций." ); }
Особенности операционной системы
[ редактировать ]Линукс
[ редактировать ]Паника ядра возникает в Linux, как и в других Unix-подобных системах; однако серьезные, но нефатальные ошибки могут вызвать другой тип ошибки, известный как « kernel oops» . [14] В этом случае ядро обычно продолжает работать после завершения нарушителя процесса- . Поскольку сообщение oops может привести к тому, что некоторые подсистемы или ресурсы станут недоступными, это может позже привести к полной панике ядра.
В Linux паника ядра приводит к миганию светодиодов клавиатуры, что является визуальным индикатором критического состояния. [15]
macOS
[ редактировать ]возникает паника ядра , компьютер отображает многоязычное сообщение, информирующее пользователя о необходимости перезагрузки системы. Когда в Mac OS X 10.2–10.7 [16] До версии 10.2 отображалось более традиционное тревожное сообщение в стиле Unix; в версии 10.8 и более поздних версиях компьютер автоматически перезагружается и после перезагрузки отображает сообщение. Формат сообщения варьируется от версии к версии: [17]
- 10.0–10.1: Система отображает на экране текст с подробной информацией об ошибке и перестает отвечать на запросы.
- 10.2: Опускается черная прозрачная шторка, а затем на белом фоне отображается сообщение, информирующее пользователя о необходимости перезагрузки компьютера. Сообщение отображается на английском , французском , немецком и японском языках .
- 10.3–10.5: Паника ядра почти такая же, как и в версии 10.2, но фон экрана ошибки черный.
- 10.6–10.7: Текст был отредактирован и теперь включает перевод на испанский язык .
- 10.8 и более поздние версии: компьютер перестает отвечать на запросы перед немедленной перезагрузкой. Когда компьютер начинает резервное копирование, на несколько секунд отображается предупреждающее сообщение о перезагрузке компьютера из-за паники ядра, а затем компьютер перезагружается. Сообщение теперь включает китайский перевод.
Иногда, когда в течение трех минут после первого происходит пять или более паник ядра, Mac отображает запрещающий знак в течение 30 секунд, а затем выключается; это известно как «повторяющаяся паника ядра». [18]
Во всех версиях выше 10.2 текст накладывается на символ режима ожидания и не отображается на весь экран. Информация об отладке сохраняется в NVRAM и записывается в файл журнала при перезагрузке. В версии 10.7 есть функция автоматического перезапуска после паники ядра. В некоторых случаях в версии 10.2 и более поздних версиях помимо символа режима ожидания может отображаться белый текст с подробным описанием ошибки.
- Паника ядра Mac OS X 10.0–10.1
- Паника ядра Mac OS X 10.2
- Паника ядра Mac OS X 10.3–10.5
- Mac OS X 10.6 и 10.7 Паника ядра
- Сообщение, отображаемое после перезагрузки компьютера из-за паники ядра в OS X 10.8 и более поздних версиях
См. также
[ редактировать ]- Дамп ядра
- Синий экран смерти
- Фатальная системная ошибка
- Экран смерти
- Исключение машинной проверки (MCE)
- Надежность, доступность и удобство обслуживания (RAS)
Ссылки
[ редактировать ]- ^ «КП — Kernel Panic (Linux) | AcronymFinder» . www.acronymfinder.com . Архивировано из оригинала 26 октября 2015 года . Проверено 6 января 2016 г.
- ^ «FreeBSD 11.0 — справочная страница по панике (раздел 9 freebsd) — Команды Unix и Linux» . www.unix.com . Архивировано из оригинала 1 апреля 2024 года . Проверено 26 октября 2010 г.
- ^ «ошибка загрузки-init умерла - Форумы Unix Linux - HP-UX» . www.unix.com . Архивировано из оригинала 1 апреля 2024 года . Проверено 12 июня 2013 г.
- ^ Рэндольф Дж. Гербер (1 сентября 1999 г.). «Re: ПАНИКА: инициализация умерла» . Группа новостей : comp.sys.sgi.admin . Архивировано из оригинала 22 января 2011 года . Проверено 9 декабря 2017 г.
- ^ Дэниел П. Северек; Роберт С. Сварц (1998). Надежные компьютерные системы: проектирование и оценка . АК Петерс, ООО с. 622. ИСБН 978-1-56881-092-8 . Проверено 6 мая 2011 г.
- ^ «Юникс и мультики» . www.multicians.org . Архивировано из оригинала 5 августа 2012 года . Проверено 25 мая 2005 г.
- ^ «Исходный код /usr/sys/ken/prf.c» . Архивировано из оригинала 24 февраля 2021 г. из V6 UNIX.
- ^ Стивен М. Хэнкок (22 ноября 2002 г.). Устранение неполадок Tru64 UNIX: диагностика и исправление системных проблем. Коллекция HP Technologies SeriesITPro . Цифровая пресса. стр. 119–126. ISBN 978-1-55558-274-6 . Проверено 3 мая 2011 г.
- ^ Майкл Джанг (2006). Неудобства Linux для гиков . O'Reilly Media, Inc., стр. 267–274. ISBN 978-0-596-00801-7 . Проверено 29 апреля 2011 г.
- ^ Дэвид Пог (17 декабря 2009 г.). Переход на Mac: недостающее руководство, Snow Leopard Edition . О'Рейли Медиа, Инк. с. 589. ИСБН 978-0-596-80425-1 . Проверено 4 мая 2011 г.
- ^ Грег Кроа-Хартман (2007). Коротко о ядре Linux . О'Рейли Медиа, Инк. с. 59. ИСБН 978-0-596-10079-7 . Проверено 3 мая 2011 г.
- ^ Вольфганг Мауэрер (26 сентября 2008 г.). Профессиональная архитектура ядра Linux . Джон Уайли и сыновья. стр. 1238–1239. ISBN 978-0-470-34343-2 . Архивировано из оригинала 1 апреля 2024 года . Проверено 3 мая 2011 г.
- ^ "linux/init/main.c" . Перекрестный справочник LXR . Архивировано из оригинала 6 октября 2022 года.
- ^ « Драйверы устройств Linux , глава 4» (PDF) . Архивировано (PDF) из оригинала 14 ноября 2014 г. Проверено 21 июля 2016 г.
- ^ Джеймс Киркланд; Дэвид Кармайкл; Кристофер Л. Тинкер; Грегори Л. Тинкер (май 2006 г.). Устранение неполадок Linux для системных администраторов и опытных пользователей . Прентис Холл . п. 62. ИСБН 9780132797399 . Архивировано из оригинала 1 апреля 2024 года . Проверено 5 февраля 2016 г.
- ^ «OS X: О панике ядра — Служба поддержки Apple» . support.apple.com . Архивировано из оригинала 21 мая 2013 года.
- ^ «Новый экран смерти для Mac OS X» . OSXBook.com . Архивировано из оригинала 1 мая 2012 года . Проверено 30 апреля 2011 г.
- ^ «OS X: О панике ядра — Служба поддержки Apple» . support.apple.com . Архивировано из оригинала 24 мая 2018 года.