nível de prioridade de interrupção - Interrupt priority level
O nível de prioridade de interrupção ( IPL ) é uma parte do sistema atual de interrupção estado, que indica os pedidos de interrupção que vai atualmente ser aceites. O IPL pode ser indicada em hardware com os registros em um Controlador de interrupção programável , ou em software por uma máscara de bits ou valor inteiro e código fonte de tópicos
visão global
Um inteiro com base IPL pode ser tão pequena quanto um único bit, com apenas dois valores: 0 (todas as interrupções habilitado) ou 1 (todas as interrupções desativado), como no MOS Technology 6502 . No entanto, algumas arquitecturas de permitir uma maior gama de valores, em que cada valor permite pedidos de interrupção que especificam um nível mais elevado, enquanto bloqueia os do mesmo nível ou inferior.
Atribuir prioridades diferentes para pedidos de interrupção pode ser útil na tentativa de equilibrar rendimento do sistema contra interrupção latência : alguns tipos de interrupções precisam ser respondidas mais rapidamente do que outros, mas a quantidade de processamento pode não ser grande, por isso faz sentido para atribuir um maior prioridade a esse tipo de interrupção.
Controle de nível de interrupção também foi usado para sincronizar o acesso ao kernel estruturas de dados. Assim, o manipulador de interrupção de nível escalonador-3 iria aumentar temporariamente IPL a 7 antes de aceder a todas as estruturas de dados escalonador reais, em seguida, a parte inferior das costas 3 antes de efectivamente a mudar de contextos de processo. No entanto, foi não permitida para um manipulador de interrupção para reduzir IPL abaixo daquele em que foi introduzido, uma vez que isso poderia destruir a integridade do sistema de sincronização.
Claro, multiprocessador sistemas de adicionar suas próprias complicações, que não são abordados aqui.
Independentemente do que o hardware pode suportar, típicos UNIX sistemas -tipo só fazer uso de dois níveis: o mínimo (todas as interrupções desativado) eo máximo (todas as interrupções habilitado).
OpenVMS IPLs
Como um exemplo de um dos sistemas de manipulação de IPL mais elaboradas já implantados, o VAX computador e associada VMS sistema operativo suporta 32 níveis de prioridade, de 0 a 31. Prioridades 16 e acima são para solicitações de hardware externo, enquanto que os valores inferiores a 16 são disponível para interrupções de software (usado internamente pelo sistema operacional para agendar suas próprias actividades). Nem todos os valores são realmente utilizados, mas aqui estão alguns dos mais importantes:
- nível 31 é para a interrupção "power-fail".
- level 24 é para a interrupção do relógio. Note que este é uma prioridade maior do que as interrupções de E / S.
- níveis 20-23 são usados para dispositivos de I / O.
- níveis 8-11 são usados para interrupções garfo . Quando um motorista recebe uma interrupção de dispositivo (prioridade 20-23), que é suposto fazer tão pouco processamento possível a uma grande prioridade; em vez disso, se quaisquer operações demoradas precisa ser feito, estes estão a ser adiada, solicitando uma interrupção de software no intervalo de 8-11; quando essa interrupção é disparado, o processamento adicional será retomada. Semelhante a isso são "metades inferiores" e seus sucessores no Linux kernel.
- nível 7 é usado para sincronizar o acesso às estruturas de dados processo do planejador.
- nível 4 é utilizada para I / O-tarefas que o pós-processamento é, de conclusão final de um QIO pedido, incluindo os resultados de retorno para o processo de aplicação.
- nível 3 é usado para o processo de interrupção reescalonamento. Qualquer código em execução em níveis mais elevados de interrupção não é permitido supor que havia um contexto de processo atual (desde que um reagendamento processo pode ser em andamento). Em particular, falhas de página não são permitidos neste nível ou acima.
- Nível 2 é utilizado para sincronizar o acesso às estruturas de dados por processo. Toda vez que o kernel precisa ter acesso a um contexto de processo, ele envia esse processo um kernel especial AST que executa no contexto do processo no IPL 2.
- nível 0 é o nível normal para a execução de código não-interrupção, incluindo código de aplicação comum.
Alpha hardware contém suporte nativo para IPLs. Quando OpenVMS foi portado para Itanium , em 2001, o esquema IPL foi simulado utilizando recursos fornecidos pelo hardware Itanium.