Interrupção vs Exceção
Em qualquer computador, durante a execução normal de um programa, podem ocorrer eventos que podem fazer com que a CPU pare temporariamente. Eventos como este são chamados de interrupções. As interrupções podem ser causadas por falhas de software ou hardware. As interrupções de hardware são chamadas (simplesmente) de interrupções, enquanto as interrupções de software são chamadas de exceções. Uma vez que uma interrupção (software ou hardware) é levantada, o controle é transferido para uma sub-rotina especial chamada ISR (Interrupt Service Routine) que pode lidar com as condições que são levantadas pela interrupção.
O que é Interromper?
O termo Interrupção é normalmente reservado para interrupções de hardware. São interrupções de controle de programa causadas por eventos de hardware externos. Aqui, externo significa externo à CPU. As interrupções de hardware geralmente vêm de muitas fontes diferentes, como chip de temporizador, dispositivos periféricos (teclados, mouse, etc.), portas de E/S (serial, paralela, etc.), unidades de disco, relógio CMOS, placas de expansão (placa de som, vídeo cartão, etc). Isso significa que interrupções de hardware quase nunca ocorrem devido a algum evento relacionado ao programa em execução. Por exemplo, um evento como um pressionamento de tecla no teclado pelo usuário, ou um timer interno de hardware pode gerar esse tipo de interrupção e pode informar a CPU que um determinado dispositivo precisa de alguma atenção. Em uma situação como essa, a CPU parará o que estava fazendo (ou seja, pausará o programa atual), fornecerá o serviço exigido pelo dispositivo e voltará ao programa normal. Quando ocorrem interrupções de hardware e a CPU inicia o ISR, outras interrupções de hardware são desabilitadas (por exemplo, em máquinas 80×86). Se você precisar que outras interrupções de hardware ocorram enquanto o ISR estiver em execução, você precisa fazer isso explicitamente limpando o sinalizador de interrupção (com a instrução sti). Em máquinas 80×86, limpar o sinalizador de interrupção afetará apenas as interrupções de hardware.
O que são exceções?
Exception é uma interrupção de software, que pode ser identificada como uma rotina de tratamento especial. A exceção pode ser identificada como uma armadilha que ocorre automaticamente (uma armadilha pode ser identificada como uma transferência de controle, que é iniciada pelo programador). Geralmente, não há instruções específicas associadas a exceções (as armadilhas são geradas usando uma instrução específica). Assim, uma exceção ocorre devido a uma condição “excepcional” que ocorre durante a execução do programa. Por exemplo, divisão por zero, execução de um código de operação ilegal ou falha relacionada à memória pode causar exceções. Sempre que uma exceção é levantada, a CPU suspende temporariamente o programa que estava executando e inicia o ISR. ISR conterá o que fazer com a exceção. Pode corrigir o problema ou, se não for possível, pode abortar o programa normalmente imprimindo uma mensagem de erro adequada. Embora uma instrução específica não cause uma exceção, uma exceção sempre será causada por uma instrução. Por exemplo, o erro de divisão por zero só pode ocorrer durante a execução da instrução de divisão.
Qual é a diferença entre Interrupção e Exceção?
Interrupções são interrupções de hardware, enquanto exceções são interrupções de software. Ocorrências de interrupções de hardware geralmente desabilitam outras interrupções de hardware, mas isso não é verdade para exceções. Se você precisar desabilitar interrupções de hardware até que uma exceção seja atendida, você precisará limpar explicitamente o sinalizador de interrupção. E geralmente o sinalizador de interrupção no computador afeta as interrupções (de hardware) em oposição às exceções. Isso significa que limpar esse sinalizador não impedirá exceções.