Kernel pánik ( angolul - "riasztás, hiba a kernelben", szó szerint kernel pánik ) - üzenet az operációs rendszer kernelének kritikus hibájáról , amely után az operációs rendszer nem tudja folytatni a további munkát [1] .
A kifejezést általában olyan operációs rendszer környezetben használják, mint például a UNIX . Kernel panic: …Neve a " " formátumú hibaszöveghez és a kernelfüggvény nevéhez kapcsolódik panic()az eredeti UNIX operációs rendszerből [2] .
Kernelpánik lehetséges a Linux kernelen alapuló Androidon . Mivel a Mac OS X és iOS a Darwin - on alapul , amely a UNIX rendszerek egy osztálya, ezért ezek is ki vannak téve a kernelpániknak. [3] .
A Kernel pánik története szorosan összefügg a UNIX operációs rendszerével , amelyet az 1960 -as évek végén fejlesztettek ki a Bell Labs alkalmazottai , nevezetesen Ken Thompson , Dennis Ritchie és Douglas McIlroy .
A kernel pániküzenetet a UNIX korai verzióiban vezették be, és az operációs rendszer filozófiájában fontos különbséget jelentett a UNIX fő versenytársától és elődjétől, a Multicstól . A Multicsot a 36 bites GE-645 nagyszámítógépen való futtatásra tervezték, míg a UNIX-ot a sokkal kisebb teljesítményű, 18 bites PDP-7 miniszámítógépen való futtatásra tervezték, és emiatt kevesebb erőforrás állt az operációs rendszer rendelkezésére, ami az erőforrások megtakarításának szükségessége miatt, beleértve a hibakezelést is. A Multics fejlesztője, Tom van Vleck leírja ezt a változást a UNIX fejlesztővel, Dennis Ritchie-vel folytatott megbeszélésen [4] :
Mondtam Dennisnek, hogy a Multicshoz írt kódnak körülbelül a fele hibakezelő kód. Azt válaszolta: „Eldobtuk az egészet. Ha hiba történik, van egy pánik nevű eljárásunk , és ha ezt lehívják, a számítógép lefagy, és Ön azt kiáltja: „Hé, indítsd újra!”.
Eredeti szöveg (angol)[ showelrejt] Megjegyeztem Dennisnek, hogy a Multics-ban írt kód fele könnyen hibahelyreállító kód volt. Azt mondta: „Ezt az egészet kihagytuk. Ha hiba történik, van egy pánik nevű rutinunk, és amikor hívják, a gép összeomlik, és a folyosón kiabálsz: "Hé, indítsd újra."Az eredeti funkció panic()alapvetően nem változott UNIX V5-ről VAX alapú 32V -os rendszerekre, és csak egy hibaüzenetet nyomtatott ki további információk nélkül, ami után a rendszer egy végtelen üres hurokba kerül . Később, a UNIX fejlesztése során a funkció panic()véglegesítésre került, és elkezdte megjeleníteni a terminálon a hibakereséshez szükséges információkat .
A kritikus hibakezelésnek ezt az elvét a legtöbb későbbi operációs rendszer átvette, mint például a Mac OS [3] vagy a Microsoft Windows [5] .
A kernelpánik egyik leggyakoribb oka a gyökérfájlrendszer megtalálásának és csatlakoztatásának képtelensége. Ez gyakran konfigurációs hiba, amelyet a kernel manuális újraindításával lehet kijavítani [6] .
Linuxon a kernelpánik előfordulását gyakran megelőzi az hoppá nevű állapot . Egyes esetekben az hoppá a rendszer ugyanolyan egészségtelen állapotához vezethet, mint a kernelpánik [1] .
A legtöbb esetben a kernelpánik oka egy kritikus hardverhiba ( RAM hiba , processzorhiba , alaplap, grafikus kártya vagy más kritikus eszköz) vagy magában az operációs rendszer kernelében lévő hiba , például egy hibás vagy tiltott cím a memóriában. A kernelpánik további okai lehetnek a periféria - illesztőprogramok vagy a fájlrendszer hibái [3] [7] . A felhasználói terület inicializálásának utolsó szakaszában általában kernelpánik lép fel, amikor az init nem fut , mert a futó és futó kernel ellenére maga a rendszer használhatatlan marad [8] . A kernelpánikot alkalmazási programok is okozhatják, ha nem működnek megfelelően a kernellel. Például a Google Chrome hibája kernelpánikot okozott Mac OS X rendszeren [9] .
UNIX V6 [10] panic() forráskód :
char * panicstr ; /* * A pánikot feloldhatatlan * végzetes hibákra hívják . * Szinkronizál, kiírja a "panic: mesg"-et és *-ot, majd hurkot. */ pánik ( ok ) char * s ; { panicstr = s ; frissítés (); printf ( "pánik:%s \n " , s ); mert (;;) tétlen (); }Normál esetben, amikor kernel pánik lép fel, az operációs rendszer leáll , és hibaüzenetek jelennek meg a képernyőn, ami után a rendszer megvárja, hogy a számítógép leálljon vagy újrainduljon . Ennek az eseménynek az ilyen feldolgozása azonban elfogadhatatlan, ha egy egyszerű számítógép nagyon nem kívánatos, vagy ha valaki nincs a közelben (például távoli szervereken vagy munkaidőn túl) [11] .
A modern operációs rendszereken, mint például a GNU/Linux , a FreeBSD vagy a Solaris , lehetőség van a panic() függvény alapértelmezett viselkedésének megváltoztatására és a számítógép automatikus újraindítására. GNU/Linux esetén ez a konfiguráció procfs [11] használatával történik :
echo 5 > /proc/sys/kernel/panicAhhoz, hogy a változtatások érvénybe lépjenek a GNU/Linux rendszerben az újraindítás után, hozzá kell adni egy sort a fájlhoz /etc/sysctl.d/99-sysctl.conf:
kernel.panic = 5A kernel.panic paraméter értéke az a másodperc, amely után az újraindítás megtörténik. Ha ezt a paramétert negatívra vagy 0-ra állítja, az nem indul automatikusan újra [11] .
BSD rendszereken is van egy speciális opció a kernelben. /usr/src/sys/conf/NOTESIdézet a [12] fájlból :
# Állítsa be azt az időt (másodpercben), ameddig a rendszer # automatikusan újraindul, ha kernelpánik lép fel. Ha (-1), # a rendszer korlátlan ideig vár, amíg meg nem nyomnak egy gombot a # konzolon. opciók PANIC_REBOOT_WAIT_TIME = 16A Solaris rendszerben a rendszermag-pánik utáni automatikus újraindítás a szokásos rendszerviselkedés [13] .
A kernel pánik utáni újraindításnak is van egy nagyon komoly hátránya, különösen, ha a változás nem szűnik meg az első újraindítás után . Abban az esetben, ha az újraindítás nem javítja ki a Kernel pánikot okozó hibát, a rendszer újra és újra leáll és újraindul, ami hardverhibákhoz vagy adatvesztéshez vezethet [6] . Abban az esetben, ha ez a helyzet egy új kernel felépítése után állna elő, a probléma megoldása a régi, működő kernel mentett másolatának betöltése lehet. Általános szabály, hogy ehhez elegendő manuálisan megadni a kernel munkapéldányának elérési útját a rendszerindítás során [14] .
A System.map [15] fájl hasznos lehet a Linux kernelpánik okának kivizsgálásához .
Kezdetben a Kernel pánik üzenete egy rövid szövegre korlátozódott a rendszer újraindításának szükségességéről. A modern rendszerekben általában több kiegészítő információt adnak meg.
Míg a kernelpánik kifejezést főként UNIX - kompatibilis operációs rendszerekre használják, más operációs rendszerekben a kritikus hibák rendszerleállítással történő kezelése is meghonosodott, és a következő neveket kapta: