Risposte:
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) .
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 ( 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.
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.
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.
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.
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.
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.
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.
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.
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)
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 ).
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.
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.
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.
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.
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.