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

Kernel panic
Parte de screen of death

Kernel panic en Linux.
Información general
Tipo de programa Error de software
Kernel panic.

Historia

editar

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.[2]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.'"[3]

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:[4]

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

editar

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

editar

Referencias

editar
  1. Marijan, Bosko (20 de junio de 2023). «Kernel Panic: Definition and Causes | phoenixNAP KB». Knowledge Base by phoenixNAP (en inglés estadounidense). Consultado el 10 de mayo de 2024. 
  2. 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. 
  3. «Unix and Multics». www.multicians.org. 
  4. Source code /usr/sys/ken/prf.c from V6 UNIX