Interrupt flag
L'indicador d'interrupció (IF) és un bit de senyalador al registre FLAGS de la CPU, que determina si la (CPU) respondrà immediatament o no a les interrupcions de maquinari que es poden emmascarar.[1] Si el senyalador s'estableix en 1
, s'habilitaran les interrupcions emmascarables. Si es restableix (establert a 0
), aquestes interrupcions es desactivaran fins que s'habiliten. El senyalador d'interrupció no afecta el maneig de les interrupcions no emmascarables (NMI) o les interrupcions de programari generades per la instrucció INT.[2]
Configuració i neteja
[modifica]En un sistema que utilitza arquitectura x86, les instruccions CLI (Cl ear I nterrupt) i STI (S e t I nterrupt). El POPF (Pop F lags) elimina una paraula de la pila al registre FLAGS, cosa que pot provocar que el senyalador d'interrupció s'estableixi o s'esborri en funció del bit del registre FLAGS de la part superior de la pila.[3]
Nivell de privilegis
[modifica]En els sistemes que admeten el mode privilegiat, només les aplicacions amb privilegis (normalment el nucli del sistema operatiu) poden modificar el senyalador d'interrupció. En un sistema x86, això només s'aplica al codi de mode protegit (el codi de mode real sempre pot modificar el senyalador d'interrupció). CLI i STI són instruccions privilegiades, que provoquen un error de protecció general si una aplicació sense privilegis intenta executar-les. La instrucció POPF no modificarà el senyalador d'interrupció si l'aplicació no té privilegis.
Programes DOS antics
[modifica]Alguns programes antics de DOS que utilitzen un extensor de DOS en mode protegit i instal·len els seus propis controladors d'interrupcions (generalment jocs) utilitzen la instrucció CLI als controladors per desactivar les interrupcions i POPF (després d'un PUSHF corresponent) o IRET (que restaura els indicadors de la pila). com a part dels seus efectes) per restaurar-lo. Això funciona si el programa es va iniciar en mode real, però provoca problemes quan aquests programes s'executen en un contenidor basat en DPMI en sistemes operatius moderns (com ara NTVDM amb Windows NT o posterior). Com que la CLI és una instrucció privilegiada, provoca un error al sistema operatiu quan el programa intenta utilitzar-la. Aleshores, el sistema operatiu deixa de lliurar interrupcions al programa fins que el programa executa STI (la qual cosa provocaria un altre error). Tanmateix, la instrucció POPF no té privilegis i simplement falla silenciosament en restaurar l'IF. El resultat és que el sistema operatiu deixa de lliurar interrupcions al programa, que després es penja. Els programes DOS que no utilitzen un extensor de mode protegit no pateixen aquest problema, ja que s'executen en mode V86 on POPF sí que desencadena un error.
Desactivació d'interrupcions
[modifica]En el conjunt d'instruccions x86, la CLI s'utilitza habitualment com a mecanisme de sincronització en sistemes monoprocessador. Per exemple, una CLI s'utilitza als sistemes operatius per desactivar les interrupcions de manera que el codi del nucli (normalment un controlador) pugui evitar les condicions de carrera dins d'un controlador d'interrupcions. Això és necessari quan es modifiquen diverses estructures de dades associades sense interrupcions.
Habilitació d'interrupcions
[modifica]L'STI del conjunt d'instruccions x86 permet interrupcions configurant l'IF.
En algunes implementacions de la instrucció que permet interrupcions, les interrupcions no s'activen fins després de la següent instrucció. En aquest cas, la seqüència d'activació d'interrupcions seguida immediatament de les interrupcions desactivades fa que les interrupcions no es reconeguin.[4]
Consideracions sobre el multiprocessador
[modifica]El senyalador d'interrupció només afecta un sol processador. En sistemes multiprocessador, un gestor d'interrupcions ha d'utilitzar altres mecanismes de sincronització com ara bloquejos.
Referències
[modifica]- ↑ «Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual» (PDF) (en anglès). [Consulta: 13 juliol 2007].
- ↑ «What does interrupt flag mean?» (en anglès). [Consulta: 2 desembre 2023].
- ↑ «Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual» (PDF) (en anglès). [Consulta: 13 juliol 2007].
- ↑ «MSP430 Interrupts» (en anglès). [Consulta: 2 desembre 2023].