Respuestas:
Una trampa es una excepción en un proceso de usuario. Es causado por la división por cero o por un acceso no válido a la memoria. También es la forma habitual de invocar una rutina del núcleo (una llamada al sistema ) porque se ejecutan con mayor prioridad que el código de usuario. El manejo es sincrónico (por lo que el código de usuario se suspende y continúa después). En cierto sentido, están "activos": la mayoría de las veces, el código espera que ocurra la trampa y se basa en este hecho.
Una interrupción es algo generado por el hardware (dispositivos como el disco duro, la tarjeta gráfica, los puertos de E / S, etc.). Estos son asíncronos (es decir, no suceden en lugares predecibles en el código de usuario) o "pasivos" ya que el controlador de interrupciones tiene que esperar a que sucedan eventualmente.
También puede ver una trampa como una especie de interrupción interna de la CPU, ya que el controlador para el controlador de trampa parece un controlador de interrupción (los registros y los punteros de la pila se guardan, hay un cambio de contexto, la ejecución puede reanudarse en algunos casos donde se detuvo) .
Las trampas y las interrupciones están estrechamente relacionadas. Las trampas son un tipo de excepción , y las excepciones son similares a las interrupciones.
Intel x86 define dos categorías superpuestas, eventos vectorizados ( interrupciones vs excepciones ) y clases de excepciones ( fallas vs trampas vs abortos ).
Todas las citas en esta publicación son de la versión de abril de 2016 del Manual del desarrollador de software Intel . Para la perspectiva x86 (definitiva y compleja), recomiendo leer el capítulo de SDM sobre manejo de interrupciones y excepciones.
Los eventos vectorizados ( interrupciones y excepciones ) hacen que el procesador salte a un controlador de interrupciones después de guardar gran parte del estado del procesador (lo suficiente como para que la ejecución pueda continuar desde ese punto más adelante).
Las excepciones e interrupciones tienen una ID, llamada vector, que determina a qué controlador de interrupciones salta el procesador. Los manejadores de interrupciones se describen en la tabla Descriptor de interrupciones.
Las interrupciones ocurren en momentos aleatorios durante la ejecución de un programa, en respuesta a las señales del hardware. El hardware del sistema utiliza interrupciones para manejar eventos externos al procesador, como solicitudes de servicio de dispositivos periféricos. El software también puede generar interrupciones ejecutando la instrucción INT n.
Se producen excepciones cuando el procesador detecta una condición de error mientras ejecuta una instrucción, como la división por cero. El procesador detecta una variedad de condiciones de error, incluidas violaciones de protección, fallas de página y fallas internas de la máquina.
Las excepciones se clasifican como fallas , trampas o abortos según la forma en que se informan y si la instrucción que causó la excepción se puede reiniciar sin pérdida de continuidad del programa o la tarea.
Resumen: las trampas incrementan el puntero de instrucción, las fallas no y aborta la "explosión".
Una trampa es una excepción que se informa inmediatamente después de la ejecución de la instrucción de captura. Las trampas permiten que la ejecución de un programa o tarea continúe sin pérdida de continuidad del programa. La dirección de retorno para el controlador de captura apunta a la instrucción que se ejecutará después de la instrucción de captura.
Una falla es una excepción que generalmente puede corregirse y que, una vez corregida, permite que el programa se reinicie sin pérdida de continuidad. Cuando se informa una falla, el procesador restaura el estado de la máquina al estado anterior al comienzo de la ejecución de la instrucción de falla. La dirección de retorno (contenido guardado de los registros CS y EIP) para el manejador de fallas apunta a la instrucción de falla, en lugar de a la instrucción que sigue a la instrucción de falla.
Ejemplo: un error de página a menudo es recuperable. Es posible que una parte del espacio de direcciones de una aplicación se haya cambiado al disco desde la memoria RAM. La aplicación activará un error de página cuando intente acceder a la memoria que se cambió. El kernel puede extraer esa memoria del disco a la memoria RAM, y el control manual de vuelta a la aplicación. La aplicación continuará donde se quedó (en la instrucción de falla que estaba accediendo a la memoria intercambiada), pero esta vez el acceso a la memoria debería tener éxito sin fallar.
Un aborto es una excepción que no siempre informa la ubicación precisa de la instrucción que causa la excepción y no permite reiniciar el programa o la tarea que causó la excepción. Los abortos se utilizan para informar errores graves, como errores de hardware y valores inconsistentes o ilegales en las tablas del sistema.
Las interrupciones invocadas por software (activadas por la instrucción INT) se comportan de manera similar a una trampa. La instrucción se completa antes de que el procesador guarde su estado y salte al controlador de interrupciones.
En términos generales, términos como excepciones, fallas, abortos, trampas e interrupciones significan lo mismo y se denominan "interrupciones".
Llegando a la diferencia entre trampa e interrupción:
Trampa: es una transferencia de control iniciada y esperada por el programador a una rutina de controlador especial. (Por ejemplo: la instrucción INT 80x86 es un buen ejemplo)
Donde como
Interrupción (hardware): es una interrupción de control del programa basada en un evento de hardware externo externo a la CPU (por ejemplo: presionar una tecla en el teclado o un tiempo de espera en un chip temporizador)
Una trampa es un tipo especial de interrupción que comúnmente se conoce como interrupción de software . Una interrupción es un término más general que abarca tanto las interrupciones de hardware (interrupciones de dispositivos de hardware) como las interrupciones de software (interrupciones de software, como trampas ).
Un código llama a una trampa como programas y se usa, por ejemplo, para llamar a las rutinas del sistema operativo (es decir, normalmente sincrónico). Los eventos llaman a una interrupción (muchas veces hardware, como la tarjeta de red que ha recibido datos o el temporizador de la CPU) y, como su nombre indica, interrumpe el flujo de control normal, ya que la CPU tiene que cambiar a la rutina del controlador para manejar el evento.
Una interrupción es un cambio de flujo generado por hardware dentro del sistema. Se convoca a un manejador de interrupciones para tratar la causa de la interrupción; El control se devuelve al contexto e instrucción interrumpidos. Una trampa es una interrupción generada por software. Se puede usar una interrupción para indicar la finalización de una E / S para evitar la necesidad de sondeo del dispositivo. Se puede usar una trampa para llamar a las rutinas del sistema operativo o para detectar errores aritméticos.
Creo que las trampas son causadas por la ejecución de la instrucción actual y, por lo tanto, se llaman eventos sincrónicos. donde las interrupciones son causadas por una instrucción independiente que se ejecuta en el procesador y que están relacionadas con eventos externos y, por lo tanto, se conocen como eventos asíncronos.
Las interrupciones son interrupciones de hardware, mientras que las trampas son interrupciones invocadas por software. Las ocurrencias de interrupciones de hardware generalmente desactivan otras interrupciones de hardware, pero esto no es cierto para las trampas. Si necesita no permitir las interrupciones de hardware hasta que se sirva una trampa, debe borrar explícitamente el indicador de interrupción. Y, por lo general, el indicador de interrupción en la computadora afecta las interrupciones (de hardware) en lugar de las trampas. Esto significa que borrar esta bandera no evitará trampas. A diferencia de las trampas, las interrupciones deben preservar el estado anterior de la CPU.
Una trampa es una interrupción de software. Si escribe un programa en el que declara que una variable tiene un valor de división entre cero, entonces se trata como una trampa. Siempre que ejecute este programa arrojará el mismo error al mismo tiempo. versión especial de trap en la que un programa le pide a OS el servicio requerido. En caso de interrupción (una palabra general para interrupciones de hardware) como un error de E / S, la CPU se interrumpe en un momento aleatorio y, por supuesto, no es culpa de nuestros programadores. Es el hardware el que los saca a la luz.