Respostas:
Uma armadilha é uma exceção em um processo do usuário. É causado por divisão por zero ou acesso inválido à memória. É também a maneira usual de invocar uma rotina do kernel (uma chamada do sistema ) porque é executada com uma prioridade mais alta que o código do usuário. O tratamento é síncrono (portanto, o código do usuário é suspenso e continua depois). Em certo sentido, eles são "ativos" - na maioria das vezes, o código espera que a armadilha aconteça e depende desse fato.
Uma interrupção é algo gerado pelo hardware (dispositivos como disco rígido, placa gráfica, portas de E / S, etc.). Elas são assíncronas (ou seja, não ocorrem em locais previsíveis no código do usuário) ou "passivas", pois o manipulador de interrupções precisa esperar que elas aconteçam eventualmente.
Você também pode ver uma interceptação como um tipo de interrupção interna da CPU, pois o manipulador do manipulador de interceptações parece um manipulador de interrupções (registradores e ponteiros de pilha são salvos, há uma alternância de contexto, a execução pode continuar em alguns casos em que parou) .
Armadilhas e interrupções estão intimamente relacionadas. As armadilhas são um tipo de exceção e as exceções são semelhantes às interrupções.
Intel x86 define duas categorias que se sobrepõem, eventos vectored ( interrupções vs exceções ), e classes de exceção ( falhas vs armadilhas vs aborts ).
Todas as citações nesta publicação são da versão de abril de 2016 do Intel Software Developer Manual . Para a perspectiva x86 (definitiva e complexa), recomendo a leitura do capítulo do SDM sobre o tratamento de interrupções e exceções.
Eventos vetoriais ( interrupções e exceções ) fazem com que o processador pule para um manipulador de interrupções depois de salvar grande parte do estado do processador (o suficiente para que a execução possa continuar a partir desse ponto posteriormente).
Exceções e interrupções têm um ID, chamado vetor, que determina para qual manipulador de interrupções o processador salta. Manipuladores de interrupção são descritos na Tabela de descritores de interrupção.
As interrupções ocorrem em momentos aleatórios durante a execução de um programa, em resposta a sinais do hardware. O hardware do sistema usa interrupções para manipular eventos externos ao processador, como solicitações para manutenção de dispositivos periféricos. O software também pode gerar interrupções executando a instrução INT n.
Exceções ocorrem quando o processador detecta uma condição de erro ao executar uma instrução, como divisão por zero. O processador detecta uma variedade de condições de erro, incluindo violações de proteção, falhas de página e falhas internas da máquina.
As exceções são classificadas como falhas , interrupções ou interrupções, dependendo da maneira como são relatadas e se a instrução que causou a exceção pode ser reiniciada sem perda de continuidade do programa ou da tarefa.
Resumo: as armadilhas incrementam o ponteiro da instrução, as falhas não e abortam 'explodir'.
Uma interceptação é uma exceção relatada imediatamente após a execução da instrução de interceptação. As armadilhas permitem que a execução de um programa ou tarefa seja continuada sem perda da continuidade do programa. O endereço de retorno do manipulador de trap aponta para a instrução a ser executada após a instrução de trap.
Uma falha é uma exceção que geralmente pode ser corrigida e que, uma vez corrigida, permite que o programa seja reiniciado sem perda de continuidade. Quando uma falha é relatada, o processador restaura o estado da máquina para o estado anterior ao início da execução da instrução com falha. O endereço de retorno (conteúdo salvo dos registros CS e EIP) do manipulador de falhas aponta para a instrução com falha, em vez da instrução após a instrução com falha.
Exemplo: Uma falha de página geralmente é recuperável. Uma parte do espaço de endereço de um aplicativo pode ter sido trocada para o disco a partir da ram. O aplicativo acionará uma falha de página ao tentar acessar a memória que foi trocada. O kernel pode extrair essa memória do disco para o ram e devolver o controle ao aplicativo. O aplicativo continuará de onde parou (na instrução de falha que estava acessando a memória trocada), mas desta vez o acesso à memória deve ter êxito sem falha.
Um cancelamento é uma exceção que nem sempre informa a localização precisa da instrução que está causando a exceção e não permite a reinicialização do programa ou tarefa que causou a exceção. Os cancelamentos são usados para relatar erros graves, como erros de hardware e valores inconsistentes ou ilegais nas tabelas do sistema.
As interrupções invocadas por software (acionadas pela instrução INT) se comportam de maneira semelhante a uma armadilha. A instrução é concluída antes que o processador salve seu estado e salte para o manipulador de interrupções.
De um modo geral, termos como exceções, falhas, interrupções , interceptações e interrupções significam a mesma coisa e são chamados de "interrupções".
Chegando à diferença entre Interceptação e Interrupção:
Trap: É um programador iniciado e a transferência esperada de controle para uma rotina de tratamento especial. (Por exemplo: instrução INT 80x86 é um bom exemplo)
Enquanto que
Interrupção (hardware): É uma interrupção de controle de programa com base em um evento de hardware externo externo à CPU (por exemplo: pressionar uma tecla no teclado ou um tempo limite em um chip de timer)
Uma armadilha é um tipo especial de interrupção, geralmente chamado de interrupção de software . Uma interrupção é um termo mais geral que abrange interrupções de hardware (interrupções de dispositivos de hardware) e interrupções de software (interrupções de software, como traps ).
Uma armadilha é chamada pelo código como programas e usada, por exemplo, para chamar rotinas do SO (ou seja, normalmente síncronas). Uma interrupção é chamada por eventos (muitas vezes o hardware, como a placa de rede que recebeu dados ou o timer da CPU) e - como o nome sugere - interrompe o fluxo de controle normal, pois a CPU precisa mudar para a rotina do driver para lidar com o evento.
Uma interrupção é uma mudança de fluxo gerada por hardware dentro do sistema. Um manipulador de interrupção é convocado para lidar com a causa da interrupção; O controle é retornado ao contexto e instrução interrompidos. Uma armadilha é uma interrupção gerada por software. Uma interrupção pode ser usada para sinalizar a conclusão de uma E / S para evitar a necessidade de pesquisa de dispositivo. Uma interceptação pode ser usada para chamar rotinas do sistema operacional ou detectar erros aritméticos.
Eu acho que as armadilhas são causadas pela execução das instruções atuais e, portanto, são chamadas como eventos síncronos. onde as interrupções são causadas por uma instrução independente em execução no processador que está relacionada a eventos externos e, portanto, é conhecida como assíncrona.
Interrupções 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 uma interceptação seja veiculada, é necessário limpar explicitamente o sinalizador de interrupção. E, geralmente, o sinalizador de interrupção no computador afeta as interrupções (hardware), em oposição aos traps. Isso significa que limpar esta bandeira não impedirá armadilhas. Diferentemente das traps, as interrupções devem preservar o estado anterior da CPU.
Uma armadilha é uma interrupção do software. Se você escreve um programa no qual declara uma variável dividida pelo valor zero, ela é tratada como uma armadilha. Sempre que você executa esse programa, ele gera o mesmo erro ao mesmo tempo. versão especial da armadilha na qual um programa solicita ao sistema operacional o serviço necessário. Em caso de interrupção (uma palavra geral para interrupções de hardware) como um erro de E / S, a CPU é interrompida em tempo aleatório e, é claro, não é culpa de nossos programadores. É o hardware que os traz à tona.