x86 operating-system kernel interrupt cpu-architecture

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



operating-system kernel (9)

Creo que las trampas son causadas por la ejecución de las instrucciones actuales y, por lo tanto, se llaman eventos sincrónicos. donde las interrupciones son causadas por una instrucción independiente que se está ejecutando en el procesador que están relacionadas con eventos externos y, por lo tanto, se conocen como asincrónicas.

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

Si la terminología es diferente para diferentes sistemas, ¿qué significan en x86?


En términos generales, los términos como excepciones, fallas, interrupciones, interrupciones e interrupciones significan lo mismo y se llaman "Interrupciones".

Llegando a la diferencia entre Trampa e interrupción:

Trampa: es un programador iniciado y se espera que la transferencia del control a una rutina de controlador especial. (Por ejemplo: la instrucción INT 80x86 es un buen ejemplo)

Donde como

Interrumpir (Hardware): Es una interrupción de control de 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 de temporizador)


Las interrupciones son interrupciones de hardware, mientras que las interrupciones son interrupciones invocadas por software. Las apariciones de interrupciones de hardware generalmente desactivan otras interrupciones de hardware, pero esto no es cierto para las trampas. Si necesita rechazar las interrupciones de hardware hasta que se atienda una trampa, debe borrar explícitamente la bandera 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á las trampas. A diferencia de las trampas, las interrupciones deben preservar el estado previo de la CPU.


Los programas de tipo código utilizan una trampa y se utilizan, por ejemplo, para llamar a las rutinas del sistema operativo (es decir, normalmente síncronas). Los eventos invocan 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 debe cambiar a la rutina del controlador para manejar el evento.


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 los dispositivos de hardware) como las interrupciones de software (interrupciones del software, como las trampas ).


Una trap es una excepción en un proceso de usuario. Es causado por la división por cero o el acceso a la memoria no es válido. También es la forma habitual de invocar una rutina kernel (una llamada al sistema ) porque se ejecutan con una prioridad más alta que el código de usuario. El manejo es síncrono (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 interrupt es algo generado por el hardware (dispositivos como el disco duro, la tarjeta gráfica, los puertos de E / S, etc.). Estos son asincrónicos (es decir, no ocurren en lugares predecibles en el código de usuario) o "pasivos" ya que el manejador de interrupciones tiene que esperar a que ocurran eventualmente.

También puede ver una trampa como una especie de interrupción interna de la CPU ya que el manejador de trap se parece a un manejador de interrupciones (los registros y los punteros de pila se guardan, hay un cambio de contexto, la ejecución puede reanudarse en algunos casos donde se dejó) .


Una interrupción es un cambio de flujo generado por el 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 señalar la finalización de una E / S para evitar la necesidad de sondeo del dispositivo. Se puede usar una trampa para invocar rutinas del sistema operativo o detectar errores aritméticos.


Una trampa es una interrupción de software. Si escribe un programa en el que declara que una variable tiene una división por valor cero, entonces se trata como una trampa. Siempre que ejecute este programa emitirá el mismo error al mismo tiempo. La llamada al sistema es una versión especial de trap en la cual un programa solicita el servicio necesario. 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 que los pone en marcha.


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 excepción ( fallas vs trampas vs interrupciones ).

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 del SDM sobre manejo de interrupción y excepciones.

Eventos Vectored

Los eventos vectorizados ( interrupciones y excepciones ) hacen que el procesador salte a un manejador 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 interrupción salta el procesador. Los manejadores de interrupción se describen dentro de la Tabla de Descripciones de Interrupción.

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 usa interrupciones para manejar eventos externos al procesador, como solicitudes para dar servicio a dispositivos periféricos. El software también puede generar interrupciones ejecutando la instrucción INT n.

Excepciones

Las excepciones se producen cuando el procesador detecta una condición de error al ejecutar una instrucción, como la división por cero. El procesador detecta una variedad de condiciones de error que incluyen 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 interrupciones dependiendo de 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 abortan ''explotar''.

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 continuar la ejecución de un programa o tarea sin pérdida de la continuidad del programa. La dirección de retorno para el manejador de capturas apunta a la instrucción que se ejecutará después de la instrucción de captura.

Culpa

Un error es una excepción que generalmente se puede corregir y que, una vez corregido, permite reiniciar el programa sin pérdida de continuidad. Cuando se informa una falla, el procesador restablece el estado de la máquina al estado anterior al comienzo de la ejecución de la instrucción de fallas. La dirección de retorno (contenido guardado de los registros CS y EIP) para el controlador de fallas apunta a la instrucción de fallas, en lugar de a la instrucción que sigue a la instrucción de fallas.

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 el ram. La aplicación activará un error de página cuando intente acceder a la memoria que se intercambió. El kernel puede extraer esa memoria del disco a ram, y devolver el control a la aplicación. La aplicación continuará donde se quedó (en la instrucción de fallas que estaba accediendo a la memoria intercambiada), pero esta vez el acceso a la memoria debería tener éxito sin fallas.

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 un reinicio del programa o tarea que causó la excepción. Los abortos se utilizan para informar errores graves, como errores de hardware e incoherentes o ilegales en las tablas del sistema.

Casos de borde

Las interrupciones invocadas por software (desencadenadas por la instrucción INT) se comportan de forma similar a una trampa. La instrucción se completa antes de que el procesador guarde su estado y salte al manejador de interrupciones.