Kernel panic (z angličtiny - "alarm, failure in the kernel", doslova kernel panic ) - zpráva o kritické chybě jádra operačního systému , po které operační systém nemůže pokračovat v další práci [1] .
Termín se obvykle používá v prostředí operačního systému, jako je UNIX . Jeho název souvisí s textem chyby ve tvaru " Kernel panic: …" a názvem funkce jádra panic()z původního OS UNIX [2] .
Panika jádra je možná na Androidu , který je založen na jádře Linuxu . Vzhledem k tomu , že Mac OS X a iOS jsou založeny na Darwinu , což je třída systémů UNIX, jsou také předmětem jaderné paniky. [3] .
Historie jaderné paniky úzce souvisí s historií operačního systému UNIX , který byl vyvinut na konci 60. let zaměstnanci Bell Labs , zejména Kenem Thompsonem , Dennisem Ritchie a Douglasem McIlroyem .
Zpráva o panice jádra byla zavedena v raných verzích UNIXu a představovala důležitý rozdíl ve filozofii operačního systému od hlavního konkurenta a předchůdce UNIXu, Multics . Multics byl navržen tak, aby běžel na 36bitovém sálovém počítači GE-645 , zatímco UNIX byl navržen tak, aby běžel na mnohem méně výkonném 18bitovém minipočítači PDP-7 , a z tohoto důvodu měl operační systém k dispozici méně zdrojů, což vedlo na potřebu šetřit zdroje, včetně zpracování chyb. Vývojář Multics Tom van Vleck popisuje tuto změnu v diskusi s vývojářem UNIX Dennisem Ritchiem [4] :
Řekl jsem Dennisovi, že asi polovina kódu, který jsem napsal pro Multics, byl kód pro zpracování chyb. Odpověděl: „Všechno jsme to nechali. Pokud dojde k chybě, máme proceduru nazvanou panika , a pokud je volána, počítač zamrzne a vy křičíte: „Hej, restartuj to!“.
Původní text (anglicky)[ zobrazitskrýt] Poznamenal jsem Dennisovi, že snadno polovina kódu, který jsem psal v Multics, byl kód pro obnovu chyb. Řekl: "Všechny ty věci jsme vynechali." Pokud dojde k chybě, máme tuto rutinu zvanou panika, a když je zavolána, stroj se zhroutí a vy křičíte chodbou: "Hej, restartuj to."Původní funkce panic()se zásadně nezměnila z UNIX V5 na 32V systémy založené na VAX a pouze vytiskla chybovou zprávu bez dalších informací, po které by se systém dostal do nekonečné prázdné smyčky . Později, během vývoje UNIXu, byla funkce panic()dokončena a začala zobrazovat různé informace potřebné pro ladění na terminálu .
Tento princip zpracování kritických chyb převzala většina pozdějších operačních systémů, jako je Mac OS [3] nebo Microsoft Windows [5] .
Jednou z nejčastějších příčin paniky jádra je neschopnost najít a připojit kořenový souborový systém. Často se jedná o chybu konfigurace, kterou lze opravit ručním restartem jádra [6] .
V Linuxu výskytu jaderné paniky často předchází stav zvaný oops . V některých případech mohou oops vést ke stejnému nezdravému stavu systému jako panice jádra [1] .
Ve většině ostatních případů je příčinou paniky jádra kritická hardwarová chyba ( selhání paměti RAM , chyba procesoru , základní desky, grafické karty nebo jiného kritického zařízení) nebo chyba v samotném jádře operačního systému , například pokus o přístup k chybná nebo zakázaná adresa v paměti. Dalšími příčinami paniky jádra mohou být chyby v ovladačích periferních zařízení nebo chyby v systému souborů [3] [7] . Během závěrečné fáze inicializace uživatelského prostoru obvykle dochází k panice jádra, když se init nepodaří spustit , protože i přes běžící a běžící jádro zůstává samotný systém nepoužitelný [8] . Paniku jádra mohou také způsobit aplikační programy, pokud s jádrem nepracují správně. Například chyba v prohlížeči Google Chrome způsobila paniku jádra v systému Mac OS X [9] .
UNIX V6 [10] panic() zdrojový kód :
char * panicstr ; /* * Při neřešitelných * fatálních chybách je vyvolána panika. * Synchronizuje se, vytiskne "panic: mesg" a * poté se zacyklí. */ panika ( y ) char * s ; { panicstr = s ; aktualizace (); printf ( "panika:%s \n " , s ); pro (;;) nečinný (); }V normálním případě, když dojde k panice jádra, operační systém přestane pracovat s chybovými zprávami na obrazovce, načež systém čeká na vypnutí nebo restart počítače . Takové zpracování této události je však nepřijatelné, když je jednoduchý počítač vysoce nežádoucí nebo když není v blízkosti osoba (například na vzdálených serverech nebo mimo pracovní dobu) [11] .
Na moderních operačních systémech, jako je GNU/Linux , FreeBSD nebo Solaris , je možné změnit výchozí chování funkce panic() a restartovat počítač automaticky. Na GNU/Linuxu se tato konfigurace provádí pomocí procfs [11] :
echo 5 > /proc/sys/kernel/panicAby se změny projevily v GNU/Linuxu po restartu, musíte do souboru přidat řádek /etc/sysctl.d/99-sysctl.conf:
kernel.panic = 5Hodnota parametru kernel.panic je počet sekund, po kterých dojde k restartu. Nastavení tohoto parametru na zápornou hodnotu nebo rovnou 0 se automaticky nerestartuje [11] .
Také na systémech BSD existuje v jádře speciální volba. Citace ze souboru /usr/src/sys/conf/NOTES[12] :
# Nastavte dobu (v sekundách), po kterou bude systém čekat, než se # automaticky restartuje, když dojde k panice jádra. Je-li nastaveno na (-1), # bude systém čekat neomezeně dlouho, dokud nebude stisknuta klávesa # na konzole. možnosti PANIC_REBOOT_WAIT_TIME = 16V Solarisu je automatický restart po panice jádra standardním chováním systému [13] .
Restartování po panice jádra má také velmi vážnou nevýhodu, zvláště pokud změna nezmizí po prvním restartu . V případě, že restart neodstraní chybu způsobující paniku jádra, systém se zastaví a znovu a znovu restartuje, což může vést k hardwarovým chybám nebo ztrátě dat [6] . V případě, že tato situace nastala po sestavení nového jádra, řešením problému může být načtení uložené kopie starého funkčního jádra. Zpravidla k tomu stačí při bootování ručně zadat cestu k pracovní kopii jádra [14] .
Soubor System.map [15] může být užitečný při vyšetřování příčiny paniky linuxového jádra .
Zpočátku byla zpráva o panice jádra omezena na krátký text o nutnosti restartovat systém. V moderních systémech je obvykle uvedeno více dalších informací.
Zatímco výraz Kernel panic se používá hlavně pro operační systémy kompatibilní se systémem UNIX , v jiných operačních systémech se také zakořenilo řešení kritických chyb zastavením systému a dostalo se mu následujících názvů: