MODULI DI I/O

Scopo di un modulo di I/O

Un modulo di I/O è un dispositivo a cui sono collegate varie periferiche e che, a sua volta, è collegato al bus di sistema, il suo compito è quello di costituire un’interfaccia tra l’insieme formato da memoria e processore e l’insieme formato dalle varie periferiche collegate al sistema, da cui segue che il modulo di I/O permette la comunicazione fra il processore e l’esterno e viceversa. Sintetizzando è quindi possibile dire che i compiti di un modulo di I/O sono quello di interfacciare il processore e la memoria per messo del bus e di interfacciare i diversi dispositivi periferici. Questi dispositivi non sono collegati direttamente al processore, quanto piuttosto al modulo di I/O, perché in questo modo è possibile appianare le differenze tecniche delle varie periferiche nel senso che un loro collegamento diretto con il processore renderebbe l’architettura di quest’ultimo molto più complessa dovendo avere la possibilità di interagire con dispositivi che possono presentare notevoli differenze gli uni con gli altri, in questo modo è il modulo di I/O che si specializza nell’interazione con le periferiche inglobando la giusta logica per poter comunicare con ognuna di loro, da ciò segue che il modulo di I/O permette anche al processore di trovarsi alleggerito anche dalla gestione di tutte le varie operazioni di input ed output. Si osserva quindi come in alcuni casi il modulo di I/O ha funzioni simili a quelle del processore, anche se queste funzioni sono specializzate per la gestione delle varie operazioni di I/O.

Riepilogando
un modulo di I/O rende omogenee tra loro le varie periferiche se osservate dal punto di vista del processore in quanto livella le varie periferiche nelle loro diverse modalità di funzionamento e nella varietà fra differenti formati dei dati nonché nella lunghezza degli stessi, i vari dispositivi periferici infatti presentano formati dato diversi tra loro e diversi anche dal formato dati del processore quindi gestire tutti questi tipi di formato può appesantire notevolmente il processore, inoltre il modulo di I/O tende a livellare anche le differenti velocità relative trattamento dei dati da parte dei vari moduli periferici.

Periferiche o dispositivi esterni

Una periferica costituisce un’interfaccia con l’utente, se per esempio si sta considerando un monitor oppure una tastiera, permette la comunicazione con altri calcolatori in remoto oppure con altri processori, se nel primo caso si sta parlando di una scheda di rete, ed infine funziona come interfaccia con il sistema, se ci si sta riferendo, per esempio, ad un dischetto.

Strutturalmente una periferica si presenta nel modo seguente, si nota come la rappresentazione data sia molto generica. Al suo interno una periferica presenta la logica combinatoria adeguata che permette la gestione del controllo della periferica, il modulo che realizza questa logica riceve dall’esterno i segnali di controllo che provengono dal modulo di I/O e invia verso l’esterno, ossia verso il precedente modulo di I/O, i segnali relativi allo stato del dispositivo. Più in particolare, i segnali di controllo specificano le operazioni che è necessario fare, principalmente operazioni di lettura o scrittura che si presentano più o meno complicate, a seconda della specifica periferica, da i controlli effettuati sulla correttezza dei dati mentre il segnale di stato del dispositivo indica al modulo di I/O se una certa operazione è conclusa o meno e nel caso in cui lo sia, la periferica fa seguire al segnale di stato un segnale di interruzione. Il segnale di stato può anche indicare lo stato relativo ad una trasferimento in atto.

Il modulo contenente la logica per il controllo colloquia con un secondo modulo che contiene un buffer e un trasduttore. Il buffer è costituito da un’insieme di registri su cui i dati in transito vengono memorizzati temporaneamente e questo come supporto all’appianamento delle differenze relative alla diversa velocità delle periferiche: i dati che provengono dai dispositivi periferici vengono appoggiati temporaneamente nel buffer in attesa che la memoria sia pronta per una successiva memorizzazione degli stessi. Il trasduttore permette la conversione dei dati da uno ad un altro fra i vari formati, in particolare trasforma i segnali elettrici che provengono dall’esterno in bit e viceversa.

Operazioni svolte d un modulo di I/O

Un modulo di I/O svolge operazioni di controllo e temporizzazione, infatti questo modulo è collegato al bus di sistema, che condivide anche con il processore e la memoria, su cui viaggia una gran quantità di informazioni. Per poter immettere sul bus anche le sue di informazioni è necessario che il modulo di I/O abbia i mezzi hardware o software adeguati, si osserva in particolare come non ci sia un limite preciso tra queste due logiche infatti i segnali che vengono valutati sono elementi hardware mentre la loro gestione compete all’aspetto software.

Un modulo di I/O realizza sia la comunicazione con il processore, per esempio per capire se può usare il bus oppure per sapere quale operazione deve eseguire, sia la comunicazione con i dispositivi periferici; esegue operazioni di memorizzazione temporanea, o bufferizzzione, dei dati che vanno verso o provengono dai dispositivi esterni e questo per non impegnare il processore, già occupato con altre elaborazioni, con la gestione di dati che gli arrivano con velocità diverse.

Infine al modulo di I/O compete la rilevazione di eventuali errori avvenuti durante il trasferimento dei dati per garantirne la consistenza e questo sfruttando varie tecniche tra cui quella che utilizza il bit di parità, la tecnica dipende dal particolare dispositivo a cui ci si riferisce e può sfruttare sia elementi hardware che software. Strutturalmente un moduli di I/O è fatto come segue, anche se la rappresentazione data è molto generica.

E’ presente un registro dati e un registro di stato e/o di controllo: entrambi ricevono ed inviano verso il processore informazioni di controllo o informazioni dati utilizzando la stessa linea dati, quindi è ovvio che ognuno dei due tipi di comunicazione va temporaizzata, i due registri, inoltre, comunicano internamente con un modulo che contiene la logica combinatoria che permette di gestire l’interfaccia con i vari dispositivi. Questo modulo riceve ed invia dal/sul bus l’indirizzo del dispositivo che deve attivare utilizzando delle linee indirizzo: prima di procedere con l’attivazione il modulo di I/O provvede a controllare che l’indirizzo ricevuto corrisponda effettivamente ad un dispositivo periferico a lui collegato. Oltre che con le linee indirizzo, il modulo relativo alla logica di I/O si collega all’esterno anche attraverso le linee di controllo sui cui viaggiano, per esempio, i segnali di interruzione. Le linee dati, le linee di indirizzo e le linee di controllo nel loro complesso costituiscono l’interfaccia con il bus di sistema, in particolare si nota come ritorni la suddivisione delle linee del bus in sottoinsiemi ognuno specifico per un compito, suddivisione introdotta precedentemente.

Internamente il modulo che provvede all logica di I/O comunica non solo con i due registri già descritti ma anche con i diversi moduli contenenti la specifica logica per l’interfaccia ad una periferica in particolare, di questi moduli ce se sono tanti quante sono le periferiche previste dal sistema ed ognuno comunica con l’esterno attraverso le proprie linee dati, linee di controllo e linee di stato.

In conclusione, un modulo di I/O permette di avere un punto di vista semplificato dell’insieme di periferiche a cui il processore può fare riferimento. In base a quanto il modulo è sofisticato e quindi in base a quanto è possibile che sostituisca il processore, è possibile distinguere tra canale o processore di I/O e controllo di I/O. Il primo si presenta molto sofisticato perché gestisce una notevole quantità di operazioni di I/O sostituendosi in questo al processore pesantemente, mentre il secondo opera in modo più semplice, distribuendo soltanto le informazioni alle varie periferiche.

Tecniche di trasferimento

E’ possibile distinguere tre diverse tecniche di trasferimento dei dati dal processore ai dispositivi periferici e viceversa: I/O programmato., I/O con interruzioni e I/O con accesso diretto alla memoria centrale (DMA). La tecnica di I/O programmato fa si che avvengano i seguenti eventi: quando il processore si trova di fronte ad una richiesta di trasferimento di dati tra la memoria e un dispositivo periferico attiva la comunicazione e pi si mette in attesa della conclusione del trasferimento, quanto si accorge che quest’ultimo ha avuto fine gestisce la terminazione della comunicazione e intraprende una nuova operazione. Il processore, quindi, si occupa soltanto di cominciare e poi finire la comunicazione e per tutto il tempo rimanente si pone in attesa.

Con la tecnica di I/O con interruzioni le attese vengono limitate infatti il processore innesca il trasferimento e quando questo è iniziato comincia altre operazioni, a questo punto interviene il modulo di I/O che prepara i dati relativi alla comunicazione, li mette disposizione dei dispositivi interessati e al termine del trasferimento manda un segnale di interruzione al processore. I dati coinvolti sono prelevati o dalla memoria oppure dalla periferica coinvolta e momentaneamente bufferizzati nel modulo di I/O, quest’ultimo può contenere una quantità prefissata di dati quindi la bufferizzazione e la trasmissione dei dati attraverso il bus può avvenire, nel complesso, attraverso più passi e non tutta in una volta. Il segnale di interruzione avverte il processore che il trasferimento è stato completato, quindi gli permette di gestire la fine della comunicazione e riprendere quanto stava facendo. Con questa tecnica il tempo di attesa del processore diminuisce e ciò permette allo stesso di agire parallelamente su altri settori.

La tecnica di accesso diretto alla memoria (DMA) prevede la presenza di un controllore di DMA il quale simula il processore che lo delega alla gestione del trasferimento, in questo modo il processore si disinteressa della comunicazione mentre il controllore innesca il processo, lo controlla e poi gestisce la sua conclusione. Quando la comunicazione è stata conclusa il processore riceve un segnale di avviso, ossia un segnale di interruzione, che non blocca la sua attività ma gli fa semplicemente sapere che il trasferimento dei dati è avvenuto correttamente. Con questa tecnica il processore non è impegnato in alcun modo nella gestione dei trasferimenti, demandando ogni cosa al controllore di DMA, per cui non ci sono più tempi di attesa.

Le tre tecniche appena descritte non sono esclusive, ma a seconda dei casi viene utilizzata la tecnica più giusta: in generale se la quantità di dati da trasferire è p8ccola si sfrutta l’I/O programmato mentre se la quantità è grande si preferisce l’accesso diretto alla memoria, per i casi intermedi si usa l’I/O con interruzioni, nel primo caso l’attesa è breve mentre nel secondo viene eliminata perché inciderebbe troppo sull’efficienza del processore.

I/O programmato

Descriviamo più in dettaglio la tecnica dell’I/O programmato. Supponiamo che il processore stia decodificando una sequenza di istruzioni, ad un certo punto è presente un’istruzione che richiede un’operazione di I/O: il processore la decodifica e poi la esegue generando automaticamente i segnali, ossia i comandi, opportuni diretti al modulo di I/o e poi si pone in attesa. Il modulo di I/O riceve il comando proveniente dal processore e di seguito memorizza le opportune informazioni nel registro di stato, queste informazioni si riferiscono al tipo di operazione che deve essere eseguita, più nello specifico indicano che tipo di trasferimento deve essere eseguito. Oltre queste informazioni il modulo di I/O riceve anche l’indirizzo relativo alla periferica che deve essere coinvolta nella comunicazione e questa diversa informazione viene posta in un registro differente rispetto al caso precedente. Questo scambio di indicazioni innesca il trasferimento. Come è stato detto precedentemente, il processore si mette in attesa e controlla periodicamente, durante gli opportuni cicli di clock, se il trasferimento si è concluso o meno: il processore si accorge della terminazione della comunicazione via hardware ricevendo un segnale alto, ossia posto ad uno, su di una linea opportuna. Quanto questo segnale è stato ricevuto finisce il tempo di attesa del processore che gestisce la fine del trasferimento e poi si dedica ad altre operazioni.

Durante lo svolgimento di tutte queste fasi, il processore manda la modulo di I/O una serie di segnali:

  • un segnale di controllo con cui viene attivata la specifica periferica e con cui le si indica, a seconda del tipo di periferica, cosa deve fare,
  • un segnale di test per verificare le condizioni di una periferica in particolare, come per esempio un segnale per controllare se un certo dispositivo è acceso o meno e nel caso il dispositivo sia una stampante il segnale può controllare se c’è carta o meno mentre se il dispositivo è un modem il segnale verifica se il modem riceve un segnale di occupato o meno;
  • un segnale di lettura, questo segnale consente al modulo di I/O di ricevere i dati dall’esterno e di porli nel buffer della periferica coinvolta, successivamente il processore chiederà al modulo di I/O di trasferire i dati sul bus dati del buffer di sistema a cui è collegato. Questo trasferimento passa per il buffer del modulo di I/O che è un registro di 8, 16, 32 bit a seconda del numero di linee del bus dati;
  • un segnale di scrittura che consente al modulo di I/O di recuperare i dati inviati dalla memoria e posti sul bus dati per inviarli a sua volta alla giusta periferica.
Quello che si osserva è la corrispondenza uno ad uno tra richiesta di trasferimento fatta al processore e invio della sequenza di comandi al modulo di I/O per gestire la comunicazione richiesta, naturalmente è opportuna una temporizzazione se tutto ciò coinvolge degli elementi condivisi.

-- SabrinaDellUomo - 09 May 2002

Topic revision: r1 - 2002-05-09 - SabrinaDellUomo





 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
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