Kernel panic
El kernel panic (en español: pánico en el núcleo) es un mensaje mostrado por el núcleo (kernel) de un sistema operativo una vez detectado un error interno de sistema del cual no se puede recuperar. Los kernel panic usualmente proveen información de depuración que es útil sólo para los desarrolladores del sistema operativo.
Kernel panic | ||
---|---|---|
Parte de screen of death | ||
Kernel panic en Linux. | ||
Información general | ||
Tipo de programa | Error de software | |
Historia
El kernel panic fue introducido en una versión temprana de Unix, y demostró una gran diferencia entre la filosofía de diseño de Unix y su predecesor Multics. La asunción básica es que el hardware y software deben funcionar correctamente y el fallo de una aserción resulta en un pánico, es decir, un detenimiento voluntario de toda actividad del sistema.[1] El concepto de pánico en el núcleo fue introducido en una versión temprana de Unix y demostró una diferencia importante con respecto entre las filosofías de diseño de Unix y su predecesor Multics. Tom van Vleck, uno de los desarrolladores de Multics, recuerda una discusión sobre este cambio con Dennis Ritchie:
I remarked to Dennis that easily half the code I was writing in Multics was error recovery code. He said, "We left all that stuff out. If there's an error, we have this routine called panic, and when it is called, the machine crashes, and you holler down the hall, 'Hey, reboot it.'"[2]
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 todo eso fuera. Si hay un error, tenemos esta rutina llamada pánico, y cuando se llama, la máquina se cuelga y gritas en el pasillo: "Oye, reinícialo"».
La función original panic()
no tuvo cambios importantes entre la Quinta Edición de UNIX y UNIX 32V para VAX. Solamente mostraba un mensaje de error sin más información, luego dejaba el sistema en un bucle infinito.
El siguiente es el código fuente de la función panic()
en UNIX V6:[3]
/*
* In case console is off,
* panicstr contains argument to last
* call to panic.
*/
char *panicstr;
/*
* Panic is called on unresolvable
* fatal errors.
* It syncs, prints "panic: mesg" and
* then loops.
*/
panic(s)
char *s;
{
panicstr = s;
update(S);
printf("panic: %s\n", s);
for(;;)
idle(N);
}
Conforme la base de código fue mejorada, la función panic()
también fue mejorada para imprimir distintos tipos de información de depuración en la consola.
Posibles causas
Intentos del sistema operativo para leer una dirección de memoria inválida o no permitida son una fuente común de kernel panics. El error también puede ocurrir como resultado de un fallo de hardware.
Es probable también que se presente si falta algún módulo que deba ir pegado al núcleo dependiendo del hardware con el que se cuente.
Un kernel panic puede ser producto de una explotación de una vulnerabilidad en algún módulo del núcleo de forma malintencionada, logrando corromper la integridad del sistema.
Véase también
Referencias
- Daniel P. Siewiorek; Robert S. Swarz (1998). Reliable computer systems: design and evaluation. A K Peters, Ltd. p. 622. ISBN 978-1-56881-092-8. Consultado el 6 de mayo de 2011.
- «Unix and Multics». www.multicians.org.
- Source code /usr/sys/ken/prf.c from V6 UNIX