Kernel panic
Материал из Википедии — свободной энциклопедии
Kernel panic (англ. букв.: паника ядра) — сообщение о критической ошибке ядра операционной системы, после которой операционная система не может продолжать дальнейшую работу.
Обычно этот термин применяется в среде операционных систем типа UNIX. Её имя связано с текстом ошибки вида «Kernel panic: …» и именем функции ядра panic() из оригинальной ОС UNIX.
В Linux возникновению паники ядра зачастую предшествует состояние под названием oops. В ряде случаев oops может приводить к такому же неработоспобному состоянию системы, как и паника ядра.
Содержание |
[править] История
Сообщение Kernel panic было введено в ранних версиях UNIX и представляла собой важное отличие в философии этой операционной системы от главного конкурента на то время, Multics. Разработчик Multics, Том ван Влек так описывает это изменение в дискуссии с разработчиком UNIX Денисом Ритчи[1]:
Я сказал Деннису, что примерно половина кода, который я написал для Multics, был кодом обработки ошибок. Он ответил: «Мы всё это отбросили. Если произошла ошибка, у нас есть процедура под названием panic и если она вызвана, компьютер зависает и вы кричите: „Эй, перезапустите его!“»
Оригинальный текст (англ.)I remarked to Dennis that easily half the code I was writing in Multics was error recovery code. He said, «We left all that stuff out. If there’s an error, we have this routine called panic, and when it is called, the machine crashes, and you holler down the hall, ‘Hey, reboot it.’
Изначальная функция panic() принципиально не менялась от UNIX V5 до базирующихся на VAX систем 32V и выводила только сообщение об ошибке без дополнительной информации, после чего система переводилась в бесконечный пустой цикл. Позже, в процессе развития UNIX, функция panic() также была доработана и стала выводить на терминал разнообразную информацию, необходимую для отладки.
Подобный принцип обработки критических ошибок был перенят большинством более поздних операционных систем, таких как Mac OS[2] или Microsoft Windows.
[править] Причины для Kernel panic
В большинстве случаев причиной для Kernel panic является критическая аппаратная ошибка (отказ оперативной памяти, ошибка процессора или другого критически важного устройства) или ошибка в самом ядре операционной системы, например попытка обращения к ошибочному или запрещённому адресу в памяти. Также причиной для Kernel panic могут быть ошибки в драйверах периферийных устройств или ошибки в файловой системе.
Ошибки пользовательских программ в современных операционных системах не приводят к Kernel panic и должны корректно обрабатываться ядром.
[править] Исходный код функции panic()
Исходный код функции panic() в UNIX V6[3]:
char *panicstr; /* * Panic is called on unresolvable * fatal errors. * It syncs, prints "panic: mesg" and * then loops. */ panic(s) char *s; { panicstr = s; update(); printf("panic: %s\n", s); for(;;) idle(); }
[править] Обработка Kernel panic
В нормальном случае при возникновении Kernel panic происходит остановка работы операционной системы с выдачей сообщений об ошибках на экран, после чего система ожидает выключения компьютера или перезагрузки. Однако, такая обработка этого события неприемлема тогда, когда простой компьютера крайне нежелателен или человека нет рядом (например на удалённых серверах или в нерабочее время).
В современных операционных системах, таких как GNU/Linux, FreeBSD или Solaris, существует возможность изменить стандартное поведение функции panic() и производить перезагрузку компьютера автоматически. В GNU/Linux данная настройка осуществляется при помощи procfs:
echo 5 > /proc/sys/kernel/panic
Чтобы изменения действовали в GNU/Linux и после перезагрузки, необходимо добавить в файл /etc/sysctl.conf строку:
kernel.panic=5
А в FreeBSD в том же файле /etc/sysctl.conf:
ddb.panic=5
В обоих примерах «5» — количество секунд, после которых произойдёт перезагрузка. При установке отрицательного или равного 0 значения этого параметра, автоматической перезагрузки не произойдёт.[4]
Также в системах BSD есть специальная опция в ядре. Цитата из файла /usr/src/sys/conf/NOTES[5]:
# Set the amount of time (in seconds) the system will wait before # rebooting automatically when a kernel panic occurs. If set to (-1), # the system will wait indefinitely until a key is pressed on the # console. options PANIC_REBOOT_WAIT_TIME=16
В Solaris автоматическая перезагрузка после Kernel panic является стандартным поведением системы.[6]
Перезагрузка после Kernel panic имеет и очень серьёзный недостаток, особенно если это изменение не пропадает после первой перезагрузки. В случае, если перезагрузка не устраняет ту ошибку, которая вызывает Kernel panic, система будет останавливаться и перезапускаться вновь и вновь, что может привести к аппаратным ошибкам или потерям данных.
Для изучения причины паники ядра Linux может пригодится файл System.map.
В операционной системе Windows XP при возниковении ошибки компьютер перезагружается автоматически. Это поведение системы управляется через Панель управления Windows. Если ошибка происходит при загрузке ОС, изменить поведение системы можно через меню кнопки F8.
[править] Kernel panic в различных операционных системах
Изначально сообщение о Kernel panic ограничивалось коротким текстом о необходимости перезагрузки системы. В современных системах обычно выдается больше дополнительной информации.
- GNU/Linux и большинство других UNIX-совместимых операционных систем создаёт лог с описанием ошибки и выводят на экран сообщение об ошибке, содержащее информацию, необходимую для отладки и поиска причин этой ошибки. Этот механизм носит название Linux oops.
- В Mac OS X это сообщение было упрощено и сообщает лишь о необходимости перезапустить компьютер. Среди пользователей оно получило название «The Gray Screen of Panic and Disarray».
В то время как термин Kernel panic употребляется в основном для UNIX-совместимых операционных систем, в других операционных системах обработка критических ошибок методом остановки системы получила другие названия:
- В OS/2 это Trap
- В Windows 3.x: Black Screen of Death (англ.)
- В современных версиях Windows: Blue Screen of Death
- В старых компьютерах Macintosh: Sad Mac (англ.) (аппаратная ошибка при запуске системы), Bomb (англ.) (для ошибок программ или операционной системы)
- На компьютерах Amiga: Guru Meditation
- В PDA работающих под управлением Windows Mobile и Palm (Palmtop, Pocket PC, SmartPhone): White Screen of Death (англ.)
- На PSP это надпись на 10 языках: «Данные конфигурации повреждены. Нажмите O (кружок) для восстановления стандартной конфигурации.»
- В Synerji (на телефонах Motorola) сообщения на экран не выводятся, однако данные об ошибке записываются в специально отведённую область памяти Panic Area.
[править] Примечания
[править] См. также
[править] Ссылки
| Портал «Компьютерные технологии» | |
| Kernel panic на Викискладе? |
- Примеры исходного кода функции
panic()в Darwin/Mac OS X, Minix и Linux - Что такое Kernel panic на примере Mac OS X
- Информация о Kernel panic по-русски
- Изображения, посвящённые Kernel panic на Flickr
| Эта статья входит в число хороших статей русского раздела Википедии. |

