# Nivell de prioritat d'interrupció

El nivell de prioritat d'interrupció (IPL) és una part de l'estat actual d'interrupció del sistema, que indica les sol·licituds d'interrupció que s'acceptaran actualment. L'IPL es pot indicar en el maquinari pels registres d'un controlador d'interrupció programable, o en el programari mitjançant una màscara de bits o un valor enter i un codi font dels fils.

## Visió general

Un IPL basat en nombres enters pot ser tan petit com un sol bit, amb només dos valors: 0 (totes les interrupcions habilitades) o 1 (totes les interrupcions desactivades), com en la tecnologia MOS 6502. No obstant això, algunes arquitectures permeten un rang més gran de valors, on cada valor permet sol·licituds d'interrupció que especifiquen un nivell superior, mentre que bloqueja les del mateix nivell o inferior.
Assignar diferents prioritats a les sol·licituds d'interrupció pot ser útil per intentar equilibrar el rendiment del sistema versus la latència d'interrupció. Alguns tipus d'interrupcions s'han de respondre més ràpidament que d'altres, però pot ser que la quantitat de processament no sigui gran, de manera que té sentit assignar una prioritat més alta a aquest tipus d'interrupció.

## IPL d'OpenVMS

Com a exemple d'un dels sistemes de gestió d'IPL més elaborats que s'han desplegat mai, l'ordinador VAX i el sistema operatiu VMS associat admet 32 nivells de prioritat, del 0 al 31. Les prioritats 16 i superiors són per a sol·licituds de maquinari extern, mentre que els valors inferiors a 16 estan disponibles per a interrupcions de programari (utilitzades internament pel sistema operatiu per programar les seves pròpies activitats). No s'utilitzen realment tots els valors, però aquí n'hi ha alguns dels més importants:
* El nivell 31 és per a la interrupció de "falla d'alimentació".
* El nivell 24 és per a la interrupció del rellotge. Tingueu en compte que aquesta és una prioritat més alta que les interrupcions d'E/S.
* els nivells 20-23 s'utilitzen per als dispositius d'E/S.
* els nivells 8-11 s'utilitzen per a interrupcions de bifurcació. Quan un controlador rep una interrupció del dispositiu (prioritat 20-23), se suposa que ha de processar el mínim possible amb una prioritat tan alta; en canvi, si cal fer alguna operació que consumeix molt de temps, aquestes s'han d'ajornar sol·licitant una interrupció de programari en el rang 8-11; quan s'activa aquesta interrupció, es reprendrà el processament posterior. Semblants a això són les "meitats inferiors" i els seus successors al nucli Linux.
* El nivell 7 s'utilitza per sincronitzar l'accés a les estructures de dades del planificador de processos.
* El nivell 4 s'utilitza per a les tasques de postprocessament d'E/S, és a dir, la finalització final d'una sol·licitud de QIO, inclosa la devolució dels resultats al procés d'aplicació.
* El nivell 3 s'utilitza per a la interrupció de reprogramació del procés. Qualsevol codi que s'executi a nivells d'interrupció més alts no pot suposar que hi havia un context de procés actual (ja que pot ser que hi hagi una reprogramació del procés en curs). En particular, no es permeten errors de pàgina en aquest o nivells superiors.
* El nivell 2 s'utilitza per sincronitzar l'accés a les estructures de dades per procés. Cada vegada que el nucli necessita accedir a un context de procés, envia aquest procés un AST de nucli especial que s'executa en el context del procés a IPL 2.
* El nivell 0 és el nivell normal per a l'execució de codi sense interrupció, inclòs el codi d'aplicació normal.

## Referències

* ↑ «Understanding Interrupts» (en anglès americà). [Consulta: 10 setembre 2023].
* ↑ «difference between IRQ and Interrupt Priority level» (en anglès). [Consulta: 10 setembre 2023].
* ↑ «Interrupt Priorities- What does it actually mean?» (en anglès). [Consulta: 10 setembre 2023].
* ↑ «Priority Interrupts | (S/W Polling and Daisy Chaining)» (en anglès americà), 28-07-2017. [Consulta: 10 setembre 2023].