Qual'è la differenza tra Trap e Interrupt?


Risposte:


203

Una trap è un'eccezione in un processo utente. È causato dalla divisione per zero o accesso alla memoria non valido. È anche il solito modo di invocare una routine del kernel (una chiamata di sistema ) perché quelli hanno una priorità più alta rispetto al codice utente. La gestione è sincrona (quindi il codice utente viene sospeso e continua in seguito). In un certo senso sono "attivi" - il più delle volte, il codice si aspetta che avvenga la trappola e si basa su questo fatto.

Un interrupt è qualcosa generato dall'hardware (dispositivi come il disco rigido, la scheda grafica, le porte I / O, ecc.). Questi sono asincroni (ovvero non si verificano in punti prevedibili nel codice utente) o "passivi" poiché il gestore di interrupt deve attendere che alla fine si verifichino.

Puoi anche vedere una trap come una specie di interruzione interna alla CPU poiché il gestore per gestore delle trap sembra un gestore di interruzioni (i registri e i puntatori dello stack vengono salvati, c'è un interruttore di contesto, l'esecuzione può riprendere in alcuni casi da dove era stata interrotta) .


5
È interessante notare che lxr.free-electrons.com/source/arch/x86/kernel/… divide per zero è inizializzato come interruzione hardware, perché è così?
Alex Kreimer,

8
Perché è davvero un interrupt che la CPU invia quando l'ALU rileva questo problema. Proprio come un errore di segmentazione. Tuttavia, non tutti gli errori matematici causano interruzioni (overflow no).
Aaron Digulla,

4
Questo ha senso. Ma poi, ciò che è un po 'di confusione è perché nei precedenti kernel Linux è stato inizializzato come una trappola software: set_trap_gate (0, & divide_error);
Alex Kreimer,

11
Cosa intendi con "un po 'di confusione"? È molto confuso :-) Il problema qui è che la divisione per zero è un interrupt di processo (IRQ / vettore 0) ma gli sviluppatori del kernel hanno diverse scelte su come gestirlo. Quindi, da un processo utente, è una trappola ma dal lato CPU, è un interrupt. Chi ha ragione? Nessuna? Tutti e due?
Aaron Digulla,

3
Ovviamente, questo è vero solo per le CPU x86. Altre CPU funzionano in modo diverso.
Aaron Digulla,

110

Trappole e interruzioni sono strettamente correlate. Le trap sono un tipo di eccezione e le eccezioni sono simili agli interrupt.

Intel x86 definisce due categorie sovrapposte, eventi vettoriali ( interruzioni vs eccezioni ) e classi di eccezioni ( guasti vs trap o interruzioni ).

Tutte le citazioni in questo post sono della versione di aprile 2016 del Manuale per gli sviluppatori di software Intel . Per la prospettiva x86 (definitiva e complessa), raccomando di leggere il capitolo dell'SDM sulla gestione di Interrupt ed Exception.

Eventi vettoriali

Eventi vettoriali ( interruzioni ed eccezioni ) fanno sì che il processore salti in un gestore di interrupt dopo aver salvato gran parte dello stato del processore (abbastanza in modo che l'esecuzione possa continuare da quel punto in seguito).

Eccezioni e interruzioni hanno un ID, chiamato vettore, che determina a quale gestore di interruzioni passa il processore. I gestori di interrupt sono descritti nella tabella descrittori di interrupt.

interrupt

Gli interruzioni si verificano in momenti casuali durante l'esecuzione di un programma, in risposta a segnali dall'hardware. L'hardware di sistema utilizza gli interrupt per gestire gli eventi esterni al processore, come le richieste di assistenza ai dispositivi periferici. Il software può anche generare interruzioni eseguendo l'istruzione INT n.

eccezioni

Si verificano eccezioni quando il processore rileva una condizione di errore durante l'esecuzione di un'istruzione, come la divisione per zero. Il processore rileva una varietà di condizioni di errore, tra cui violazioni della protezione, errori di pagina e guasti interni alla macchina.

Classificazioni di eccezione

Le eccezioni sono classificate come guasti , trap o interruzioni a seconda del modo in cui vengono segnalate e se le istruzioni che hanno causato l'eccezione possono essere riavviate senza perdita di programma o continuità dell'attività.

Riepilogo: le trap aumentano il puntatore dell'istruzione, i guasti no e interrompono l'esplosione.

Trappola

Una trap è un'eccezione segnalata immediatamente dopo l'esecuzione dell'istruzione di trapping. Le trap consentono di continuare l'esecuzione di un programma o di un'attività senza perdere la continuità del programma. L'indirizzo di ritorno per il gestore trap indica l'istruzione da eseguire dopo l'istruzione di trapping.

Colpa

Un errore è un'eccezione che in genere può essere corretta e che, una volta corretta, consente di riavviare il programma senza perdita di continuità. Quando viene segnalato un errore, il processore ripristina lo stato della macchina allo stato prima dell'inizio dell'esecuzione dell'istruzione di errore. L'indirizzo di ritorno (contenuto salvato dei registri CS ed EIP) per il gestore dei guasti punta all'istruzione di guasto, anziché all'istruzione che segue l'istruzione di guasto.

Esempio: un errore di pagina è spesso recuperabile. Una parte dello spazio degli indirizzi di un'applicazione potrebbe essere stata scambiata su disco da ram. L'applicazione attiverà un errore di pagina quando tenta di accedere alla memoria che è stata scambiata. Il kernel può estrarre quella memoria dal disco al ram e riportare il controllo manuale all'applicazione. L'applicazione continuerà da dove era stata interrotta (all'istruzione di errore che stava accedendo alla memoria sostituita), ma questa volta l'accesso alla memoria dovrebbe avere esito positivo senza errori.

abortire

Un abort è un'eccezione che non riporta sempre la posizione precisa dell'istruzione che causa l'eccezione e non consente il riavvio del programma o dell'attività che ha causato l'eccezione. Gli aborti vengono utilizzati per segnalare errori gravi, come errori hardware e valori incoerenti o illegali nelle tabelle di sistema.

Custodie per bordi

Gli interrupt richiamati dal software (attivati ​​dall'istruzione INT) si comportano in modo simile a una trap. L'istruzione viene completata prima che il processore salvi il suo stato e salti al gestore di interrupt.


6
Questa è una buona risposta, sono stato certo che la coda di recensioni "Risposta tardiva da un nuovo utente" mi stava dando un test per assicurarmi di prestare attenzione.
Noumenon,

1
Grazie! Questo significa molto per me :)
Ruthafjord,

Questa è un'ottima risposta per x86. Inizialmente la domanda era piuttosto generale e non menzionava x86. Ho fatto una modifica per cercare di trovare un equilibrio. Forse potresti aggiungere un altro paragrafo all'inizio di questa risposta per affrontare la questione della terminologia al di fuori del mondo x86? E / o lascia un'altra modifica alla domanda se pensi che abbia peggiorato le cose: PI conosco davvero x86 me stesso, ma speriamo che sia vero che altri sistemi usano una terminologia molto simile, e puoi semplicemente dirlo :)
Peter Cordes

1
Scremato il PPC aarchitecture libro, e sembra che le loro definizioni sono in gran parte si sovrappongono. Hanno nuovi nomi per i casi limite e trattano le eccezioni come un sottotipo di interrupt, piuttosto che parte di una categoria distinta.
Ruthafjord,

1
Penso che questa risposta la descriva meglio. Discute la linea sfocata che può esistere tra i due. E menziona che gli errori di pagina causano il tentativo della CPU di ritentare un'istruzione che una trap salta sull'istruzione e continua.
in70x,

9

In generale, termini come eccezioni, guasti, interruzioni, trappole e interruzioni significano tutte la stessa cosa e sono chiamati "interruzioni".

Venendo alla differenza tra Trap e Interrupt:

Trap: un programmatore è avviato e prevede il trasferimento del controllo a una routine di gestione speciale. (Ad esempio: l' istruzione INT 80x86 è un buon esempio)

Mentre

Interrupt (Hardware): interruzione del controllo del programma basata su un evento hardware esterno esterno alla CPU (ad esempio: premere un tasto sulla tastiera o un timeout su un chip timer)


Buone definizioni. Fonte?
alexlomba87,

6

Una trap è un tipo speciale di interrupt che viene comunemente definito interrupt software . Un interrupt è un termine più generale che copre sia gli interrupt di processo (interruzioni da dispositivi hardware) sia gli interrupt di software (interruzioni da software, come trap ).


4
Confonde ancora di più il fatto che alcuni autori (Tanenbaum) facciano riferimento a "trappole hardware". Se possiamo avere trappole hardware e interruzioni del software, chiaramente le definizioni sono abbastanza confuse e possono andare in entrambi i modi, richiedendo sempre la parola hardware o software.
The111

3

Una trap viene chiamata da programmi simili a codici e utilizzata ad esempio per chiamare routine del sistema operativo (cioè normalmente sincrona). Un evento viene chiamato da eventi (molte volte l'hardware, come la scheda di rete che ha ricevuto dati o il timer della CPU) e - come suggerisce il nome - interrompe il normale flusso di controllo, poiché la CPU deve passare alla routine del driver per gestire l'evento.


2

Un interrupt è un cambio di flusso generato dall'hardware all'interno del sistema. Un gestore di interrupt viene chiamato per gestire la causa dell'interrupt; il controllo viene quindi restituito al contesto e all'istruzione interrotti. Una trap è un interrupt generato dal software. Un interrupt può essere utilizzato per segnalare il completamento di un I / O per ovviare alla necessità di polling del dispositivo. Una trap può essere utilizzata per chiamare routine del sistema operativo o per rilevare errori aritmetici.


2

Penso che le trap siano causate dall'esecuzione delle istruzioni correnti e quindi vengano chiamate eventi sincroni. dove come interruzioni sono causate da un'istruzione indipendente che è in esecuzione nel processore che sono correlate ad eventi esterni e quindi sono noti come quelli asincroni.


2

Gli interrupt sono interruzioni hardware, mentre le trap sono interruzioni invocate dal software. Le occorrenze di interruzioni hardware di solito disabilitano altre interruzioni hardware, ma questo non è vero per le trap. Se è necessario impedire gli interrupt di processo fino a quando non viene fornita una trap, è necessario cancellare esplicitamente il flag di interrupt. E di solito il flag di interruzione sul computer influenza gli interrupt (hardware) anziché le trap. Ciò significa che l'eliminazione di questo flag non impedirà le trappole. A differenza delle trap, gli interrupt dovrebbero preservare lo stato precedente della CPU.


1

Una trap è un interrupt software. Se si scrive un programma in cui si dichiara una variabile con divisione per valore zero, viene trattata come una trap. Ogni volta che si esegue questo programma, si genera lo stesso errore allo stesso tempo. La chiamata di sistema è un versione speciale di trap in cui un programma richiede al sistema operativo il servizio richiesto. In caso di interruzione (una parola generale per interruzioni hardware) come un errore di I / O, la CPU viene interrotta in modo casuale e ovviamente non è colpa dei nostri programmatori: è l'hardware che li genera.


1
Puoi spiegare come la chiamata di sistema è una trappola?
Radha Gogia,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.