Come vengono attuati gli interrupt nella pratica? [chiuso]

2

Considerare un dispositivo USB che sta ricevendo dati su una rete wireless e un'applicazione in esecuzione sul PC sta leggendo questi dati. Ora, in molte lingue (si consideri C # DataReceived), abbiamo meccanismi di gestione degli eventi per rilevare se Data è arrivato o meno.

La mia domanda è, come viene implementato questo meccanismo di rilevamento degli eventi?

È come un timer che controlla periodicamente l'arrivo dei dati o è qualcosa che l'hardware deve supportare?

In generale, in che modo vengono implementati questi cambiamenti negli eventi di stato hardware?

    
posta Shamim Hafiz 29.11.2011 - 15:14
fonte

2 risposte

6

Gli interrupt sono un meccanismo hardware simile agli eventi.

Ogni volta che si verifica una condizione specifica nel mondo fisico (ad esempio, i dati che arrivano su USB), una linea passa da un livello all'altro. Questa è una richiesta di interruzione.

La CPU è progettata per rilevare questa modifica e per rispondere saltando a una routine di servizio di interrupt. Questa routine a sua volta genera un evento software.

    
risposta data 29.11.2011 - 15:33
fonte
4

L'USB è piuttosto complicato perché varie parti del protocollo possono essere implementate nell'hardware a seconda della piattaforma utilizzata. Potrebbe essere più semplice considerare qualcosa di un po 'più semplice, forse un controller di porta seriale.

La serie precisa di azioni che vengono eseguite dipenderà dal meccanismo di gestione degli interrupt del processore (alcuni processori sono più automatizzati nella manutenzione degli interrupt di altri). La descrizione che segue è tipica dei processori che ho utilizzato nel corso degli anni.

Normalmente il controller seriale riceve un carattere che è programmato per generare un segnale di interruzione al processore. Questo è un segnale fisico che indica alla CPU che è necessario intervenire su un evento esterno. Questo segnale fa sì che il processore completi l'istruzione corrente e quindi metta il suo attuale indirizzo di esecuzione e i registri dello stato del processore nello stack.

L'indirizzo di elaborazione viene modificato nella routine del servizio di interrupt. Può esserci una routine di servizio per tutti gli interrupt o un numero di routine di interrupt una per ciascuna delle origini di interrupt supportate dal processore. Queste funzioni di interrupt devono interrogare il dispositivo che interrompe per determinare il motivo dell'interrupt e quindi eseguire le azioni appropriate, in questo caso per leggere il carattere dalla porta seriale e spostarlo sul buffer dei dati seriali di input per essere utilizzato dal processore principale applicazione.

Una volta che l'elaborazione dell'interrupt è stata completata, lo stato del processore e l'indirizzo di esecuzione vengono ripristinati e l'elaborazione continua quindi dall'istruzione dopo l'ultima istruzione eseguita prima dell'interruzione. È estremamente importante che tutti i registri del processore utilizzati dall'elaborazione dell'interrupt vengano ripristinati esattamente nello stesso stato prima che la routine si interrompa in modo che l'unico effetto dell'interrupt sul codice principale sia quello di inserire un breve ritardo nel codice di elaborazione della linea principale .

Il codice di interrupt deve impostare gli indicatori di evento sul codice principale in modo che il codice di applicazione di alto livello possa rilevare che l'evento di interruzione è avvenuto.

    
risposta data 29.11.2011 - 15:39
fonte

Leggi altre domande sui tag