Interrupt: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
italianizzo voce e richiedo cambio nome
Voci correlate: , Aggiunta DMA (Direct Memory Access) alla lista delle voci correlate agli interrupt, sezione informatica
 
(46 versioni intermedie di 17 utenti non mostrate)
Riga 1:
{{F|sistemi operativi|febbraio 2013}}
{{Sposta|Interruzione|Propongo il cambio di nome della voce nel rispetto della convenzione secondo cui debbano essere utilizzati i nomi italiani per facilitare la comprensione dell'argomento (vedasi ad es. "rete sociale" al posto di "social network" o "gestore di interruzioni programmabile" al posto di "programmable interrupt controller"), ove gli stessi in inglese non siano entrati stabilmente nella lingua italiana (ad es. computer e mouse).}}{{F|sistemi operativi|febbraio 2013}}
Una '''interruzione''' (in [[Lingua inglese|inglese]]: ''interrupt''), in [[informatica]], è un segnale asincrono che indica il "bisogno di attenzione" da parte di una [[periferica]] finalizzata ad una particolare richiesta di servizio, un evento sincrono che consente l'interruzione di un [[processo (informatica)|processo]] qualora si verifichino determinate condizioni ([[gestione dei processi]]) oppure più in generale una particolare richiesta al [[sistema operativo]] da parte di un [[processo (informatica)|processo]] in [[esecuzione (informatica)|esecuzione]].
 
UnaUn '''interruzioneinterrupt''' (in [[Lingua inglese|inglese]]: ''interrupt''), in [[informatica]], è un segnale asincrono che indica il "bisogno di attenzione" da parte di una [[periferica]] finalizzata ad una particolare richiesta di servizio, un evento sincrono che consente l'interruzione di un [[processo (informatica)|processo]] qualora si verifichino determinate condizioni ([[gestione dei processi]]) oppure più in generale una particolare richiesta al [[sistema operativo]] da parte di un [[processo (informatica)|processo]] in [[esecuzione (informatica)|esecuzione]].
=={{Ancora|Tipi di interrupt}}Tipi di interruzioni ==
Ci sono due tipi di interruzioni:
*Interruzioni hardware, generate da dispositivi esterni alla [[CPU]] (periferiche), che hanno il compito di comunicare il verificarsi di eventi esterni, di solito dispositivi di [[input/output]]. Una interruzione [[hardware]] costringe il [[processore]] a memorizzare il suo stato di esecuzione fino all'arrivo dell'interruzione e ad iniziare l'esecuzione della [[Funzione (informatica)|funzione]] ([[commutazione di contesto]]) che esegue il compito richiesto dall'interruzione, terminato il quale il processore riprende l'esecuzione delle operazioni che stava precedentemente elaborando. Nella pratica, si nota un rallentamento del sistema ed un aumento dell'uso della CPU, che può arrivare ad essere impegnata al 100% e per lunghi periodi.
*Interruzioni software, delle istruzioni [[Linguaggio assembly|assembly]], tipo ''INT xx'' o ''SYSCALL'', che possono essere assimilate alle chiamate di sottoprogrammi, ma che sfruttano il [[meccanismo delle interruzioni]] per passare il controllo dal [[programma (informatica)|programma]] chiamante a quello chiamato, e viceversa; vengono utilizzati per accedere direttamente alle risorse del sistema operativo.
 
== Tipologie ==
=={{Ancora|Uso degli interrupt}}Uso delle interruzioni ==
Ci sono due tipi di interruzioniinterrupt:
Le interruzioni vengono utilizzati principalmente quando:
*Interruzioni ''Interrupt hardware,'' generategenerati da dispositivi esterni alla [[CPU]] (periferiche), che hanno il compito di comunicare il verificarsi di eventi esterni, di solito dispositivi di [[inputInput/outputOutput]]. UnaUn interruzioneinterrupt [[hardware]] costringe il [[processore]] a memorizzare il suo stato di esecuzione fino all'arrivo dell'interruzioneinterrupt e ad iniziare l'esecuzione della [[Funzionesubroutine]] (informaticasottoprogramma)|funzione]] ([[commutazione di contesto]]) che esegue il compito richiesto dall'interruzioneinterrupt, terminato il quale il processore riprende l'esecuzione delle operazioni che stava precedentemente elaborando. Nella pratica, si nota un rallentamento del sistema ed un aumento dell'uso della CPU, che può arrivare ad essere impegnata al 100% e per lunghi periodi.
*Interruzioni ''Interrupt software,'': sono delle istruzioni [[Linguaggio assembly|assembly]], tipo ''INT xx'' o ''SYSCALL'', che possono essere assimilate alle chiamate di sottoprogrammi, ma che sfruttano il [[meccanismo delle interruzioni]] per passare il controllo dal [[programma (informatica)|programma]] chiamante a quello chiamato, e viceversa; vengono utilizzati per accedere direttamente alle risorse del sistema operativo.
 
=={{Ancora| Uso degli interrupt}}Uso delle interruzioni ==
*un processo tenta di eseguire un'[[istruzione (informatica)|istruzione]] non valida, come una divisione per zero. In questi casi non è possibile proseguire con l'esecuzione del processo, perché genererebbe parecchi errori, corromperebbe i dati nei [[registro (informatica)|registri]] della CPU e/o porterebbe a un [[Crash (informatica)|crash]] il sistema stesso. Quindi l'interruzione consente di informare il sistema operativo di quanto avvenuto in modo da permettere la corretta gestione del problema.
LeGli interruzioniinterrupt vengono utilizzati principalmente quando:
*un processo richiede un'operazione di I/O al sistema operativo. Le CPU moderne prevedono la possibilità di utilizzare diversi livelli di privilegi, per ragioni di [[sicurezza informatica|sicurezza]], che i processi in esecuzione possono ricevere. Solo il sistema operativo può effettuare alcune operazioni come accedere ad alcune aree di [[memoria (informatica)|memoria]] protette o gestire le [[periferica|periferiche]].
*un dispositivo di [[I/O]] informa la CPU che è disponibile a ricevere o fornire [[dati]]. In questo caso viene avviata un'opportuna procedura del sistema operativo preposta ad occuparsi della relativa periferica. Questo tipo di interruzione necessita una gestione molto attenta, infatti è possibile che due dispositivi abbiano generato un interruzione durante l'esecuzione di un processo, ed è necessario disporre di meccanismi che evitino conflitti e la perdita di informazioni, ad esempio decidendo quale interruzione ha maggiore priorità e deve essere eseguito per primo e ponendo in coda il secondo, delegando il compito al [[controllore di interruzioni programmabile]].
*il tempo massimo a disposizione per tale processo è raggiunto e lo [[scheduler]] deve riassegnare la CPU ad un altro processo in coda.
*viene effettuato il [[debugging|debug]] di un'applicazione. Durante la fase di sviluppo di un [[software|programma]] è frequente la necessità di testare il funzionamento di quanto creato per scoprire e risolvere l'origine dei malfunzionamenti. Il debugging consente di seguire l'evoluzione del programma istruzione per istruzione, dando la possibilità di interrompere il processo in qualunque momento per verificare il valore di ogni parametro. Per effettuare questo è necessario che il [[codice sorgente]] sia compilato in maniera apposita, in questo caso se il programma viene eseguito sotto il controllo di un apposito programma, il [[debugger]], ad ogni istruzione viene eseguita un'interruzione che consente di verificare se in tale punto è richiesta l'interruzione del processo.
 
* un processo tenta di eseguire un'[[istruzione (informatica)|istruzione]] non valida, come una divisione per zero. In questi casi non è possibile proseguire con l'esecuzione del processo, perché genererebbe parecchi errori, corromperebbe i dati nei [[registro (informatica)|registri]] della CPU e/o porterebbe a un [[Crash (informatica)|crash]] il sistema stesso. Quindi l'interruzioneinterrupt consente di informare il sistema operativo di quanto avvenuto in modo da permettere la corretta gestione del problema.
=={{Anchor|Gestione degli interrupt}}Gestione delle interruzioni ==
* un processo richiede un'operazione di I/O al sistema operativo. Le CPU moderne prevedono la possibilità di utilizzare diversi livelli di privilegi, per ragioni di [[sicurezza informatica|sicurezza]], che i processi in esecuzione possono ricevere. Solo il sistema operativo può effettuare alcune operazioni come accedere ad alcune aree di [[memoria (informatica)|memoria]] protette o gestire le [[periferica|periferiche]].
Nel momento in cui il processore riceve una richiesta di interruzione, vi è l'esigenza di determinare quale sia il dispositivo ad averla generata. Vi sono tre sistemi principali per farlo:
* un dispositivo di [[I/O]] informa la CPU che è disponibile a ricevere o fornire [[dati]]. In questo caso viene avviata un'opportuna procedura del sistema operativo preposta ad occuparsi della relativa periferica. Questo tipo di interruzioneinterrupt necessita una gestione molto attenta, infatti è possibile che due dispositivi abbiano generato un interruzioneinterrupt durante l'esecuzione di un processo, ed è necessario disporre di meccanismi che evitino conflitti e la perdita di informazioni, ad esempio decidendo quale interruzioneinterrupt ha maggiore priorità e deve essere eseguito per primo e ponendo in coda il secondo, delegando il compito al [[controllore diProgrammable interruzioniInterrupt programmabileController]].
*Linee di interruzione multiple.
* il tempo massimo a disposizione per tale processo è raggiunto e lo [[scheduler]] deve riassegnare la CPU ad un altro processo in coda.
*Scansione delle interruzioni ([[Polling (informatica)|''polling'']]).
* viene effettuato il [[debugging|debug]] di un'applicazione. Durante la fase di sviluppo di un [[software|programma]] è frequente la necessità di testare il funzionamento di quanto creato per scoprire e risolvere l'origine dei malfunzionamenti. Il debugging consente di seguire l'evoluzione del programma istruzione per istruzione, dando la possibilità di interrompere il processo in qualunque momento per verificare il valore di ogni parametro. Per effettuare questo è necessario che il [[codice sorgente]] sia compilato in maniera apposita, in questo caso se il programma viene eseguito sotto il controllo di un apposito programma, il [[debugger]], ad ogni istruzione viene eseguitaeseguito un'interruzione interrupt che consente di verificare se in tale punto è richiesta l'interruzione del processo.
*Vettorizzazione delle interruzioni.
 
=={{Anchor| Gestione degli interrupt}}Gestione delle interruzioni ==
Nelle linee di interruzione multiple ad ogni dispositivo è associato un proprio piedino del [[microprocessore]] per la gestione delle interruzioni. Questo sistema è impraticabile per la gestione delle interruzioni di numerosi dispositivi ma può essere utilizzato in tecnologie ''special purpose''.
Nel momento in cui il processore riceve una richiesta di interruzioneinterrupt, vi è l'esigenza di determinare quale sia il dispositivo ad averla generata. Vi sono tre sistemi principali per farlo:
* Linee di interruzioneinterrupt multiple.
* Scansione delledegli interruzioniinterrupt ([[Polling (informatica)|''polling'']]).
* Vettorizzazione delledegli interruzioniinterrupt.
 
Nelle linee di interruzioneinterrupt multiple ad ogni dispositivo è associato un proprio piedino del [[microprocessore]] per la gestione delledegli interruzioniinterrupt. Questo sistema è impraticabile per la gestione delledegli interruzioniinterrupt di numerosi dispositivi ma può essere utilizzato in tecnologie ''special purpose''.
La scansione delle interruzioni consiste nell'effettuare una scansione dei dispositivi, interrogando ognuno per un'eventuale conferma della richiesta di interruzione inviata. Quando il dispositivo che ha generato l'interruzione viene interrogato, invierà una conferma al processore e quest'ultimo avvierà la ''[[Gestore di interrupt|interrupt service routine]]'' relativa. Impostando la sequenza della scansione è possibile impostare la priorità.
 
Le linee di interrupt possono essere mascherabili o non mascherabili, quelle non mascherabili sono riservate ad eventi come errori irreversibili della memoria, mentre quelle mascherabili possono essere disattivate dalla CPU prima dell'esecuzione di sequenze di istruzioni critiche che non devono essere interrotte.
La vettorizzazione fa uso di un [[circuito integrato]] detto [[controllore di interruzioni programmabile]] (PIC) che ha in ingresso un certo numero di linee di ''[[interrupt request]]'' (IRQ), usate dai dispositivi per richiedere un'interruzione. Quando riceve una richiesta, il PIC si occupa di inviare a sua volta una richiesta di interruzione al processore e, dopo che quest'ultimo ha confermato la richiesta (cosa che potrebbe non avvenire se le interruzioni dovessero essere disabilitate), deposita nel [[Bus (informatica)|bus]] dati l'indice del vettore di interruzione relativo all'indirizzo della ISR che gestisce l'interazione con il dispositivo. I vettori sono contenuti in una tabella situata ad una determinata locazione in memoria, predefinita o meno, e chiamata''[[Interrupt vector| interrupt vector table]]'' (''[[Interrupt Descriptor Table|interrupt descriptor table]]'' per [[8086]] e [[IA-32]]). Ogni vettore contiene i dati che permettono al processore di determinare l'indirizzo in memoria della ISR relativa al dispositivo che ha generato l'interruzione, e di gestire quindi l'operazione di I/O richiesta.
 
La scansione delledegli interruzioniinterrupt consiste nell'effettuare una scansione dei dispositivi, interrogando ognuno per un'eventuale conferma della richiesta di interruzioneinterrupt inviata. Quando il dispositivo che ha generato l'interruzioneinterrupt viene interrogato, invierà una conferma al processore e quest'ultimo avvierà la ''[[GestoreInterrupt diService interruptRoutine|interrupt service routineISR]]'' relativa. Impostando la sequenza della scansione è possibile impostare la priorità.
==Bibliografia==
 
La vettorizzazione fa uso di un [[circuito integrato]] detto [[controlloreProgrammable diInterrupt interruzioni programmabileController]] (PIC) che ha in ingresso un certo numero di linee di ''[[interrupt request]]'' (IRQ), usate dai dispositivi per richiedere un'interruzione. Quando riceve una richiesta, il PIC si occupa di inviare a sua volta una richiesta di interruzioneinterrupt al processore e, dopo che quest'ultimo ha confermato la richiesta (cosa che potrebbe non avvenire se legli interruzioni dovesserointerrupt esserefossero disabilitatedisabilitati), deposita nel [[Bus (informatica)|bus dati]] dati l'indice del ''vettore'' di interruzioneinterrupt relativo all'indirizzo della ISR che gestisce l'interazione con il dispositivo. I vettori sono contenuti in una tabella situata ad una determinata locazione in memoria, predefinita o meno, e chiamata''[[Interrupt vector| interrupt vector table]]'' (''[[Interrupt Descriptor Table|interrupt descriptor table]]'' per [[8086]] e [[IA-32]]). Ogni vettore contiene i dati che permettono al processore di determinare l'indirizzo in memoria della ISR relativa al dispositivo che ha generato l'interruzioneinterrupt, e di gestire quindi l'operazione di I/O richiesta.
 
== Bibliografia ==
* {{cita libro|autore=[[Andrew Stuart Tanenbaum]]|titolo=Architettura dei calcolatori. Un approccio strutturale|editore=Pearson Education|città=Milano|anno=2006|url=http://books.google.it/books?id=hK8lJ4BPOYcC|pp=393-396|capitolo=Interrupt|isbn=978-88-7192-271-3|cid=adc}}
* {{cita libro|autore=[[William Stallings]]|titolo=Architettura e organizzazione dei calcolatori. Progetto e prestazioni|editore=Pearson Education|città=Milano|anno=2010|pp=75-84|isbn=978-88-7192-597-4|cid=adc}}
 
== Voci correlate ==
* [[Clock]]
* [[Driver]]
* [[Eccezione (informatica)]]
* [[Gestore di interrupt]]
* [[Interrupt request]]
* [[Interrupt Service Routine]]
*[[Controllore di interruzioni programmabile]]
* [[Non-maskable interrupt]]
* [[Message Signaled Interrupts]]
* [[EccezioneNon-maskable (informatica)interrupt]]
* [[DriverPolling (informatica)]]
* [[Programmable Interrupt Controller]]
* [[Direct Memory Access]]
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
 
{{Controllo di autorità}}