Kernel panic (din engleză - „alarm, failure in the kernel”, literalmente kernel panic ) - un mesaj despre o eroare critică a nucleului sistemului de operare , după care sistemul de operare nu poate continua munca [1] .
Termenul este folosit de obicei într-un mediu de sistem de operare, cum ar fi UNIX . Numele său este legat de textul de eroare al formei " Kernel panic: …" și de numele funcției kernel din sistemul de operare UNIXpanic() original [2] .
Panica kernelului este posibilă pe Android , care se bazează pe nucleul Linux . Deoarece Mac OS X și iOS se bazează pe Darwin , care este o clasă de sisteme UNIX, ele sunt, de asemenea, supuse panicii nucleului. [3] .
Istoria panicii Kernel este strâns legată de cea a sistemului de operare UNIX , care a fost dezvoltat la sfârșitul anilor 1960 de către angajații Bell Labs , în special Ken Thompson , Dennis Ritchie și Douglas McIlroy .
Mesajul de panică Kernel a fost introdus în versiunile timpurii ale UNIX și a reprezentat o diferență importantă în filozofia sistemului de operare față de principalul concurent și predecesor al UNIX, Multics . Multics a fost proiectat să ruleze pe mainframe -ul GE-645 pe 36 de biți , în timp ce UNIX a fost proiectat să ruleze pe minicalculatorul PDP-7 pe 18 biți, mult mai puțin puternic , și din acest motiv, mai puține resurse erau disponibile pentru sistemul de operare, ceea ce a condus la nevoia de conservare a resurselor, inclusiv gestionarea erorilor. Dezvoltatorul Multics Tom van Vleck descrie această schimbare într-o discuție cu dezvoltatorul UNIX Dennis Ritchie [4] :
I-am spus lui Dennis că aproximativ jumătate din codul pe care l-am scris pentru Multics era cod de gestionare a erorilor. El a răspuns: „Am scăpat totul. Dacă apare o eroare, avem o procedură numită panică , iar dacă este numită, computerul se blochează și tu țipi: „Hei, repornește-l!”.
Text original (engleză)[ arataascunde] I-am remarcat lui Dennis că jumătate din codul pe care îl scriam în Multics era un cod de recuperare a erorilor. El a spus: „Am lăsat toate aceste lucruri afară. Dacă apare o eroare, avem această rutină numită panică, iar când este apelată, mașina se prăbușește, iar tu strigi pe hol, „Hei, repornește-l”.Funcția originală panic()nu s-a schimbat fundamental de la UNIX V5 la sistemele 32V bazate pe VAX și ar tipări doar un mesaj de eroare fără informații suplimentare, după care sistemul ar intra într- o buclă nesfârșită goală . Mai târziu, în timpul dezvoltării UNIX, funcția panic()a fost finalizată și a început să afișeze o varietate de informații necesare pentru depanare pe terminal .
Acest principiu al gestionării erorilor critice a fost adoptat de majoritatea sistemelor de operare ulterioare, cum ar fi Mac OS [3] sau Microsoft Windows [5] .
Una dintre cele mai frecvente cauze de panică a nucleului este incapacitatea de a găsi și monta sistemul de fișiere rădăcină. Aceasta este adesea o eroare de configurare care poate fi remediată prin repornirea manuală a nucleului [6] .
Pe Linux, apariția unei panică a nucleului este adesea precedată de o condiție numită oops . În unele cazuri, oops poate duce la aceeași stare nesănătoasă a sistemului ca o panică a nucleului [1] .
În majoritatea celorlalte cazuri, cauza panicii Kernel este o eroare hardware critică ( defecțiune RAM , eroare procesor , placă de bază, placă grafică sau alt dispozitiv critic) sau o eroare în nucleul sistemului de operare în sine , de exemplu, o încercare de a accesa un adresa eronată sau interzisă în memorie. Alte cauze pentru panica Kernel pot fi erori în driverele dispozitivelor periferice sau erori în sistemul de fișiere [3] [7] . În timpul etapei finale a inițializării spațiului utilizatorului , o panică a nucleului apare de obicei atunci când init eșuează să ruleze , deoarece, în ciuda unui nucleu care rulează și rulează, sistemul în sine rămâne inutilizabil [8] . Panica nucleului poate fi cauzată și de programele de aplicație dacă acestea nu funcționează corect cu nucleul. De exemplu, o eroare în Google Chrome a provocat panică Kernel pe Mac OS X [9] .
Cod sursă UNIX V6 [10] panic() :
char * panicstr ; /* * Panica este apelată la erori nerezolvabile * fatale. * Se sincronizează, afișează „panic: mesg” și * apoi face bucle. */ panică ( e ) char * s ; { panicstr = s ; actualizare (); printf ( "panica:%s \n " , s ); pentru (;;) inactiv (); }În cazul normal, atunci când apare o panică Kernel, sistemul de operare nu mai funcționează cu mesaje de eroare pe ecran, după care sistemul așteaptă ca computerul să se închidă sau să se repornească . Cu toate acestea, o astfel de procesare a acestui eveniment este inacceptabilă atunci când un simplu computer este extrem de nedorit sau o persoană nu este în preajmă (de exemplu, pe servere la distanță sau după ore) [11] .
Pe sistemele de operare moderne precum GNU/Linux , FreeBSD sau Solaris , este posibil să schimbați comportamentul implicit al funcției panic() și să reporniți automat computerul. Pe GNU/Linux, această configurație se face folosind procfs [11] :
echo 5 > /proc/sys/kernel/panicPentru ca modificările să aibă efect în GNU/Linux după o repornire, trebuie să adăugați o linie la fișier /etc/sysctl.d/99-sysctl.conf:
nucleu.panica = 5Valoarea parametrului kernel.panic este numărul de secunde după care va avea loc o repornire. Setarea acestui parametru la o valoare negativă sau egală cu 0 nu va reporni automat [11] .
De asemenea, pe sistemele BSD există o opțiune specială în nucleu. Citat din dosarul /usr/src/sys/conf/NOTES[12] :
# Setați perioada de timp (în secunde) în care sistemul va aștepta înainte de # repornirea automată când apare o panică a nucleului. Dacă este setat la (-1), # sistemul va aștepta la nesfârșit până când o tastă este apăsată pe consola #. opțiunile PANIC_REBOOT_WAIT_TIME = 16În Solaris , repornirea automată după o panică Kernel este comportamentul standard al sistemului [13] .
Repornirea după o panică Kernel are, de asemenea, un dezavantaj foarte serios, mai ales dacă modificarea nu dispare după prima repornire . În cazul în care o repornire nu remediază eroarea care provoacă panica Kernel, sistemul se va opri și repornește din nou și din nou, ceea ce poate duce la erori hardware sau pierderi de date [6] . În cazul în care această situație a apărut după construirea unui nou nucleu, soluția problemei poate fi încărcarea unei copii salvate a vechiului nucleu funcțional. De regulă, pentru aceasta este suficient să specificați manual calea către o copie de lucru a nucleului în timpul pornirii [14] .
Fișierul System.map [15] poate fi util pentru a investiga cauza unei panică a nucleului Linux .
Inițial, mesajul de panică Kernel a fost limitat la un scurt text despre necesitatea de a reporni sistemul. În sistemele moderne, se oferă de obicei mai multe informații suplimentare.
În timp ce termenul Kernel panic este folosit în principal pentru sistemele de operare compatibile cu UNIX , în alte sisteme de operare , gestionarea erorilor critice prin oprirea sistemului a luat rădăcină și a primit următoarele nume: