Articulo de referencia

Bandera de interrupción

El indicador de interrupción ( IF ) es un bit indicador en el registro FLAGS de la CPU , que determina si la CPU responderá o no inmediatamente a las interrupciones de hardware ...

El indicador de interrupción ( IF ) es un bit indicador en el registro FLAGS de la CPU , que determina si la CPU responderá o no inmediatamente a las interrupciones de hardware enmascarables . [1] Si el indicador se establece en , se habilitan las interrupciones enmascarables. Si se restablece (se establece en ), dichas interrupciones se deshabilitarán hasta que se habiliten las interrupciones. El indicador de interrupción no afecta el manejo de interrupciones no enmascarables (NMI) o interrupciones de software generadas por la instrucción INT . 10

Configuración y limpieza

En un sistema que utiliza la arquitectura x86 , las instrucciones CLI ( Clear Interrupt ) y STI ( Set Interrupt ). La POPF ( Pop Flags ) elimina una palabra de la pila y la coloca en el registro FLAGS , lo que puede provocar que el indicador de interrupción se active o se borre en función del bit del registro FLAGS desde la parte superior de la pila. [1]

Nivel de privilegio

En sistemas que admiten el modo privilegiado, solo las aplicaciones privilegiadas (normalmente el núcleo del sistema operativo ) pueden modificar el indicador de interrupción . En un sistema x86 , esto solo se aplica al código de modo protegido (el código de modo real siempre puede modificar el indicador de interrupción ). CLI y STI son instrucciones privilegiadas que provocan un error de protección general si una aplicación sin privilegios intenta ejecutarlas. La instrucción POPF no modificará el indicador de interrupción si la aplicación no tiene privilegios.

Programas DOS antiguos

Algunos programas DOS antiguos que utilizan un extensor DOS en modo protegido e instalan sus propios controladores de interrupciones (normalmente juegos) utilizan la instrucción CLI en los controladores para desactivar las interrupciones y POPF (después de un PUSHF correspondiente) o IRET (que restaura los indicadores de la pila como parte de sus efectos) para restaurarlo. Esto funciona si el programa se inició en modo real, pero causa problemas cuando dichos programas se ejecutan en un contenedor basado en DPMI en sistemas operativos modernos (como NTVDM en Windows NT o posterior). Dado que CLI es una instrucción privilegiada, desencadena un error en el sistema operativo cuando el programa intenta utilizarla. El sistema operativo suele dejar de enviar interrupciones al programa hasta que este ejecuta STI (lo que provocaría otro error). Sin embargo, la instrucción POPF no es privilegiada y simplemente falla silenciosamente al restaurar el IF. El resultado es que el sistema operativo deja de enviar interrupciones al programa, que luego se cuelga. Los programas DOS que no utilizan un extensor de modo protegido no sufren este problema, ya que se ejecutan en modo V86 donde POPF sí desencadena un error.

Existen pocas soluciones satisfactorias para este problema. Normalmente no es posible modificar el programa, ya que el código fuente normalmente no está disponible y no hay espacio en el flujo de instrucciones para introducir una STI sin una edición masiva a nivel de ensamblaje. Eliminar las CLI del programa o hacer que el host V86 ignore las CLI por completo puede causar otros errores si los manejadores de interrupciones del invitado no están diseñados para ser reentrantes (aunque cuando se ejecutan en un procesador moderno, normalmente se ejecutan lo suficientemente rápido como para evitar la superposición de interrupciones).

Deshabilitar interrupciones

En el conjunto de instrucciones x86 , la CLI se utiliza habitualmente como mecanismo de sincronización en sistemas monoprocesador. Por ejemplo, una CLI se utiliza en sistemas operativos para desactivar interrupciones de modo que el código del núcleo (normalmente un controlador ) pueda evitar condiciones de carrera dentro de un controlador de interrupciones . Esto es necesario cuando se modifican múltiples estructuras de datos asociadas sin interrupción.

Habilitación de interrupciones

La STI del conjunto de instrucciones x86 habilita interrupciones configurando el IF.

En algunas implementaciones de la instrucción que habilita las interrupciones, las interrupciones no se habilitan hasta después de la siguiente instrucción. En este caso, la secuencia de habilitación de interrupciones seguida inmediatamente por la deshabilitación de interrupciones da como resultado que las interrupciones no se reconozcan.

Consideraciones sobre multiprocesadores

El indicador de interrupción solo afecta a un único procesador. En sistemas multiprocesador, un controlador de interrupciones debe utilizar otros mecanismos de sincronización, como bloqueos .

Véase también

Referencias

  1. ^ ab "Manual del desarrollador de software de arquitectura Intel, volumen 2: Manual de referencia del conjunto de instrucciones" (PDF) . Consultado el 13 de julio de 2007 .
  • Manuales para desarrolladores de software de arquitecturas Intel 64 e IA-32 - Consultado el 14 de septiembre de 2017
Retrieved from "https://en.wikipedia.org/w/index.php?title=Interrupt_flag&oldid=1128172465"