El nivel de prioridad de interrupción ( IPL ) es parte del estado actual de interrupción del sistema , que indica las solicitudes de interrupción que se aceptarán actualmente. La IPL puede indicarse en el hardware mediante los registros de un controlador de interrupción programable , o en el software mediante una máscara de bits o un valor entero y el código fuente de los subprocesos.
Descripción general
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 MOS Technology 6502 . Sin embargo, algunas arquitecturas permiten un rango mayor de valores, donde cada valor habilita las solicitudes de interrupción que especifican un nivel superior, mientras que bloquean las del mismo nivel o del nivel inferior.
Asignar diferentes prioridades a las solicitudes de interrupción puede ser útil para tratar de equilibrar el rendimiento del sistema frente a la latencia de interrupción : algunos tipos de interrupciones deben responderse más rápidamente que otros, pero la cantidad de procesamiento puede no ser grande, por lo que tiene sentido asignar un mayor prioridad a ese tipo de interrupción.
El control del nivel de interrupción también se utilizó para sincronizar el acceso a las estructuras de datos del kernel. Por lo tanto, el controlador de interrupciones del programador de nivel 3 aumentaría temporalmente la IPL a 7 antes de acceder a cualquier estructura de datos del programador real, luego volvería a bajar a 3 antes de cambiar los contextos de proceso. Sin embargo, se no permitido para un manejador de interrupciones para bajar IPL debajo de aquella a la que se ha introducido, ya que de hacerlo podría destruir la integridad del sistema de sincronización.
Por supuesto, los sistemas multiprocesador añaden sus propias complicaciones, que no se tratan aquí.
Independientemente de lo que pueda soportar 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).
IPL de OpenVMS
Como ejemplo de uno de los sistemas de gestión de IPL más elaborados jamás implementados, 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 son disponible para interrupciones de software (utilizado internamente por el sistema operativo para programar sus propias actividades). En realidad, no se utilizan todos los valores, pero estos son algunos de los más importantes:
- el nivel 31 es para la interrupción de "corte de energía".
- el nivel 24 es para la interrupción del reloj. Tenga en cuenta que esta es una prioridad más alta que las interrupciones de E / S.
- los niveles 20-23 se utilizan para dispositivos de E / S.
- los niveles 8-11 se utilizan para interrupciones de bifurcación . Cuando un controlador recibe una interrupción de dispositivo (prioridad 20-23), se supone que debe realizar el menor procesamiento posible con una prioridad tan alta; en cambio, si es necesario realizar alguna operación que requiera mucho tiempo, se debe aplazar solicitando una interrupción de software en el rango 8-11; cuando se dispara esta interrupción, se reanudará el procesamiento posterior. Similar a esto son las "mitades inferiores" y sus sucesores en el kernel de Linux .
- el nivel 7 se utiliza para sincronizar el acceso a las estructuras de datos del planificador de procesos.
- el nivel 4 se utiliza para las tareas de posprocesamiento de E / S, es decir, la finalización final de una solicitud de QIO, incluida la devolución de los resultados al proceso de solicitud.
- el nivel 3 se utiliza para la interrupción de reprogramación del proceso. Cualquier código que se ejecute en niveles de interrupción más altos no puede asumir que había un contexto de proceso actual (ya que podría estar en curso una reprogramación del proceso). En particular, los errores de página no están permitidos en este nivel ni en niveles superiores.
- el nivel 2 se utiliza para sincronizar el acceso a las estructuras de datos por proceso. Cada vez que el kernel necesita acceder a un contexto de proceso, envía a ese proceso un AST de kernel especial que se ejecuta en el contexto del proceso en IPL 2.
- el nivel 0 es el nivel normal para la ejecución de código sin interrupciones, incluido el código de aplicación ordinario.
El hardware Alpha contiene soporte nativo para IPL. Cuando OpenVMS se trasladó a Itanium en 2001, el esquema de IPL se simuló utilizando funciones proporcionadas por el hardware de Itanium.