Clicca qui per iscriverti a informatica-lasapienza

MODULO I/O CON INTERRUZIONI

Esempio di lettura dal punto di vista del "modulo di I/O":

  • Il modulo riceve un comando di lettura dal processore.
  • Legge i dati dalla periferica.
  • Quando i dati sono nel registro dati invia un segnale di interruzione.

  • Attende la richiesta dei dati da parte del processore.
  • Ricevuta la richiesta pone i dati sul Bus di dati.

Esempio di lettura dal punto di vista del "processore":

  • Emette un comando di lettura.
  • Alla fine di ogni ciclo istruzione controlla se si sono verificate interruzioni (avviene tutto in modo hardware).
  • Se c'è interruzione viene salvato il contesto (stato volatile) e si elabora l'interruzione.
  • Legge la parola dal Bus di dati e la pone in memoria.
  • Ripristina il contesto.

Dal punto di vista dell' "hardware" accade che:

  • Il dispositivo (o altro hardware di sistema) emette un segnale di interruzione.
  • Il processore termina l'istruzione corrente.
  • Il processore verifica che c'è interruzione e invia un segnale di conferma al dispositivo che toglie il segnale di interruzione.
  • Pone il valore del PC e del registro di stato in cima alla pila (aggiornamento del puntatore alla pila).
  • Viene caricato nel PC l'indirizzo della locazione di partenza della procedura di gestione delle interruzioni.
Dal punto di vista del "software" accade che:
  • Vengono salvati i registri che saranno utilizzati dalla procedura.
  • Controllo dei valori del registro di stato e dei segnali di stato provenienti dal dispositivo e generazione di eventuali comandi per il dispositivo.
  • Recupero valori dei registri della pila.
  • Ripristino dei valori del PC e del registro di stato per la ripresa del programma (RFI).

Possiamo trovare nelle varie architetture diversi tipi di riconoscimenti delle interruzioni; Ad esempio ad ogni periferica può essere associato un modulo di I/O e quindi il processore riconosce subito la periferica che ha emesso l'interruzione; questa scelta che dal punto di vista della velocità raggiunge ottimi risultati,non è una soluzione efficiente perché è molto costosa. Un altro metodo è il metodo a Polling in cui il processore chiede ad ogni periferica (con eventuale segnale di ritorno) se è quello il dispositivo che ha mandato l'interuzione, dopodiché analizza un registro indirizzabile, controlla se il segnale è attivo e infine esegue la procedura.

I vari metodi per riconoscere chi ha inviato il segnale di interruzione sono:

  • Linee di interruzione multiple (metodo più costoso).
  • Metodo a Polling o interrogazione software (impiega più tempo).
  • Interrogazione hardware.
  • Arbitraggio del BUS.

L'ultimo caso permette al modulo di I/O di impadronirsi del Bus e qundi di inviare una determinata parola e di identificare la periferica. Gli ultimi due metodi possono essere definiti come metodi vettorizzati con i quali si prevede che nella memoria ci sia una sezione che contenga le procedure di gestione dell'interruzione. Quindi ogni procedura ha un proprio indirizzo e nel caso del metodo con l'identificatore ogni periferica ha associato un identificatore che successivamente e associato all'indirizzo di una procedura di gestione dell'interruzione.

ACCESSO DIRETTO ALLA MEMORIA (DMA) Con questo metodo viene simulato il processore per eseguire le istruzioni e così facendo questo metodo risulta più efficace perché il processore viene utilizzato all'inizio e alla fine della procedura (all'inizio poiché è il processore che dà il via a tutto).

ESEMPIO 1:

ESEMPIO 2:

-- AndreaKruti - 02 May 2002

DMA

L'i/o con interruzioni è più efficiente di quello programmato, ma la CPU è ancora coinvolta nel trasferimento di dati da e verso la memoria. Un'altra tecnica, nota come DMA (direct memory access), prevede l'aggiunta di un modulo DMA sul bus di sistema, in grado di simulare il processore e sostituirsi ad esso nel trasferimento dei dati da/verso la memoria.

Schema di un modulo DMA:

Quando il processore deve leggere o scrivere un blocco di dati, invia al modulo DMA le seguenti informazioni:

  • impiega la linea opportuna di lettura o scrittura
  • impiega le linee dati per inviare
    • l'indirizzo del dispositivo di i/o
    • la locazione di memoria da cui leggere o su cui scrivere, che il modulo DMA memorizza nel suo registro indirizzi
    • il numero di parole che devono essere scritte, che il modulo DMA memorizza nel registro contatore di parole.

Il modulo DMA invia le parole e decrementa il contatore di parole finchè vale zero. A tale scopo, il modulo DMA costringe ogni volta il processore a sospendere la sua attività per un ciclo di bus, tecnica nota come cycle stealing (furto di cicli). La sospensione avviene un attimo prima che il processore necessiti del bus. Non si tratta di un'interruzione, perché, ad esempio, non viene salvato su pila nessun contesto; semplicemente, il processore si ferma per un ciclo di bus. Terminato il traferimento, il modulo DMA invia un segnale di interruzione al processore, che quindi viene impiegato solo nella fase iniziale e finale del trasferimento. Il risultato è che per il trasferimento di parole multiple il DMA è di gran lunga più efficiente dell'i/o con interruzioni (e a maggior ragione di quello programmato).

L' evoluzione delle funzionalità di input/output dai primi calcolatori ad oggi può essere schematizzata in questo modo:

  1. la CPU controlla le periferiche direttamente
  2. vengono aggiunti i moduli di input/output ed è utilizzato l'i/o programmato
  3. per ottenere maggiore efficienza viene adottato l'i/o con interruzioni
  4. al modulo di i/o è dato un accesso diretto alla memoria tramite DMA
  5. il modulo di i/o viene dotato di un insieme specializzato di istruzioni per l'i/o, come fosse un processore
  6. il modulo di i/o viene dotato di una memoria ed è equiparabile ad un calcolatore. Il coinvolgimento della CPU è minimo. In questi ultimi due passi il modulo di i/o è spesso detto canale di i/o.

-- GiuseppeMacario - 30 Sep 2002

Topic attachments
I Attachment History Action Size Date Who Comment
GIFgif 468-60.gif r1 manage 12.3 K 2003-05-30 - 18:12 GiuseppeMacario  
GIFgif Bus.gif r1 manage 2.5 K 2002-05-13 - 15:17 AndreaKruti  
GIFgif bus2.gif r1 manage 2.5 K 2002-05-13 - 15:23 AndreaKruti  
GIFgif join.gif r1 manage 1.6 K 2003-05-30 - 18:18 GiuseppeMacario  
GIFgif linee.gif r1 manage 5.3 K 2002-05-13 - 15:25 AndreaKruti  
GIFgif procedura1.gif r1 manage 1.7 K 2002-05-13 - 15:09 AndreaKruti  
GIFgif tabella1.gif r1 manage 1.9 K 2002-05-13 - 14:45 AndreaKruti  
Edit | Attach | Watch | Print version | History: r7 < r6 < r5 < r4 < r3 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r7 - 2003-05-30 - GiuseppeMacario





 
ATTENZIONE: per lavori ACEA sulla cabina elettrica il server resterà spento
nei giorni 19-22 agosto.
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback