MOD1_2_La gestione degli IO

Transcript

MOD1_2_La gestione degli IO
Architettura di un sistema di elaborazione
N.2
La gestione degli I/O dal punto di vista funzionale (Unità 6)
Unità di ingresso/uscita
Le unità di ingresso/uscita (I/O) hanno il compito di gestire il colloquio tra la parte centrale, costituita
da memoria e processore, e l’ambiente esterno.
Sono classificate in tre categorie:
• Unità di interazione: permettono all’utente di interagire con il sistema di calcolo. Sono: la
tastiera, il mouse, lo scanner, le stampanti, il video, ecc..
• Unità di memorizzazione: memorizzano permanentemente le informazioni in esse contenute.
Sono i dischi magnetici, i CD-ROM, i DVD, i nastri, ecc…
• Unità di comunicazione: permettono di interconnettere sistemi di calcolo in modo da realizzare una
rete. Sono i modem, le schede di rete LAN, ecc…
Ma come viene gestito il colloquio, e il trasferimento dei dati, tra le unità di I/O, o unità
periferiche, e la memoria centrale?
Intanto diciamo che ogni dispositivo periferico, per esempio la tastiera, il video, ecc.., è collegato al bus
di sistema (e quindi al processore) tramite un circuito di interfaccia, spesso indicato come controllore del
dispositivo.
Fig.1 Schema architetturale semplificato di un calcolatore.
Compito del controllore è appunto quello di gestire il trasferimento dei dati tra la memoria e la
periferica, controllando il funzionamento del dispositivo esterno inviando e ricevendo dallo stesso
segnali mediante un ben definito protocollo.
Il controller è dotato di un proprio buffer locale, la CPU sposta i dati dalla/verso la memoria centrale
verso/da i buffer locali del controller, dopodichè continua con altre operazioni. Quindi l’operazione
di I/O ha luogo tra il dispositivo cd il buffer locale del controller.
Se consideriamo per esempio il dispositivo disco rigido, un’operazione di lettura dal disco avviene nel
seguente modo:
lettura dal disco:
⇒ il controllore riceve (dal processore) l’ordine di leggere e l’indirizzo dei dati da leggere;
⇒ il controllore esegue l’operazione di lettura caricando i dati nel proprio buffer
⇒ il controllore informa la CPU del termine dell’operazione con un segnale di interrupt request
(INTR) per comunicare alla CPU che ha i dati pronti per la trasmissione
⇒ la CPU verifica la presenza del segnale INT e, in caso affermativo, invia una conferma (INTA) al device
che ha generato l’interrupt
⇒ la CPU termina l’esecuzione dell’istruzione corrente e attende i dati
⇒ la CPU salva sullo stack le informazioni necessarie a riprendere l’elaborazione interrotta.
1
(Program Counter (PC), Stack Pointer (SP), Program Status Word (PS)).
⇒ Una volta inviati i dati alla CPU il controllore modifica opportuni bit di stato per segnalare la
disponibilità ad eseguire altre operazioni.
Il dialogo tra processore e controllore e tra controllore e dispositivo periferico sono due processi
separati che vengono eseguiti in parallelo.
Essendo eseguiti in parallelo devono essere controllati e sincronizzati.
Esistono diverse modalità di colloquio tra la CPU e le periferiche: I/O a controllo di programma, I/O
guidato dalle interruzioni, I/O con dispositivo di accesso diretto alla memoria.
I/O a controllo di programma (polling)
In questa modalità il processore si occupa di tutte le attività leggendo ciclicamente i registri di stato del
controllore per sapere quando è pronto per ricevere o trasmettere dati. Il controllo avviene quindi in un
ciclo di attesa attiva (loop busy-wait o polling) tramite un insieme di istruzioni di I/O dedicate.
Svantaggio:
Il processore è sottoutilizzato per la presenza del ciclo di attesa in cui non può eseguire altre operazioni. Questo
metodo è accettabile solo in un sistema monoprogammato, dove il processore è dedicato interamente
all’esecuzione del processo e non può fare altro fino alla fine del processo.
In un sistema multiprogrammato potrebbe essere efficiente solo se la velocità del dispositivo fosse
paragonabile con quella della CPU.
I/O guidato dalle interruzioni
Il processore prepara i dati di output, poi attiva il controllore della periferica abilitandolo ad eseguire le
interruzioni e si mette in attesa del completamento dell’operazione di I/O. Quando l'I/O è terminato, un
interrupt del controllore (INTR) segnala che i dati sono pronti e il processo può essere ripreso. Nel
frattempo, la CPU manda in esecuzione altri processi o altri thread dello stesso processo.
Svantaggio:
Il processore è continuamente interrotto perché deve eseguire il trasferimento dei dati dal controllore alla
memoria, con notevole perdita di tempo che potrebbe essere utilizzato per eseguire altri processi.
I/O con dispositivo di accesso diretto alla memoria
Nei computer moderni è stato introdotto il DMA (Direct Access Memory), un dispositivo che gestisce
autonomamente il trasferimento dei dati tra il dispositivo di I/O e la memoria, sollevando la CPU da tale
compito.
Il processore prepara le informazioni da trasferire (i dati, la destinazione, il tipo di operazione), poi
lascia che sia l’hardware del DMA ad occuparsi del trasferimento.
In dettaglio:
- il processore carica i registri del DMA con le informazioni necessarie, avvia il DMA, sospende il
processo che ha richiesto l’operazione di I/O, cede il controllo allo scheduler che attiverà un altro
processo
- Il DMA esegue il trasferimento dei dati senza coinvolgere la CPU, accede comunque al bus di sistema
- Il DMA, alla fine del trasferimento, invia un’interruzione al processore che riattiva il processo dal punto
in cui si era interrotto.
Il trasferimento dei dati in DMA può avvenire in vari modi:
• trasferimento a blocchi (burst transfer)
Prevede che il DMA Controller, una volta acquisito il controllo
del bus, lo mantenga per tutto il tempo richiesto per trasferire un
blocco di dati. L'accesso al bus da parte della CPU resta negato
durante tutto il trasferimento;
2
• trasferimento con cycle stealing
• trasferimento con Transparent/Hidden
Il DMA Controller trasferisce i dati in piccoli blocchi,
occupando il bus per periodi limitati di tempo.
Il DMA occupa il BUS solo quando la CPU non ne ha
bisogno. Per far sì che ciò avvenga il DMA sorveglia la
CPU e inizia un ciclo di bus solo se l'istruzione in
esecuzione nella CPU è abbastanza lunga da consentirlo (e
ovviamente non riguarda trasferimenti sul BUS).
Svantaggio:
Il canale del DMA contende alla CPU l’accesso al bus di sistema, con conseguente rallentamento del
processore. Per evitare ciò viene utilizzato il metodo Transparent/Hidden.
3