El nivel de prioridad de interrupción ( IPL ) es una parte del estado actual de interrupción del sistema , que indica las solicitudes de interrupción que se aceptarán en ese momento. El IPL puede indicarse en hardware mediante los registros de un controlador de interrupciones programable , o en software mediante una máscara de bits o un valor entero y el código fuente de los subprocesos. [1]
Una IPL basada en números enteros puede ser tan pequeña como un solo bit, con solo dos valores: 0 (todas las interrupciones habilitadas) o 1 (todas las interrupciones deshabilitadas), como en el caso de MOS Technology 6502. Sin embargo, algunas arquitecturas permiten un rango mayor de valores, donde cada valor habilita solicitudes de interrupción que especifican un nivel superior, mientras que bloquea las del mismo nivel o de un nivel inferior.
Asignar diferentes prioridades a las solicitudes de interrupción puede ser útil para intentar equilibrar el rendimiento del sistema frente a la latencia de las interrupciones . Algunos tipos de interrupciones necesitan una respuesta más rápida que otros, pero la cantidad de procesamiento puede no ser grande, por lo que tiene sentido asignar una prioridad más alta a ese tipo de interrupción. [2]
El control del nivel de interrupción también se utilizó para sincronizar el acceso a las estructuras de datos del núcleo. De este modo, el controlador de interrupciones del planificador de nivel 3 elevaba temporalmente el IPL a 7 antes de acceder a cualquier estructura de datos del planificador y luego lo bajaba a 3 antes de cambiar de contexto de proceso. Sin embargo, no se permitía que un controlador de interrupciones redujera el IPL por debajo del valor en el que se había introducido, ya que hacerlo podría destruir la integridad del sistema de sincronización.
Por supuesto, los sistemas multiprocesador añaden sus complicaciones, que no se abordan aquí.
Independientemente de lo que admita el hardware, los sistemas típicos de tipo UNIX solo utilizan dos niveles: el mínimo (todas las interrupciones deshabilitadas) y el máximo (todas las interrupciones habilitadas). [3] [4]
Como ejemplo de uno de los sistemas de manejo de IPL más elaborados que se hayan implementado, la computadora VAX y el sistema operativo VMS asociado admiten 32 niveles de prioridad, de 0 a 31. Las prioridades 16 y superiores son para solicitudes de hardware externo, mientras que los valores inferiores a 16 están disponibles para interrupciones de software (utilizadas internamente por el sistema operativo para programar sus propias actividades). No se utilizan todos los valores, pero estos son algunos de los más importantes:
El hardware Alpha contiene compatibilidad nativa con IPL. Cuando OpenVMS se trasladó a Itanium en 2001, el esquema de IPL se simuló utilizando funciones proporcionadas por el hardware de Itanium.