Interrupção vs Armadilha
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 esses 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 ou armadilhas. Uma exceção é uma interrupção de software gerada automaticamente, enquanto uma armadilha é uma interrupção invocada por software iniciada pelo programador. Uma vez que uma interrupção (software ou hardware) é gerada, o controle é transferido para uma sub-rotina especial chamada ISR (Interrupt Service Routine) que pode lidar com as condições geradas pela interrupção.
O que é uma interrupção?
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, pausa 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 (p.g. 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 é uma Armadilha?
A Trap pode ser identificada como uma transferência de controle, que é iniciada pelo programador. O termo Trap é usado de forma intercambiável com o termo Exception (que é uma interrupção de software que ocorre automaticamente). Mas alguns podem argumentar que uma armadilha é simplesmente uma chamada de sub-rotina especial. Portanto, eles se enquadram na categoria de interrupções invocadas por software. Por exemplo, em máquinas 80×86, um programador pode usar a instrução int para iniciar um trap. Como um trap é sempre incondicional, o controle sempre será transferido para a sub-rotina associada ao trap. A instrução exata, que invoca a rotina para manipular o trap é facilmente identificada porque uma instrução explícita é usada para especificar um trap.
Qual é a diferença entre Interromper e Armadilha?
Interrupts são interrupções de hardware, enquanto traps são interrupções invocadas por software. Ocorrências de interrupções de hardware geralmente desabilitam outras interrupções de hardware, mas isso não é verdade para traps. Se você precisar desabilitar interrupções de hardware até que um trap seja servido, 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 aos traps. Isso significa que limpar esse sinalizador não impedirá armadilhas. Ao contrário dos traps, as interrupções devem preservar o estado anterior da CPU.