¿Cuál es la diferencia entre Trap e Interrupt?

Respuestas:

203

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) .

Aaron Digulla
fuente
55
Es interesante que lxr.free-electrons.com/source/arch/x86/kernel/… dividir por cero se inicialice como una interrupción de hardware, ¿por qué es así?
Alex Kreimer
8
Porque es realmente una interrupción que envía la CPU cuando la ALU encuentra este problema. Como una falla de segmentación. Sin embargo, no todos los errores matemáticos causan interrupciones (el desbordamiento no lo hace).
Aaron Digulla
44
Eso tiene sentido. Pero entonces, lo que es un poco confuso es por qué en los núcleos de Linux anteriores se inicializaba como una trampa de software: set_trap_gate (0, y divide_error);
Alex Kreimer
11
¿Qué quieres decir con "un poco confuso"? Es muy confuso :-) El problema aquí es que dividir por cero es una interrupción de hardware (IRQ / vector 0) pero los desarrolladores del kernel tienen varias opciones para manejarlo. Entonces, desde un proceso de usuario, es una trampa, pero desde el lado de la CPU, es una interrupción. ¿Quién tiene la razón? ¿Ninguna? ¿Ambos?
Aaron Digulla
3
Por supuesto, esto solo es cierto para las CPU x86. Otras CPU funcionan de manera diferente.
Aaron Digulla
110

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.

Eventos vectoriales

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.

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.

Excepciones

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.

Clasificaciones de excepciones

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".

Trampa

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.

Culpa

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.

Abortar

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.

Casos de borde

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.

ruthafjord
fuente
66
Esta es una respuesta tan buena que estaba seguro de que la cola de revisión "Respuesta tardía de un nuevo usuario" me estaba haciendo una prueba para asegurarme de que estaba prestando atención.
Noumenon
1
¡Gracias! Eso significa mucho para mí :)
ruthafjord 01 de
Esta es una gran respuesta para x86. La pregunta originalmente era bastante general y no mencionaba x86. Hice una edición para tratar de lograr un equilibrio. ¿Quizás podría agregar otro párrafo en la parte superior de esta respuesta para abordar la cuestión de la terminología fuera del mundo x86? Y / o dejar otra edición en la pregunta si cree que fue peor: PI sólo se sabe realmente x86 mí mismo, pero es de esperar que es verdad que otros sistemas utilizan una terminología muy similar, y se puede decir simplemente que :)
Peter Cordes
1
Rozado la PPC libro aarchitecture, y parece que sus definiciones se superponen en gran medida. Tienen nuevos nombres para casos extremos y tratan las excepciones como un subtipo de interrupciones, en lugar de ser parte de una categoría distinta.
ruthafjord
1
Creo que esta respuesta lo describe mejor. Discute la línea borrosa que puede existir entre los dos. Y menciona que las fallas de la página dan como resultado que la CPU vuelva a intentar una instrucción que una trampa omite y continúa.
en70x
9

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)

Cheshar
fuente
Buenas definiciones ¿Fuente?
alexlomba87
6

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 ).

Paul R
fuente
44
Confunde aún más las cosas que algunos autores (Tanenbaum) se refieren a "trampas de hardware". Si podemos tener trampas de hardware e interrupciones de software, claramente las definiciones son bastante confusas y pueden ir en cualquier dirección, siempre requiriendo la palabra hardware o software.
The111
3

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.

Franco
fuente
2

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.

Dinesh Reddy
fuente
2

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.

chetan pawar
fuente
2

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.

Anamik Sarvaiya
fuente
1

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.

Sanketssj5
fuente
1
¿Puedes explicar cómo la llamada al sistema es una trampa?
Radha Gogia