Las computadoras y los sitios web modernos no lo hacen, muy a menudo.
No es raro que un programa se bloquee debido a una excepción no controlada. Eso a menudo se debe a un error del programador o una falta de previsión. Por ejemplo, un programa puede pedirle al usuario dos números, A y B, luego dividir A por B e imprimir la respuesta. Todo va bien cuando el usuario intenta 6/3, 5/2, 1/3, etc. hasta que prueba 5/0. Eso es matemáticamente imposible y produce un infinito, que el hardware de la computadora no puede manejar. La unidad de coma flotante genera una excepción: en una computadora anterior, en realidad, habría un cable que causó una interrupción para detener la CPU y hacer que procese la condición de error en lugar de seguir dividiendo números. Por lo general, un buen programador escribirá un controlador de excepciones. Después de todo, ¿por qué un usuario no debe ingresar “0”? Es un entero perfectamente bueno. El controlador hace que el programa diga algo como “Entrada inválida para B, no puedo dividir por cero, por favor intente nuevamente” y continúe. Pero si no hay un controlador, el sistema operativo lo resolverá al finalizar el programa: el programa se ha “bloqueado” con un error del sistema como “error SIGDIV de división por cero en la dirección 0xA452002”. Si no hay un sistema operativo (el sistema es muy antiguo o simple), la computadora se ha bloqueado. Hay una serie de excepciones que la computadora puede atrapar aparte de dividir por cero. Por ejemplo en Unix
Interrupción SIGINT
SIGILL instrucción ilegal (intentó ejecutar datos en lugar de código)
Error de bus SIGBUS
Violación de segmentación SIGSEGV
Se invoca la llamada al sistema SIGSYS inexistente
Señal de terminación del software SIGTERM
- Cómo obtener el script completo de un sitio web
- ¿Cuál es la mejor herramienta para escanear un sitio web en busca de vulnerabilidades?
- ¿Cuáles son los mejores proveedores de alojamiento web para un sitio web orientado a las redes sociales basado en los siguientes criterios: precio, espacio en disco, velocidad, confiabilidad, facilidad de uso para un no experto, aplicaciones compatibles proporcionadas (por ejemplo: WordPress, MySQL, etc.)?
- ¿Cuáles son las similitudes y diferencias entre libro, artículo, revista y sitio web?
- ¿Cuáles son los mejores sitios web que te enseñan diseño web?
Una violación de la segmentación puede ser el resultado de un “desbordamiento del búfer”: leer más datos de los que un programa ha dejado espacio. O puede ser un simple error de programación; esencialmente un programa ha intentado acceder a una ubicación de memoria que no tiene permitido. Normalmente, el sistema operativo manejará todas estas señales, incluso si un programa de aplicación como un servidor web no lo hizo, y no se bloqueará. Si un programa de aplicación se comporta mal, por ejemplo, usa demasiada memoria, el sistema operativo lo matará (Linux tiene una cosa llamada “OOM-killer”).
El sistema operativo en sí es modular: hay un núcleo a cargo de la programación, además de controladores cargables para manejar diferentes tipos de hardware, como unidades de disco, tarjetas de red, tarjetas de video, y hay varias aplicaciones del sistema, como una interfaz gráfica, un servidor de impresión , administrador de red, etc. En general, un error no controlado en cualquiera de estos no hará que la computadora se bloquee, el núcleo seguirá ejecutándose y puede volver a intentar la operación fallida. Por ejemplo, una unidad de disco defectuosa (falla de hardware) puede generar errores que serán reintentados por el sistema operativo: la computadora se vuelve muy lenta, pero no se bloquea.
Sin embargo, si hay un error irrecuperable dentro del núcleo mismo, quizás debido a fallas de hardware como RAM defectuosa, el núcleo puede detenerse, bloqueando la máquina. Ver Kernel panic – Wikipedia. Estos son bastante raros hoy en día.