Qual é a diferença entre Trap e Interrupt?

Respostas:

203

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) .

Aaron Digulla
fonte
5
É interessante que lxr.free-electrons.com/source/arch/x86/kernel/… dividir por zero seja inicializado como uma interrupção de hardware, por que é isso?
Alex Kreimer # 22/12
8
Porque é realmente uma interrupção que a CPU envia quando a ALU encontra esse problema. Como uma falha de segmentação. Nem todos os erros de matemática causam interrupções (o excesso não), no entanto.
Aaron Digulla
4
Isso faz sentido. Mas, então, o que é um pouco confuso é que, nos kernels anteriores do Linux, ele foi inicializado como uma armadilha de software: set_trap_gate (0, & divide_error);
Alex Kreimer #
11
O que você quer dizer com "um pouco confuso"? É muito confuso :-) O problema aqui é que dividir por zero é uma interrupção de hardware (IRQ / vetor 0), mas os desenvolvedores do kernel têm várias opções de como lidar com isso. Portanto, a partir de um processo do usuário, é uma armadilha, mas do lado da CPU, é uma interrupção. Quem está certo? Nenhum? Ambos?
Aaron Digulla
3
Obviamente, isso é verdade apenas para CPUs x86. Outras CPUs funcionam de maneira diferente.
Aaron Digulla
110

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 vetorizados

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.

Interrompe

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

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.

Classificações de exceção

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'.

Armadilha

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.

Culpa

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.

Abortar

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.

Casos Edge

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.

ruthafjord
fonte
6
Esta é uma resposta tão boa. Eu estava certo de que a fila de revisão "Resposta tardia de um novo usuário" estava me testando para garantir que eu estivesse prestando atenção.
Noumenon
1
Obrigado! Isso significa muito para mim :)
ruthafjord
Esta é uma ótima resposta para x86. A questão originalmente era bastante geral e não mencionou o x86. Fiz uma edição para tentar encontrar um equilíbrio. Talvez você possa adicionar outro parágrafo na parte superior desta resposta para abordar a questão da terminologia fora do mundo x86? E / ou deixe outra edição sobre a questão, se você acha que eu a tornei pior: o PI realmente conhece o x86, mas espero que seja verdade que outros sistemas usem terminologia muito semelhante, e você pode apenas dizer isso :)
Peter Cordes
1
Vasculhou o livro de arquitetura da PPC e parece que suas definições estão amplamente sobrepostas. Eles têm novos nomes para casos extremos e tratam exceções como um subtipo de interrupções, em vez de fazer parte de uma categoria distinta.
Ruthafjord #
1
Eu acho que essa resposta descreve melhor. Ele discute a linha embaçada que pode existir entre os dois. E menciona que falhas de página resultam na CPU tentando novamente uma instrução que uma armadilha pula sobre a instrução e segue em frente.
In70x
9

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)

Cheshar
fonte
Boas definições. Fonte?
alexlomba87 03/02
6

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 ).

Paul R
fonte
4
Confunde as coisas ainda mais que alguns autores (Tanenbaum) se referem a "armadilhas de hardware". Se pudermos ter interceptações de hardware e interrupções de software, claramente as definições são bastante confusas e podem ir de qualquer maneira, sempre exigindo a palavra hardware ou software.
The111
3

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.

Frank
fonte
2

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.

Dinesh Reddy
fonte
2

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.

chetan pawar
fonte
2

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.

Anamik Sarvaiya
fonte
1

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.

Sanketssj5
fonte
1
Você pode explicar como a chamada do sistema é uma armadilha?
Radha Gogia