Kernel panika

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

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] .

Causes of Kernel Panic

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] .

Zdrojový kód Panic()

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ý (); }

Zvládání paniky jádra

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/panic

Aby se změny projevily v GNU/Linuxu po restartu, musíte do souboru přidat řádek /etc/sysctl.d/99-sysctl.conf:

kernel.panic = 5

Hodnota 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 = 16

V 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 .

Kernel panic na různých operačních systémech

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í.

  • GNU/Linux a většina ostatních operačních systémů kompatibilních se systémem UNIX generuje protokol popisující chybu a na obrazovce zobrazí chybovou zprávu obsahující informace potřebné k ladění a nalezení příčiny chyby. Tento mechanismus se nazývá Linux oops . Moderní distribuce Linuxu používají grafický server X Window a panika jádra nezpůsobuje přepnutí na fyzickou konzoli, která tiskne diagnostické zprávy. Kernel paniku poznáte tak, že na klávesnici bliká LED Caps Lock a Scroll Lock [16] .
  • V původních verzích Mac OS X (od 10.0 do 10.0.1.5) se analogicky s operačními systémy na bázi linuxového jádra zobrazovala na obrazovce informace o chybě, po které se systém zastavil. Počínaje Mac OS X 10.2 byla tato zpráva zjednodušena a říká vám restartovat počítač pouze ve čtyřech jazycích (angličtina, němčina, francouzština a japonština) bez ohledu na jazykovou verzi operačního systému [3] [17] . OS X však umožňuje [17] nahradit obrázek jakýmkoli jiným, což umožňuje vývojářům zobrazovat upravené chybové zprávy v různých situacích [17] . Díky této funkci je na OS X dokonce možné simulovat modrou obrazovku smrti operačního systému Windows nahrazením standardního obrázku screenshotem odpovídajícího obrázku Windows [17] .

V operačních systémech jiných než UNIX

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ů:

  • Ve většině verzí Microsoft Windows systém zamrzne s modrou obrazovkou se stručným popisem chyby [5] , která se nazývá Modrá obrazovka smrti . V operačním systému Windows XP se při výskytu chyby počítač automaticky restartuje. Toto chování systému je řízeno pomocí Ovládacích panelů Windows . Pokud při načítání operačního systému dojde k chybě, můžete změnit chování systému pomocí nabídky tlačítka F8 [5] .
  • Na starších počítačích Macintosh : Sad Mac (hardwarová chyba při spouštění systému) [18] , Bomb (pro chyby softwaru nebo operačního systému) [19] .
  • Na počítačích Amiga pod AmigaOS před 2.04 se tento mechanismus nazýval Guru Meditation a fungoval podobně jako Kernel panic na Unixu [20] . V dalších verzích byl z chybové zprávy odstraněn text „Guru meditace“ [20] .

Viz také

Poznámky

  1. 1 2 Kirkland, Tinker, 2006 , str. 51.
  2. Panic() info na UNIX.com . Manpage BSD na fórech UNIX a Linux (11. srpna 1995). Získáno 24. července 2012. Archivováno z originálu 6. srpna 2012.
  3. 1 2 3 4 Příčiny paniky jádra v systému Mac OS X. macmaps.com. Získáno 24. července 2012. Archivováno z originálu 6. srpna 2012.
  4. Unix a Multics . www.multicians.org (21. 3. 93). Získáno 24. července 2012. Archivováno z originálu 6. srpna 2012.
  5. 1 2 3 Informace o chování Windows v abnormálních situacích . Microsoft Corp. Načteno 24. července 2012. Archivováno z originálu 6. srpna 2012.
  6. 1 2 Karim Yaghmour, Jon Masters, Gilad Ben-Yossef, Philippe Gerum, 2008 , str. 170.
  7. Informace o příčinách paniky jádra na webu Apple . Apple Inc. Načteno 24. července 2012. Archivováno z originálu 6. srpna 2012.
  8. Wolfgang Mauerer. Profesionální architektura linuxového jádra  (neopr.) . - John Wiley and Sons , 2008. - S. 1238-1239. — ISBN 978-0-470-34343-2 .
  9. Google je čistý: Ano, za vaši jadernou paniku může Chrome . Betanews (7. ledna 2012). Získáno 24. července 2012. Archivováno z originálu 6. srpna 2012.
  10. Zdrojový kód prf.c UNIX V6 . Unixový strom. Získáno 24. července 2012. Archivováno z originálu 6. srpna 2012.
  11. 1 2 3 Kopper, 2005 , str. 178.
  12. Manuální stránka OpenBSD SYSCTL.CONF . OpenBSD. Získáno 24. července 2012. Archivováno z originálu 6. srpna 2012.
  13. Solaris System Engineers, 2009 , str. 9.3.4.2.
  14. Michael Urban, Brian Tiemann, 2002 , str. 172.
  15. Michael Schwarz, 2002 , str. 21.
  16. Kirkland, Tinker, 2006 , str. 52.
  17. 1 2 3 4 Nová obrazovka smrti pro Mac OS X. Amit Singh. Získáno 30. července 2012. Archivováno z originálu 6. srpna 2012.
  18. Ted Landau, 2000 , str. 133.
  19. Ted Landau, 2000 , str. 83.
  20. 1 2 Eric S. Raymond, 1996 , str. 230.

Literatura

  • Karla Koppera. Linux Enterprise Cluster: Vybudujte vysoce dostupný cluster. - No Starch Press, 2005. - S. 430. - ISBN 1593270364 .
  • Michael Urban, Brian Tiemann. Sams Naučte se FreeBSD za 24 hodin. - Sams Publishing, 2002. - S. 456. - ISBN 0672324245 .
  • James Kirkland, Christopher L. Tinker. Odstraňování problémů se systémem Linux pro systémové administrátory a pokročilé uživatele. - Prentice Hall Professional, 2006. - S. 571. - ISBN 0-13-185515-8 .
  • Karim Yaghmour, Jon Masters, Gilad Ben-Yossef, Philippe Gerum. Vytváření vestavěných linuxových systémů. - O'Reilly Media, 2008. - S. 439. - ISBN 0596529686 .
  • Systémoví inženýři Solaris. Základy správy systému Solaris 10. - Pearson Education, 2009. - S. 456. - ISBN 013700009X .
  • Michael Schwarz. Multitool Linux: Praktické využití softwaru s otevřeným zdrojovým kódem. - Addison-Wesley Professional, 2002. - S. 532. - ISBN 0201734206 .
  • Ted Landau. Smutné počítače Mac, bomby a další katastrofy: a co s nimi dělat . - Peachpit Press, 2000. - S.  955 . — ISBN 020169963X .
  • Eric S. Raymond. Nový hackerský slovník. - MIT Press, 1996. - S. 547. - ISBN 0262680920 .

Odkazy