12.01.2015 Views

IL SISTEMA DI I/O - Quelli di Informatica

IL SISTEMA DI I/O - Quelli di Informatica

IL SISTEMA DI I/O - Quelli di Informatica

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>IL</strong> <strong>SISTEMA</strong> <strong>DI</strong> I/O<br />

L’INTERFACCIA <strong>DI</strong> I/O<br />

Come tutte le operazioni complesse quelle <strong>di</strong> I/O sono stu<strong>di</strong>ate e progettate a <strong>di</strong>versi livelli o strati<br />

procedendo dal livello più elementare al più complesso, risolvendo sia problemi relativi ai dettagli elettronico-circuitali,<br />

sia quelli <strong>di</strong> organizzazione del sistema. È detta interfaccia <strong>di</strong> I/O, l’apparecchiatura che si interpone tra periferia e<br />

processore, il processore la vede come oggetto da e verso il quale si effettua l’I/O e nei suoi riguar<strong>di</strong>; l’interfaccia si<br />

presenta con una determinata architettura, sud<strong>di</strong>visa in sezione <strong>di</strong> ingresso, sezione <strong>di</strong> uscita con uno o più<br />

registri verso i quali il processore invia i suoi messaggi.<br />

ARCHITETTURA <strong>DI</strong> I/O<br />

L’architettura della sezione <strong>di</strong> I/O <strong>di</strong> un processore ha l’onere <strong>di</strong> definire:<br />

• numero e tipo <strong>di</strong> segnali;<br />

• linee <strong>di</strong> collegamento tra CPU ed interfaccia;<br />

• organizzazione;<br />

• struttura, <strong>di</strong>pendente dalla restante architettura del sistema e dal tipo <strong>di</strong> interfaccia.<br />

Tutte le istruzioni in linguaggio macchina sono eseguite me<strong>di</strong>ante operazioni elementari, dette<br />

microoperazioni, definite dall’architettura <strong>di</strong> macchina. L’architettura <strong>di</strong> I/O definisce dunque le microoperazioni con<br />

le quali si compongono le istruzioni <strong>di</strong> I/O, che tipicamente consistono nello spostamento <strong>di</strong> un dato verso un registro<br />

dell’interfaccia oppure nello spostamento <strong>di</strong> un bit <strong>di</strong> controllo o nell’interrogazione del suo stato.<br />

DRIVER E PROTOCOLLO<br />

Per la costruzione <strong>di</strong> programmi, che portino alla realizzazione <strong>di</strong> un’azione <strong>di</strong> I/O, il processore mette a<br />

<strong>di</strong>sposizione dei co<strong>di</strong>ci operativi, specificamente de<strong>di</strong>cati a questo genere <strong>di</strong> operazioni. Un’istruzione del linguaggio<br />

macchina mantiene sempre un contenuto operativo molto elementare, realizzabile, tipicamente, con un’unica o poche<br />

microoperazioni ed è sempre molto <strong>di</strong>stante da quella che è un’operazione <strong>di</strong> I/O vera e propria, così come vista a<br />

livello applicativo.<br />

Tuttavia a causa della ridotta potenza operativa delle istruzioni in linguaggio macchina, rispetto alle azioni <strong>di</strong><br />

I/O è necessario l’utilizzo <strong>di</strong> un software capace <strong>di</strong> guidare le periferiche. Il livello più elementare <strong>di</strong> tale software è<br />

costituito dal cosiddetto driver, che effettua il trasferimento <strong>di</strong> un messaggio completo dalla periferia ad un buffer <strong>di</strong><br />

memoria o viceversa.<br />

Lo scambio <strong>di</strong> messaggi tra due apparecchiature prende il nome generico <strong>di</strong> colloquio, l’insieme delle regole<br />

atte a <strong>di</strong>sciplinare un corretto colloquio tra due apparecchiature è detto protocollo. Tipicamente i protocolli non sono<br />

tutti uguali, variano infatti da periferica a periferica e a seconda dei bus <strong>di</strong> collegamento.<br />

MESSAGGI SCAMBIATI<br />

Un’operazione <strong>di</strong> uscita consiste nell’invio alla periferia da parte della CPU <strong>di</strong> un insieme <strong>di</strong> messaggi, tali che<br />

un blocco <strong>di</strong> dati sia trasferito dalla memoria ad una specifica zona periferica. Dualmente un’operazione <strong>di</strong> ingresso<br />

produce lo spostamento del blocco <strong>di</strong> dati da un blocco periferico alla memoria.<br />

Tra CPU e periferia vengono quin<strong>di</strong> interscambiati dati in ambo le <strong>di</strong>rezioni, tuttavia oltre ai dati fluiscono<br />

anche altri messaggi, dal momento che è sempre la CPU ad eseguire l’operazione <strong>di</strong> I/O. Il processore invia coman<strong>di</strong><br />

alla periferia per in<strong>di</strong>care le operazioni da compiere e quest’ultima risponde con stati, vale a <strong>di</strong>re con in<strong>di</strong>cazioni che<br />

sintetizzano ed informano le con<strong>di</strong>zioni <strong>di</strong> funzionamento della periferica e circa gli eventi accaduti. In generale l’ente<br />

che manda messaggi <strong>di</strong> tipo comando è tipicamente chiamato master, viceversa l’ente che esegue il comando e invia<br />

informazioni circa sul suo stato, assume il nome <strong>di</strong> slave. Assumiamo, dunque, un modello secondo il quale i messaggi<br />

scambiati tra CPU (master) e periferia (slave) sono così composti:<br />

• messaggi in input: dato, stato;<br />

• messaggi in output: dato, comando.<br />

master<br />

dato-comando<br />

OUTPUT<br />

dato-stato<br />

INPUT<br />

slave<br />

Il sistema centrale e la periferia sono tra loro collegati tramite opportuni bus, aventi parallelismo <strong>di</strong> 1 bit, 1<br />

byte o 1 parola-macchina, mentre i messaggi, che devono essere scambiati possono avere la medesima <strong>di</strong>mensione <strong>di</strong><br />

bit o anche <strong>di</strong> più ampio blocco. Un messaggio elementare ha il parallelismo pari ad 1 byte od 1 parola del<br />

processore.


LE FASI DEL COLLOQUIO<br />

Il colloquio che ha luogo tra CPU e periferica ha in generale come scopo quello <strong>di</strong> trasmettere dati nell’una o<br />

nell’altra <strong>di</strong>rezione e realizza tale obiettivo me<strong>di</strong>ante operazioni che verificano l’opportunità <strong>di</strong> dare inizio al colloquio,<br />

effettuano la trasmissione vera e propria, controllano lo stato delle apparecchiature ed il verificarsi <strong>di</strong> eventuali errori.<br />

Il protocollo definisce, allora, apposite fasi dette apertura, corpo, chiusura e forniscono le regole per ciascuna<br />

attività inclusa nelle singole fasi.<br />

Talvolta è possibile che si verifichi il collegamento <strong>di</strong> sistemi periferici, che a loro volta sono connessi ad altri<br />

supporti e questi ultimi possono consistere in aree <strong>di</strong> memoria in<strong>di</strong>rizzabili. Bisogna, perciò, inserire all’interno del<br />

colloquio le operazioni necessarie alla selezione della singola unità periferica e, al suo interno, delle posizioni del<br />

supporto da o per il quale il movimento dei dati deve avvenire.<br />

Una seduta <strong>di</strong> colloquio tra CPU e periferia è in genere de<strong>di</strong>cata alla trasmissione <strong>di</strong> un certo numero <strong>di</strong> dati<br />

elementari. Perciò a seconda dei casi si trasmette un insieme <strong>di</strong> dati singoli, un unico blocco oppure insiemi <strong>di</strong> blocchi.<br />

CONTROLLO DEGLI ERRORI<br />

Nel colloquio con periferiche più sofisticate o in sistemi più completi si prevedono operazioni <strong>di</strong> controllo su<br />

eventuali errori o funzionamenti anormali e apposite fasi, oltre le tre precedentemente enunciate, possono essere<br />

de<strong>di</strong>cate a tale scopo.<br />

Solitamente il problema del controllo <strong>di</strong> errori all’interno della trasmissione si risolve trasformando i messaggi<br />

in messaggi ridondanti ed effettuando, in ricezione, un controllo <strong>di</strong> compatibilità tra il messaggio ricevuto e le regole<br />

alle quali esso si deve attenere affinché esso risulti corretto. Il più semplice controllo è quello effettuabile con il bit <strong>di</strong><br />

parità. Il protocollo <strong>di</strong> colloquio definisce da un lato le regole attraverso le quali il sistema in<strong>di</strong>vidua un errore e<br />

dall’altro le azioni conseguenti. Alcuni protocolli localizzano alla fine del colloquio la fase <strong>di</strong> controllo <strong>di</strong> eventuali errori<br />

da implementare con la tecnica dello scambio <strong>di</strong> coman<strong>di</strong> e stati; altri protocolli, invece, prevedono un controllo<br />

continuo sul trasferimento e sospensione <strong>di</strong> quest’ultimo in caso <strong>di</strong> errore.<br />

SINCRONIZZAZIONE<br />

I messaggi inviati in ambo le <strong>di</strong>rezioni debbono essere sincronizzati, vale a <strong>di</strong>re che l’apparecchiatura<br />

ricevente deve essere in qualche modo informata dell’istante in cui il messaggio è effettivamente in arrivo. Prende il<br />

nome <strong>di</strong> strobe-in il segnale <strong>di</strong> sincronizzazione verso la CPU, mentre è detto strobe-out il segnale <strong>di</strong><br />

sincronizzazione verso la periferia.<br />

La tecnica per lo più usata per ottenere il colloquio tra due apparecchiature è la tecnica asincrona, nome<br />

derivante dal fatto che lo sviluppo del colloquio è con<strong>di</strong>zionato da risposte reciproche, che avvengono tra i due<br />

<strong>di</strong>spositivi. Questo tipo <strong>di</strong> gestione della sincronizzazione permette un controllo del colloquio stesso, determinando<br />

sviluppi <strong>di</strong>versi a seconda delle risposte che vengono ricevute. Per un corretto funzionamento della tecnica asincrona si<br />

deve tener conto della con<strong>di</strong>zione <strong>di</strong> time-out.<br />

La con<strong>di</strong>zione <strong>di</strong> time-out si verifica se non perviene alcuna risposta entro prefissati limiti <strong>di</strong> tempo e<br />

solitamente essa ha luogo in presenza <strong>di</strong> guasti o <strong>di</strong> funzionamento non corretto. Sono proprio i protocolli a porre un<br />

tempo limite, facendo in modo tale da non permettere al sistema <strong>di</strong> bloccarsi.<br />

Diversamente opera invece la tecnica sincrona, che basa il suo funzionamento esclusivamente sull’utilizzo <strong>di</strong><br />

un segnale esterno <strong>di</strong> tempificazione, detto segnale <strong>di</strong> clock. Questo meccanismo poggia sulla misura <strong>di</strong> intervalli <strong>di</strong><br />

tempo, infatti, due <strong>di</strong>spositivi si inviano messaggi ed effettuano il colloqui ad una frequenza preassegnata. In input si<br />

esclude il controllo da parte della CPU, ma la periferia invia il dato in<strong>di</strong>pendentemente dalla richiesta; in output la CPU,<br />

generalmente più veloce, deve essere rallentata per successive operazioni.<br />

MODELLO FONDAMENTALE <strong>DI</strong> PROGRAMMAZIONE<br />

Il modello definisce la sua struttura <strong>di</strong> interfaccia, il suo schema risulta molto elementare: il processore vede<br />

soltanto un insieme <strong>di</strong> registri singolarmente in<strong>di</strong>rizzabili; CPU ed interfaccia sono collegate attraverso un unico busdati<br />

bi<strong>di</strong>rezionale ed un bus-in<strong>di</strong>rizzi, che seleziona il registro in<strong>di</strong>rizzato. Nella realtà fisica il processore è collegato con<br />

un insieme <strong>di</strong> interfacce, ciascuna contenente un numero <strong>di</strong>screto <strong>di</strong> registri: lo spazio in<strong>di</strong>rizzi è <strong>di</strong>viso tra le <strong>di</strong>verse<br />

interfacce.<br />

Il modello definisce anche la semantica delle istruzioni in linguaggio macchina, vale a <strong>di</strong>re, stabilisce le microoperazioni<br />

da esse realizzate. Il modello contiene solo istruzioni <strong>di</strong> ricezione o trasmissione <strong>di</strong> un dato singolo e,<br />

coerentemente con l’interfaccia, si intende un’operazione <strong>di</strong> ingresso quella che porta il dato dal bus-dati de<strong>di</strong>cato<br />

all’interno del processore, per operazione d’uscita si intende l’operazione contraria. A seconda dei casi e delle tecniche<br />

<strong>di</strong> in<strong>di</strong>rizzamento implicite od esplicite, operan<strong>di</strong>-registri o operan<strong>di</strong>-memoria, se vengono utilizzati in<strong>di</strong>rizzi <strong>di</strong> registri,<br />

allora il modello fondamentale evolve in modello a registri in<strong>di</strong>rizzabili.<br />

MODELLO MEMORY MAPPED E ISOLATED I/O<br />

Alcuni processori non possiedono un’apposita sezione <strong>di</strong> collegamento con l’I/O, ma prendono la sezione <strong>di</strong><br />

collegamento con la memoria e fanno coincidere fisicamente il bus-in<strong>di</strong>rizzi con il registro memory address e il bus-dati<br />

con il memory buffer. Un apposito selettore abilita l’una o l’altra apparecchiatura. Il modello così definito viene<br />

qualificato come modello memory mapped o a registri in<strong>di</strong>rizzabili. Se invece lo spazio <strong>di</strong> in<strong>di</strong>rizzamento viene<br />

assunto come in<strong>di</strong>pendente e costituisce un’unità a sé stante, allora si parla <strong>di</strong> isolated I/O, laddove vengono definite<br />

apposite operazioni ed istruzioni, <strong>di</strong>stinte da quelle del processore per effettuare l’ingresso-uscita.<br />

SCAMBIO DATI<br />

La ricezione da parte del processore dello stato della periferia e la possibilità <strong>di</strong> interrogarlo per con<strong>di</strong>zionare<br />

lo sviluppo del programma <strong>di</strong> I/O è <strong>di</strong> fondamentale importanza per ogni sistema, che debba implementare un<br />

protocollo. Talune architetture sono basate sul modello fondamentale e pongono una soluzione al problema attraverso<br />

l’utilizzo <strong>di</strong> un driver per la gestione della periferia: in un particolare registro vi è memorizzato lo stato della periferica,<br />

oppure informazioni che siano <strong>di</strong> maggior dettaglio per l’apparecchiatura.


Per un generico <strong>di</strong>spositivo l’informazione potrebbe essere lo stato acceso, spento, pronto per<br />

operazioni; invece per informazioni <strong>di</strong> maggior dettaglio si intendono informazioni intimamente legate al tipo <strong>di</strong><br />

periferica: per una stampante l’informazione potrebbe essere la presenza <strong>di</strong> carta, presenza <strong>di</strong> inchiostro…<br />

Il protocollo deve tener conto <strong>di</strong> tale classificazione e l’acquisizione dello stato può essere gestita a più livelli:<br />

ad un primo possono essere rilevate informazioni generali, che siano comuni a qualsiasi operazione <strong>di</strong> I/O, ai livelli<br />

successivi sono interrogati, se necessario, registri contenenti informazioni sempre più specifiche a seconda della<br />

singola unità.<br />

PROTOCOLLO HANDSHAKE<br />

La tecnica fondamentale del colloquio asincrono prevede un messaggio <strong>di</strong> richiesta dato (req) ed una <strong>di</strong><br />

risposta dato da parte della periferia e che al dato in input sia associato un segnale <strong>di</strong> strobe-in. Analogamente per<br />

l’output vi è un messaggio che segnala il riconoscimento del dato (ack) e la sincronizzazione avviene attraverso uno<br />

strobe-out. Un protocollo nel quale il dato sia elementare ed i messaggi <strong>di</strong> req ed ack siano semplici messaggi binari<br />

è detto handshake. I passi fondamentali del colloquio sono tipicamente contenuti in appositi programmi costituenti il<br />

nucleo fondamentale del driver <strong>di</strong> I/O.<br />

Il protocollo handshake <strong>di</strong> ingresso avviene con lo scambio dei segnali binari req e strobe-in, con i due flipflop<br />

C ed F ed un registro <strong>di</strong> ingresso. I segnali da e per la periferia sono:<br />

• req<br />

segnale collegato al flip-flop C agisce sulla periferica al fronte <strong>di</strong> salita; la richiesta req si ottiene<br />

ponendo in set il flip-flop C;<br />

• strobe-in<br />

segnale proveniente dalla periferia consente la memorizzazione del dato nei registri e svolge una<br />

funzione logica, posizionando il registro F, che può essere interrogato dal programma.<br />

C<br />

req<br />

F<br />

strobe-in<br />

RI<br />

dato<br />

interfaccia I/O<br />

controllo periferica<br />

Il processore in un primo momento lancia la richiesta <strong>di</strong> un dato, poi si pone in attesa del suo arrivo, infine, lo<br />

acquisisce. Il tempo che il processore deve attendere dal via dell’operazione sino all’arrivo del segnale <strong>di</strong> strobe<br />

<strong>di</strong>pende dalla velocità con cui il sistema periferico lavora e può anche essere notevole, se confrontato con i tempi <strong>di</strong><br />

funzionamento generali del processore.<br />

Analogamente al protocollo handshake per i dati in entrata, v’è il protocollo per handshake <strong>di</strong> uscita. Il<br />

registro C, in questo caso, fornisce il segnale <strong>di</strong> strobe-out ed F il segnale <strong>di</strong> ack. La sequenza delle operazioni è<br />

analoga a quelle del caso precedente.<br />

C<br />

strobe-out<br />

F<br />

ack<br />

RI<br />

dato<br />

interfaccia I/O<br />

controllo periferica<br />

GESTIONE DELL’I/O<br />

Durante il tempo <strong>di</strong> attesa delle operazioni <strong>di</strong> input od output, il processore resta inattivo e pertanto sono<br />

utilizzate due tecniche per ridurre i tempi morti:<br />

• overlay<br />

questo genere <strong>di</strong> soluzione consiste nell’organizzare il driver in modo che esso operi su un singolo<br />

carattere e nel fare in modo che il programma principale tra una chiamata e l’altra esegua altre<br />

operazioni, purché queste abbiano un tempo <strong>di</strong> esecuzione inferiore a quello che occorre tra una<br />

richiesta e l’arrivo del corrispondente dato;<br />

• interruzioni<br />

supponendo abilitato il sistema delle interruzioni, l’invio del segnale mandato da C alla periferica,<br />

rende quest’ultimo sensibile alla risposta associata, viaggiante su F, che si presenta sotto forma <strong>di</strong><br />

interruzione. Il processore in attesa <strong>di</strong> quest’ultima non deve necessariamente effettuare un ciclo a<br />

vuoto e può effettuare altre operazioni.


I/O ME<strong>DI</strong>ANTE INTERRUZIONI<br />

Le interruzioni possono essere utilizzate sia per le operazioni in input, che in output:<br />

• input<br />

la sequenza è implementata sostituendo il set del registro C con l’abilitazione del flip-flop M i della<br />

maschera delle interruzioni; in luogo dell’attesa il processore può svolgere altre operazioni, mentre la<br />

periferica, non appena pronto il dato, segnala l’evento ponendo ad 1 l’i-esimo registro della richiesta<br />

<strong>di</strong> interruzione; il servizio <strong>di</strong> questa causa <strong>di</strong> interruzione provvede all’effettuazione dell’operazione <strong>di</strong><br />

input;<br />

• output<br />

con la sincronizzazione a mezzo dell’interruzione si ottiene, dunque, il vantaggio che il processore è<br />

utilmente impiegato nell’attesa che la periferica sia pronta per eseguire l’operazione: il processore <strong>di</strong><br />

conseguenza svolge complessivamente una quantità <strong>di</strong> lavoro maggiore nell’unità <strong>di</strong> tempo. Per<br />

contro il tempo che trascorre dall’istante in cui la periferica è effettivamente pronta e l’istante in cui<br />

viene servita è maggiore rispetto alla tecnica dell’overlay. In quest’ultima, infatti, il tempo per<br />

l’operazione è dell’or<strong>di</strong>ne <strong>di</strong> grandezza necessario per l’esecuzione <strong>di</strong> una o due istruzioni, invece qui<br />

è il tempo necessario per eseguire la parte <strong>di</strong> testa della ISR.<br />

Questi appunti sono stati scritti da hunter85 per il sito http://www.quelli<strong>di</strong>informatica.org. Per informazioni,<br />

correzioni, chiarimenti e altro utilizzare il servizio <strong>di</strong> messaggistica messo a <strong>di</strong>sposizione della comunità.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!