Quando um processador tem uma interrupção pendente, significa que um sinal de solicitação de interrupção foi recebido, mas ainda não foi atendido. Aqui está o que o processador normalmente faz:
1.
Reconhecimento de interrupção (se aplicável): O processador pode enviar um sinal de reconhecimento de volta ao dispositivo de interrupção, reconhecendo que recebeu a solicitação. Isso depende da arquitetura de interrupção específica (por exemplo, interrupções vetorizadas versus pesquisas).
2.
Procedimento de manuseio de interrupção: O processador executa um procedimento específico para lidar com a interrupção. Isso normalmente envolve as seguintes etapas:
*
Salvar contexto: O processador salva o estado atual do programa em execução. Isso inclui coisas como os valores dos registros, contador de programas (que indica a próxima instrução a ser executada) e potencialmente outros sinalizadores de status. Isso garante que, quando o manuseio de interrupção estiver concluído, o programa original possa retomar a execução perfeitamente de onde parou.
*
interromper vetoring (frequentemente): O processador determina qual rotina de manipulador de interrupção para executar. Isso geralmente é feito usando uma tabela de vetor de interrupção. Cada entrada nesta tabela aponta para o endereço de memória do código que lida com um tipo específico de interrupção. O vetor de interrupção é determinado com base na fonte ou tipo da interrupção.
*
Executar manipulador de interrupção: O processador salta para o endereço especificado pelo vetor de interrupção e executa a rotina de serviço de interrupção apropriada (ISR) ou o manipulador de interrupção. Este código executa a ação necessária para responder à interrupção (por exemplo, ler dados de um dispositivo, atualizar um cronômetro, manipular uma pressão de teclado).
*
Restaurar o contexto: Após a conclusão do ISR, o processador restaura o contexto salvo da etapa 2. Isso inclui recarregar os registros, contador de programas e sinalizadores de status.
*
retornar da interrupção: Uma instrução especial (por exemplo, `IRET` em x86) é executada para retornar o controle do programa interrompido. O processador retoma a execução da instrução imediatamente após o ponto em que a interrupção ocorreu.
3.
Prioridade de interrupção (se aplicável): Se várias interrupções estiverem pendentes, o processador poderá priorizá -las com base nos níveis de prioridade atribuídos. As interrupções de prioridade mais alta podem antecipar as de menor prioridade. O mecanismo exato para lidar com várias interrupções varia dependendo da arquitetura do processador.
4. O processador pode mascarar (desativar) interrupções específicas. Isso impede que certas interrupções interrompem a execução do programa atual ou de outro manipulador de interrupção. Isso geralmente é útil para prevenir conflitos ou garantir que tarefas críticas não sejam interrompidas.
Em essência, uma interrupção pendente faz com que o processador suspenda temporariamente sua tarefa atual, lidar com a interrupção e retomar a tarefa original. Isso permite que o sistema responda a eventos externos de maneira oportuna e eficiente.