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