2009-11-23 16 views
14

Qual è la differenza tra l'interrupt e un evento?Differenza tra interrupt ed evento

+2

dipende dal contesto. Stai parlando di un linguaggio di programmazione? sistema operativo ? hardware ? I termini interrupt e event dipendono spesso dal contesto. –

+0

kernel del sistema operativo sono i tag. Quindi, penso che questo spieghi il contesto. – claws

+0

Vedere anche: http://stackoverflow.com/q/4835714/119790 –

risposta

27

Questi due concetti offrono entrambi modi per il "sistema/programma" di gestire le varie "condizioni" che si verificano durante il normale svolgimento di alcuni programmi e che potrebbero richiedere al "sistema/programma" di fare qualcos'altro, prima di tornare (o non ...) al compito originale. Tuttavia, oltre a questa somiglianza funzionale, sono concetti molto distinti utilizzati in contesti distinti, a livelli distinti.

interrupt fornire un dispositivo basso livello per interrompere il normale svolgimento di qualsiasi pezzo di programmare la CPU sta lavorando a un un dato momento, e per avere le istruzioni di elaborazione CPU inizio a un altro indirizzo. Gli interrupt sono utili per gestire varie situazioni che richiedono l'elaborazione immediata della CPU (ad esempio per gestire i tasti o l'arrivo di nuovi dati in un canale di comunicazione seriale).

Molte interruzioni sono generate dall'hardware (da qualche dispositivo elettronico che modifica la polarità su uno dei pin della CPU), ma ci sono anche interrupt software che sono causati dal programma stesso che invoca una particolare istruzione. (o anche dalla CPU che rileva qualcosa che è fuori strada rispetto a se stesso o al programma in esecuzione).

Un interrupt molto famoso è INT 0x21 che il programma invoca [d] per chiamare i servizi da MS-DOS.

Gli interrupt vengono in genere inviati tramite tabelle vettoriali, per cui la CPU ha una particolare posizione in memoria contenente una matrice di indirizzi [dove risiedono particolari gestori di interrupt]. Modificando il contenuto della tabella degli interrupt [se è così consentito ...], un programma può ridefinire quale particolare gestore verrà chiamato per un dato numero di interrupt.

Eventi, d'altra parte, sono/lingua a livello di sistema "messaggi" che possono essere utilizzati per indicare una varietà di hardware o software situazioni (mi piacerebbe utilizzare l'evento di parola), come ad esempio Clic del mouse, voci di tastiera, ma anche situazioni a livello di applicazione come "Nuovo record inserito nel database" o richieste e messaggi altamente digeriti, utilizzati in programmi modulari per comunicazioni/richieste tra varie parti del programma.

A differenza degli interrupt con il loro comportamento [relativamente semplice] che è completamente definito dalla CPU, esistono vari sistemi di sistemi di eventi, a livello del sistema operativo e di vari framework (ad esempio: MS Windows, JavaScript, .NET , Framework GUI come QT ecc.). Tutti i sistemi eventi, mentre differenti nelle loro implementazioni, tipicamente condividono proprietà comuni come

  • il concetto di un gestore, che è una particolare funzione/metodo del programma che è designato per gestire particolari tipi di evento dal particolare evento fonti.
  • il concetto di un evento, che è un [tipicamente piccolo] struttura contenente informazioni sull'evento: il tipo, la sua fonte, parametri personalizzati (che semantica dipendono dal tipo di evento)
  • una coda dove gli eventi sono inserite dal fonti e interrogati dai consumatori/gestori (o più precisamente dai dispatcher, a seconda del sistema ...)
1

Gli interrupt sono implementati all'interno dell'hardware (CPU) per interrompere il flusso solitamente lineare di un programma. Questo è importante per eventi esterni come l'input da tastiera ma anche per l'interruzione di programmi in sistemi operativi multi-tasking.

Gli eventi sono un mezzo di ingegneria del software e probabilmente più noti dai toolkit della GUI. Lì, il toolkit/OS avvolge avvenimenti come le pressioni dei tasti o l'input del mouse in "eventi". Questi vengono poi inviati ai programmi che sono andati a registrarsi per ricevere tali eventi. È forse un po 'come un sistema di mailing.

Per confrontare i due, da una visione del programma userspace:

-Interrupts costringerebbe il vostro programma per fermare in modo da permettere un certo codice di livello inferiore execute (come il codice del sistema operativo)

-Eventi di solito vengono inviati a te dal codice di livello inferiore e attivare l'esecuzione del codice

Problemi correlati