En informática , un fallo o caída del sistema se produce cuando un programa informático, como una aplicación de software o un sistema operativo , deja de funcionar correctamente y se cierra . En algunos sistemas operativos o aplicaciones individuales, un servicio de notificación de fallos informará del fallo y de cualquier detalle relacionado con él (o dará al usuario la opción de hacerlo), normalmente al desarrollador o desarrolladores de la aplicación. Si el programa es una parte crítica del sistema operativo, todo el sistema puede bloquearse o colgarse, lo que a menudo da como resultado un pánico del núcleo o un error fatal del sistema .
La mayoría de los fallos son el resultado de un error de software . Las causas típicas incluyen el acceso a direcciones de memoria no válidas, [a] valores de dirección incorrectos en el contador del programa , desbordamiento del búfer , sobrescritura de una parte del código del programa afectado debido a un error anterior, ejecución de instrucciones de máquina no válidas (un código de operación ilegal o no autorizado ) o activación de una excepción no controlada . El error de software original que inició esta cadena de eventos generalmente se considera la causa del fallo, que se descubre a través del proceso de depuración . El error original puede estar muy alejado del código que realmente desencadenó el fallo.
En las primeras computadoras personales, intentar escribir datos en direcciones de hardware fuera de la memoria principal del sistema podía causar daños al hardware. Algunas fallas se pueden aprovechar y permiten que un programa malicioso o un hacker ejecute código arbitrario , lo que permite la replicación de virus o la adquisición de datos que normalmente serían inaccesibles.
Una aplicación normalmente se bloquea cuando realiza una operación que no está permitida por el sistema operativo. El sistema operativo entonces activa una excepción o señal en la aplicación. Las aplicaciones Unix tradicionalmente respondían a la señal volcando el núcleo . La mayoría de las aplicaciones GUI de Windows y Unix responden mostrando un cuadro de diálogo (como el que se muestra a la derecha) con la opción de adjuntar un depurador si hay uno instalado. Algunas aplicaciones intentan recuperarse del error y continúan ejecutándose en lugar de salir .
Una aplicación también puede contener código para bloquearse [b] después de detectar un error grave.
Los errores típicos que provocan bloqueos de la aplicación incluyen:
Se dice que un "bloqueo en el escritorio" ocurre cuando un programa (comúnmente un videojuego ) se cierra inesperadamente, llevando abruptamente al usuario de regreso al escritorio . Por lo general, el término se aplica solo a bloqueos en los que no se muestra ningún error, por lo tanto, todo lo que el usuario ve como resultado del bloqueo es el escritorio. Muchas veces no hay una acción aparente que cause un bloqueo en el escritorio. Durante el funcionamiento normal, el programa puede congelarse por un período de tiempo más corto y luego cerrarse por sí solo. También durante el funcionamiento normal, el programa puede convertirse en una pantalla negra y reproducir repetidamente los últimos segundos de sonido (dependiendo del tamaño del búfer de audio ) que se estaban reproduciendo antes de que se bloquee en el escritorio. Otras veces puede parecer que se activa por una determinada acción, como cargar un área.
Los errores de bloqueo en el escritorio se consideran particularmente problemáticos para los usuarios. Dado que con frecuencia no muestran ningún mensaje de error, puede ser muy difícil rastrear la fuente del problema, especialmente si las veces que ocurren y las acciones que se llevan a cabo justo antes del bloqueo no parecen tener ningún patrón o punto en común. Una forma de rastrear la fuente del problema en los juegos es ejecutarlos en modo ventana. Windows Vista tiene una función que puede ayudar a rastrear la causa de un problema de CTD cuando ocurre en cualquier programa. [ aclaración necesaria ] Windows XP también incluía una función similar. [ aclaración necesaria ]
Algunos programas de computadora, como StepMania y Bamzooki de la BBC , también se bloquean en el escritorio si están en pantalla completa, pero muestran el error en una ventana separada cuando el usuario regresa al escritorio.
El software que ejecuta el servidor web detrás de un sitio web puede fallar, volviéndolo completamente inaccesible o mostrando solo un mensaje de error en lugar del contenido normal.
Por ejemplo: si un sitio utiliza una base de datos SQL (como MySQL ) para un script (como PHP ) y ese servidor de base de datos SQL falla, PHP mostrará un error de conexión.
Un bloqueo del sistema operativo ocurre comúnmente cuando se produce una excepción de hardware que no se puede controlar . Los bloqueos del sistema operativo también pueden ocurrir cuando la lógica de verificación interna del sistema operativo detecta que el sistema operativo ha perdido su coherencia interna.
Los sistemas operativos multitarea modernos, como Linux y macOS , generalmente permanecen ilesos cuando falla un programa de aplicación.
Algunos sistemas operativos, por ejemplo, z/OS , tienen funciones de confiabilidad, disponibilidad y capacidad de servicio (RAS) y el sistema operativo puede recuperarse de la falla de un componente crítico, ya sea debido a una falla de hardware, por ejemplo, un error ECC incorregible, o a una falla de software, por ejemplo, una referencia a una página no asignada.
Un final anormal o ABEND es una terminación anormal del software o un bloqueo del programa. Los errores o bloqueos en el sistema operativo de red Novell NetWare se denominan normalmente ABEND. En Internet surgieron comunidades de administradores de NetWare , como abend.org.
Este uso deriva de la macro ABEND de los sistemas operativos IBM OS/360 , ..., z/OS . Generalmente se escribe con mayúscula, pero puede aparecer como "abend". Algunos códigos ABEND comunes son System ABEND 0C7 (excepción de datos) y System ABEND 0CB ( división por cero ). [1] [2] [3] Los Abend pueden ser "suaves" (permiten la recuperación automática) o "duros" (finalizan la actividad). [4] Se afirma jocosamente que el término deriva de la palabra alemana "Abend", que significa "tarde". [5]
Dependiendo de la aplicación, el fallo puede contener información confidencial y privada del usuario . [6] Además, muchos errores de software que causan fallos también son explotables para la ejecución de código arbitrario y otros tipos de escalada de privilegios . [7] [8] Por ejemplo, un desbordamiento de búfer de pila puede sobrescribir la dirección de retorno de una subrutina con un valor no válido, lo que provocará, por ejemplo, un fallo de segmentación , cuando la subrutina regrese. Sin embargo, si un exploit sobrescribe la dirección de retorno con un valor válido, se ejecutará el código en esa dirección.
Cuando se recopilan los fallos en el campo mediante un reportero de fallos , el siguiente paso para los desarrolladores es poder reproducirlos localmente. Para ello, existen varias técnicas: STAR utiliza la ejecución simbólica, [9] EvoCrash realiza una búsqueda evolutiva. [10]