
En informática , un fallo del sistema se produce cuando un programa informático, como una aplicación o un sistema operativo, deja de funcionar correctamente y se cierra . En algunos sistemas operativos o aplicaciones, un servicio de informes de fallos notifica el fallo y cualquier detalle relacionado (o permite al usuario hacerlo), normalmente a los desarrolladores de la aplicación. Si el programa es una parte fundamental del sistema operativo, todo el sistema puede fallar o bloquearse, lo que suele provocar un pánico del kernel o un error fatal del sistema .
La mayoría de los fallos son consecuencia de un error de software . Las causas típicas incluyen el acceso a direcciones de memoria no válidas, valores de dirección incorrectos en el contador de programa , desbordamiento de 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 se considera generalmente la causa del fallo, que se descubre durante el proceso de depuración . El error original puede estar muy alejado del código que realmente provocó el fallo.
En los primeros ordenadores personales, intentar escribir datos en direcciones de hardware fuera de la memoria principal del sistema podía provocar daños en el hardware. Algunos fallos eran vulnerables y permitían que un programa malicioso o un pirata informático ejecutara código arbitrario , facilitando la replicación de virus o la adquisición de datos que normalmente serían inaccesibles.
La aplicación falla

Una aplicación suele fallar cuando realiza una operación no permitida por el sistema operativo. El sistema operativo entonces genera una excepción o señal en la aplicación. Tradicionalmente, las aplicaciones de Unix respondían a la señal volcando el volcado de memoria . La mayoría de las aplicaciones con interfaz gráfica de usuario (GUI) de Windows y Unix responden mostrando un cuadro de diálogo (como el que se muestra en la imagen adjunta de la derecha) con la opción de adjuntar un depurador si está instalado. Algunas aplicaciones intentan recuperarse del error y continuar ejecutándose en lugar de salir .
Una aplicación también puede contener código para fallar [ b ] después de detectar un error grave.
Los errores típicos que provocan fallos en la aplicación incluyen:

- intentar leer o escribir memoria que no está asignada para lectura o escritura por esa aplicación (por ejemplo, error de segmentación , error de protección general específico de x86 )
- intentar ejecutar instrucciones privilegiadas o no válidas
- intentar realizar operaciones de E/S en dispositivos de hardware a los que no tiene permiso para acceder
- pasar argumentos no válidos a las llamadas al sistema
- intentar acceder a otros recursos del sistema a los que la aplicación no tiene permiso para acceder
- Intentar ejecutar instrucciones de máquina con argumentos incorrectos (dependiendo de la arquitectura de la CPU): división por cero , operaciones con números no normales o valores NaN (no es un número), acceso a memoria a direcciones no alineadas , etc.
Cierre inesperado del sistema

Se dice que un "cierre inesperado" (CTD, por sus siglas en inglés) ocurre cuando un programa (comúnmente un videojuego ) se cierra inesperadamente, devolviendo abruptamente al usuario al escritorio . Por lo general, el término se aplica solo a cierres inesperados donde no se muestra ningún error, por lo que lo único que ve el usuario como resultado del cierre inesperado es el escritorio. Muchas veces, no hay ninguna acción aparente que cause un cierre inesperado. Durante el funcionamiento normal, el programa puede congelarse por un período de tiempo más corto y luego cerrarse 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 estaba reproduciendo antes de que se cerrara inesperadamente. Otras veces, puede parecer que se activa por una cierta acción, como cargar un área. Un ejemplo de un error que activa un CTD se puede encontrar en Blender 3D . Cuando el usuario está en modo de edición, puede usar Ctrl+B para biselar un borde. Si el usuario utiliza la función de deshacer mediante Ctrl+Z durante el proceso de biselado con el ratón, existe una alta probabilidad de que el software se cierre simplemente con un error CTD.
Los errores de cierre inesperado del juego (CTD) son especialmente problemáticos para los usuarios. Dado que a menudo no muestran ningún mensaje de error, puede resultar muy difícil identificar la causa del problema, sobre todo si no se observa ningún patrón ni relación entre los momentos en que ocurren y las acciones previas al fallo. Una forma de encontrar la causa del problema en los juegos es ejecutarlos en modo ventana . Algunas versiones del sistema operativo pueden incluir herramientas para ayudar a identificar las causas de los errores CTD.
Algunos programas informáticos, como StepMania y Bamzooki de la BBC, también se cierran inesperadamente si se ejecutan en pantalla completa, pero muestran el error en una ventana aparte cuando el usuario regresa al escritorio.
El servidor web falla
El software que ejecuta el servidor web detrás de un sitio web puede fallar, lo que lo vuelve completamente inaccesible o proporciona solo un mensaje de error en lugar del contenido normal.
Por ejemplo, aunque el servidor web en sí permanezca activo, un fallo en la base de datos de backend (como MySQL) crea un fallo de dependencia, lo que obliga al sitio a mostrar un error interno del servidor 500 en lugar de la página solicitada.
Fallos del sistema operativo


Un fallo del sistema operativo suele producirse cuando se produce una excepción de hardware que no puede ser gestionada . Los fallos del sistema operativo también pueden ocurrir cuando la lógica interna de comprobación de integridad del sistema operativo detecta que este ha perdido su coherencia interna.
Los sistemas operativos multitarea modernos , como Linux y macOS , generalmente no sufren daños cuando un programa de aplicación falla.
Algunos sistemas operativos, como z/OS , cuentan con funciones de fiabilidad, disponibilidad y facilidad de mantenimiento (RAS), y el sistema operativo puede recuperarse del fallo de un componente crítico, ya sea debido a un fallo de hardware, por ejemplo, un error ECC no corregible, o a un fallo de software, por ejemplo, una referencia a una página no asignada.
Final anormal
Un ABEND (finalización anormal) es una terminación anormal de un software o un fallo del programa. Los errores o fallos en el sistema operativo de red Novell NetWare suelen denominarse ABEND. Surgieron comunidades de administradores de NetWare en Internet, como abend.org .
Este uso deriva de la macro ABEND en 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" (permitiendo la recuperación automática) o "duros" (terminando la actividad). [ 4 ] Se afirma jocosamente que el término deriva de la palabra alemana " Abend ", que significa "tarde". [ 5 ]
Implicaciones de los accidentes en materia de seguridad y privacidad
Dependiendo de la aplicación, el fallo puede contener información sensible 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 causará, 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, el código en esa dirección se ejecutará.
Reproducción de choques
La reproducción eficaz de fallos es fundamental para la depuración, ya que transforma un fallo intermitente o complejo en un escenario predecible y repetible, lo que permite una investigación específica y la resolución de la causa raíz en lugar de abordar los síntomas.
Cuando se recopilan fallos en el campo utilizando, por ejemplo, un volcado de almacenamiento , un rastreo , un informador de fallos , el siguiente paso para los desarrolladores es poder reproducirlos localmente. Las técnicas de reproducción automatizada de fallos generalmente se dividen en dos categorías: enfoques de grabación y reproducción, que capturan una ejecución para que un fallo grabado a menudo pueda [ c ] reproducirse, pero añaden una sobrecarga sustancial en el rendimiento del tiempo de ejecución, y enfoques de procesamiento posterior al fallo, que analizan un fallo solo después de que haya ocurrido y, por lo tanto, evitan esa sobrecarga. [ 9 ] Para esto, existen varias técnicas: STAR utiliza la ejecución simbólica, [ 9 ] EvoCrash realiza una búsqueda evolutiva. [ 10 ]
Véase también
Notas
- ↑ Los tipos de direcciones no válidas incluyen:
- Dirección real no válida
- Número de segmento no válido
- Número de página no válido
- La dirección no se encuentra en el límite correcto (error de alineación).
- ↑ En OS/360 y sus sucesores, la aplicación normalmente utiliza unamacro ABEND con un código de autocompletado por el usuario.
- ↑ Algunos fallos son intermitentes debido, por ejemplo, a problemas de sincronización.
Referencias
- ↑ "ABEND" (PDF) . Versión 21 del sistema operativo: Sistema operativo System/360: Servicios de supervisión e instrucciones macro (PDF) (Octava edición). IBM . Septiembre de 1974. págs. 97–99 . GC28-6646-7 . Consultado el 8 de julio de 2023 .
- ↑ "0Cx – Códigos del sistema z/OS MVS" . IBM.
- ↑ Lista de códigos ABEND archivada el 16/09/2018 en Wayback Machine en madisoncollege.edu
- ↑ Parziale, Lydia (2008). Operaciones con z/VM y Linux para programadores de sistemas z/OS . IBM Redbooks. ISBN 9780738431598.página 352
- ↑ "Abend" Archivado el 29 de septiembre de 2011 en Wayback Machine en dictionary.die.net
- ↑ Satvat, Kiavash; Saxena, Nitesh (2018). "Crashing Privacy: An Autopsy of a Web Browser's Leaked Crash Reports". arXiv : 1808.01718 [ cs.CR ].
- ↑ "Analice los fallos para encontrar vulnerabilidades de seguridad en sus aplicaciones" . Msdn.microsoft.com. 26 de abril de 2007. Archivado del original el 11 de diciembre de 2011. Consultado el 26 de junio de 2014 .
- ↑ "Jesse Ruderman » Errores de seguridad de memoria en código C++" . Squarefree.com. 1 de noviembre de 2006. Archivado del original el 11 de diciembre de 2013. Consultado el 26 de junio de 2014 .
- 1 2 Chen, Ning; Kim, Sunghun (2015). "STAR: Reproducción automática de fallos basada en el rastreo de pila mediante ejecución simbólica". IEEE Transactions on Software Engineering . 41 (2): 198– 220. Bibcode : 2015ITSEn..41..198C . doi : 10.1109/TSE.2014.2363469 . ISSN 0098-5589 . S2CID 6299263 .
- ↑ Soltani, Mozhan; Panichella, Annibale; van Deursen, Arie (2017). "Un algoritmo genético guiado para la reproducción automatizada de fallos". 2017 IEEE/ACM 39.ª Conferencia Internacional sobre Ingeniería de Software (ICSE) . págs. 209–220 . doi : 10.1109/ICSE.2017.27 . ISBN 978-1-5386-3868-2. S2CID 199514177 . Archivado del original el 25 de enero de 2022 . Recuperado el 21 de diciembre de 2020 .
Enlaces externos
- Cómo recuperarse tras un fallo informático
- jerga informática
- Errores informáticos
- Anomalías de software