Kernel panic (del inglés - "alarma, falla en el kernel", literalmente kernel panic ) - un mensaje sobre un error crítico del kernel del sistema operativo , después del cual el sistema operativo no puede continuar trabajando [1] .
El término se suele utilizar en un entorno de sistema operativo como UNIX . Su nombre está relacionado con el texto de error de la forma " Kernel panic: …" y el nombre de la función del núcleo del sistema operativo UNIXpanic() original [2] .
Kernel panic es posible en Android , que se basa en el kernel de Linux . Dado que Mac OS X e iOS se basan en Darwin , que es una clase de sistemas UNIX, también están sujetos al pánico del kernel. [3] .
La historia de Kernel panic está estrechamente relacionada con la del sistema operativo UNIX , que fue desarrollado a finales de la década de 1960 por empleados de Bell Labs , sobre todo Ken Thompson , Dennis Ritchie y Douglas McIlroy .
El mensaje de pánico del kernel se introdujo en las primeras versiones de UNIX y representó una diferencia importante en la filosofía del sistema operativo con respecto al principal competidor y predecesor de UNIX, Multics . Multics se diseñó para ejecutarse en el mainframe GE-645 de 36 bits , mientras que UNIX se diseñó para ejecutarse en la minicomputadora PDP-7 de 18 bits mucho menos poderosa y, por esta razón, había menos recursos disponibles para el sistema operativo, lo que llevó a la necesidad de conservar recursos, incluido el manejo de errores. El desarrollador de Multics, Tom van Vleck, describe este cambio en una conversación con el desarrollador de UNIX, Dennis Ritchie [4] :
Le dije a Dennis que aproximadamente la mitad del código que escribí para Multics era código de manejo de errores. Él respondió: “Lo dejamos todo. Si ocurre un error, tenemos un procedimiento llamado pánico , y si se llama, la computadora se congela y gritas: "¡Oye, reinícialo!".
Texto original (inglés)[ mostrarocultar] Le comenté a Dennis que fácilmente la mitad del código que estaba escribiendo en Multics era código de recuperación de errores. Él dijo: “Dejamos todas esas cosas fuera. Si hay un error, tenemos esta rutina llamada panic, y cuando se llama, la máquina falla y usted grita en el pasillo: 'Oye, reinícialo'.La función original panic()no cambió fundamentalmente de UNIX V5 a sistemas de 32 V basados en VAX , y solo imprimía un mensaje de error sin información adicional, después de lo cual el sistema entraba en un ciclo vacío sin fin . Posteriormente, durante el desarrollo de UNIX, la función panic()se finalizó y comenzó a mostrar una variedad de información necesaria para la depuración en la terminal .
Este principio de manejo de errores críticos fue adoptado por la mayoría de los sistemas operativos posteriores, como Mac OS [3] o Microsoft Windows [5] .
Una de las causas más comunes de kernel panic es la incapacidad de encontrar y montar el sistema de archivos raíz. Suele ser un error de configuración que se puede solucionar reiniciando manualmente el kernel [6] .
En Linux, la aparición de un kernel panic a menudo está precedida por una condición llamada oops . En algunos casos, los errores pueden llevar al mismo estado de mal estado del sistema que un kernel panic [1] .
En la mayoría de los demás casos, la causa de Kernel panic es un error crítico de hardware ( falla de RAM , error de procesador , placa base, tarjeta gráfica u otro dispositivo crítico) o un error en el propio kernel del sistema operativo , por ejemplo, un intento de acceder a un dirección errónea o prohibida en la memoria. Otras causas de Kernel panic pueden ser errores en los controladores de dispositivos periféricos o errores en el sistema de archivos [3] [7] . Durante la etapa final de la inicialización del espacio de usuario , generalmente ocurre un kernel panic cuando init falla al ejecutarse porque, a pesar de que el kernel se ejecuta y se ejecuta, el sistema en sí permanece inutilizable [8] . El pánico del kernel también puede ser causado por programas de aplicación si no funcionan correctamente con el kernel. Por ejemplo, un error en Google Chrome provocó pánico en el Kernel en Mac OS X [9] .
Código fuente UNIX V6 [10] panic() :
char * panicstr ; /* * Se llama pánico en errores irresolubles * fatales. * Se sincroniza, imprime "panic: mesg" y * luego se repite. */ pánico ( s ) char * s ; { panicstr = s ; actualizar (); printf ( "pánico:%s \n " , s ); para (;;) inactivo (); }En el caso normal, cuando ocurre un Kernel panic, el sistema operativo deja de funcionar con mensajes de error en la pantalla, luego de lo cual el sistema espera a que la computadora se apague o reinicie . Sin embargo, tal procesamiento de este evento es inaceptable cuando una computadora simple es altamente indeseable o una persona no está presente (por ejemplo, en servidores remotos o fuera del horario laboral) [11] .
En sistemas operativos modernos como GNU/Linux , FreeBSD o Solaris , es posible cambiar el comportamiento predeterminado de la función panic() y reiniciar la computadora automáticamente. En GNU/Linux, esta configuración se realiza mediante procfs [11] :
echo 5 > /proc/sys/kernel/panicPara que los cambios surtan efecto en GNU/Linux después de reiniciar, debe agregar una línea al archivo /etc/sysctl.d/99-sysctl.conf:
núcleo.panic = 5El valor del parámetro kernel.panic es la cantidad de segundos después de los cuales ocurrirá un reinicio. Establecer este parámetro en un valor negativo o igual a 0 no reiniciará automáticamente [11] .
También en los sistemas BSD hay una opción especial en el kernel. Cita del archivo /usr/src/sys/conf/NOTES[12] :
# Establezca la cantidad de tiempo (en segundos) que el sistema esperará antes de # reiniciarse automáticamente cuando ocurra un pánico del kernel. Si se establece en (-1), # el sistema esperará indefinidamente hasta que se presione una tecla en la # consola. opciones PANIC_REBOOT_WAIT_TIME = 16En Solaris , el reinicio automático después de un Kernel panic es un comportamiento estándar del sistema [13] .
Reiniciar después de un Kernel panic también tiene una desventaja muy seria, especialmente si el cambio no desaparece después del primer reinicio . En el caso de que un reinicio no solucione el error que causa el Kernel panic, el sistema se detendrá y reiniciará una y otra vez, lo que puede provocar errores de hardware o pérdida de datos [6] . En el caso de que esta situación surgiera después de compilar un nuevo kernel, la solución al problema puede ser cargar una copia guardada del antiguo kernel en funcionamiento. Como regla general, para esto es suficiente especificar manualmente la ruta a una copia de trabajo del kernel durante el arranque [14] .
El archivo System.map [15] puede ser útil para investigar la causa de un pánico en el kernel de Linux .
Inicialmente, el mensaje de pánico del Kernel se limitaba a un breve texto sobre la necesidad de reiniciar el sistema. En los sistemas modernos, generalmente se proporciona más información adicional.
Si bien el término Kernel panic se usa principalmente para los sistemas operativos compatibles con UNIX , en otros sistemas operativos , el manejo de errores críticos al detener el sistema también se ha arraigado y ha recibido los siguientes nombres: