{"id":1961,"date":"2001-04-09T00:00:00","date_gmt":"2001-04-08T22:00:00","guid":{"rendered":""},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T22:00:00","slug":"1961","status":"publish","type":"post","link":"https:\/\/www.vialattea.net\/content\/1961\/","title":{"rendered":"Vorrei sapere pi\u00f9 in dettaglio in cosa consiste un interrupt e come viene gestito da un Sistema Operativo."},"content":{"rendered":"<p> Si chiama &#8220;interrupt&#8221; un meccanismo hardware\/software utilizzato nei<br \/>\n        sistemi programmabili (ad esempio nei computer, micorprocessori, etc.)<br \/>\n        per consentire di modificare il flusso normale di esecuzione delle operazioni<br \/>\n        svolte dall&#8217;unit\u00e0 centrale (CPU) in seguito al verificarsi di un<br \/>\n        evento: molte periferiche utilizzano questo meccanismo per chiedere l&#8217;attenzione<br \/>\n        della CPU. Ad esempio ogni volta che si preme un tasto della tastiera<br \/>\n        di un computer la circuiteria elettronica della tastiera invia un interrupt<br \/>\n        alla CPU che interrompe le operazioni in corso, accetta il carattere digitato<br \/>\n        mettendolo in una apposita area di memoria (buffer) e subito dopo riprende<br \/>\n        le operazioni interrotte. <\/p>\n<p> La gestione degli interrupt a livello di sistema operativo \u00e8<br \/>\n        concettualmente assai semplice. Ad ogni periferica gestita in tale modo<br \/>\n        viene assegnato un &#8220;indirizzo di interrupt&#8221; ovvero un numero che la contraddistingue.<br \/>\n        Ogni qual volta la particolare periferica deve segnalare un interrupt<br \/>\n        manda un apposito segnale sulla linea di interrupt e contemporaneamente<br \/>\n        presenta il proprio indirizzo sulle linee di indirizzo di interrupt.\n      <\/p>\n<p> Quando la CPU riceve un segnale di interrupt salva in memoria lo stato<br \/>\n        corrente di tutti i registri, legge il valore delle linee di interrupt<br \/>\n        ed usa questo valore per indirizzare una tabella, detta tabella (o vettore)<br \/>\n        di interrupt. Ad esempio se l&#8217;indirizzo di interrupt presentato dalla<br \/>\n        periferica \u00e8 5, la CPU carica come indirizzo della successiva istruzione<br \/>\n        da eseguire il valore contenuto nel quinto elemento del vettore di interrupt.<br \/>\n        Naturalmente l&#8217;organizzazione del codice eseguibile \u00e8 fatta in<br \/>\n        modo che tale indirizzo corrisponda al codice necessario per effettuare<br \/>\n        l&#8217;operazione che la periferica richiede; tale blocco di codice viene chiamato<br \/>\n        normalmente &#8220;sottoprogramma di servizio dell&#8217;interrupt&#8221;.\n      <\/p>\n<p> L&#8217;ultima delle istruzioni di tale sottoprogramma \u00e8 la particolare<br \/>\n        istruzione &#8220;Ritorno da interrupt&#8221; che ripristina lo stato salvato al momento<br \/>\n        dell&#8217;interrupt; poich\u00e9 lo stato comprende anche il registro di<br \/>\n        indirizzamento della istruzione successiva, la CPU riprende l&#8217;esecuzione<br \/>\n        delle istruzioni esattamente dal punto in cui si era interrotta.\n      <\/p>\n<p> Il compito del Sistema Operativo, relativamente al meccanismo di gestione<br \/>\n        degli interrupt, consiste essenzialmente nel predisporre i sottoprogrammi<br \/>\n        di gestione degli interrupt per tutte le periferiche che devono essere<br \/>\n        gestite e preparare in modo adeguato la tabella degli interrupt in modo<br \/>\n        che ad ogni particolare interrupt corrisponda l&#8217;appropriato sottoprogramma.\n      <\/p>\n<p> Lo stesso meccanismo viene utilizzato per gestire particolari tipi di<br \/>\n        errore. Ad esempio quando la CPU esegue una divisione con divisore zero,<br \/>\n        viene generato un particolare tipo di interrupt (in questo caso viene<br \/>\n        chiamato di solito &#8220;exception&#8221;) che, esattamente con il meccanismo spiegato<br \/>\n        sopra, passa ad eseguire il sottoprogramma che genera il messaggio che<br \/>\n        avvisa dell&#8217;errore e poi riprende il flusso delle operazioni.\n    <\/p>\n<p>\u00a0 <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[&#8230;]<\/p>\n","protected":false},"author":198,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[61],"tags":[],"class_list":["post-1961","post","type-post","status-publish","format-standard","hentry","category-hardware"],"_links":{"self":[{"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/posts\/1961","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/users\/198"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/comments?post=1961"}],"version-history":[{"count":0,"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/posts\/1961\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/media?parent=1961"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/categories?post=1961"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/tags?post=1961"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}