Dispositivi di I/O Lucidi fatti in collaborazione con dell’Ing. Valeria Cardellini Possibile organizzazione di un calcolatore 1 Dispositivi di I/O • Un dispositivo di I/O è costituito da due componenti: – Il dispositivo fisico effettivo (disco, stampante, mouse, video, …) – Il device controller (o interfaccia) che gestisce tutte le operazioni che il dispositivo è in grado di svolgere • Permette di uniformare la connessione tra il dispositivo ed il resto del sistema • Il device controller è collegato attraverso il bus di sistema con CPU e memoria principale • Il device controller è un sottosistema specializzato nel controllo dei dispositivi di I/O – Fornisce eventuali registri dove possono essere appoggiati i dati del trasferimento ed i comandi al dispositivo 2 Eterogeneità dei dispositivi di I/O • Hanno caratteristiche molto diverse tra loro, classificabili in base a 3 dimensioni – Comportamento • Input/output o memorizzazione di dati – Controparte (partner) • Uomo o macchina – Tasso di trasferimento dati • Dal dispositivo in memoria e viceversa Dispositivo Funzione Partner Velocità (Mb/sec) Tastiera input umano 0,0001 Mouse input umano 0,0038 Stampante laser output umano 3,2 Network/ wireless LAN input o output macchina 11-54 Network/LAN input o output macchina 100-1000 Disco ottico memorizzazione macchina 80 Disco magnetico memorizzazione macchina 240-2560 Scheda grafica output umano 800-8000 3 Disco magnetico • Costituito da un insieme di piatti rotanti (da 1 a 15) – Piatti rivestiti di una superficie magnetica • Esiste una testina (bobina) per ogni faccia del piatto – Generalmente piatti a doppia faccia • Le testine di facce diverse sono collegate tra di loro e si muovono contemporaneamente • Velocità di rotazione costante (ad es. 10000 RPM) • La superficie del disco è suddivisa in anelli concentrici (tracce) • Registrazione seriale su tracce concentriche – 1000-5000 tracce – Tracce adiacenti separate da spazi 4 Disco magnetico (2) • Ciascuna traccia è divisa in settori – Settore: la più piccola unità che può essere trasferita (scritta o letta) – Centinaia di settori per traccia, generalmente di lunghezza fissa (es., 512 B) – Il settore contiene un ID del settore, i dati e un codice di correzione di errore: la capacità formattata scende del 15% • Tracce sovrapposte su piatti diversi forma un cilindro 5 Organizzazione dei dati sul disco • Nei dischi più vecchi – Ogni traccia conteneva lo stesso numero di settori – Le tracce esterne (più lunghe) memorizzavano informazioni con densità minore • Nei dischi recenti – Per aumentare le prestazioni, si utilizzano maggiormente le tracce esterne: zoned bit recording (o multiple zone recording) – Tracce raggruppate in zone sulla base della loro distanza dal centro • Una zona contiene lo stesso numero di settori per traccia – Più settori per traccia nelle zone esterne rispetto a quelle interne – Densità di registrazione (quasi) costante 6 Lettura/scrittura di un disco • Processo composto da 3 fasi: – Posizionamento della testina sul cilindro desiderato (tempo di seek) • Da 3 a 14 ms (può diminuire del 75% se si usano delle ottimizzazioni) • Dischi di diametro piccolo permettono di ridurre il tempo di posizionamento – Attesa che il settore desiderato ruoti sotto la testina di lettura/scrittura (tempo di rotazione) • In media è il tempo per ½ rotazione • Tempo di rotazione medio = 0.5/numero di giri al secondo Es.: 7200 RPM Tempo di rotazione medio = 0.5/(7200/60) = 4.2 ms – Operazione di lettura o scrittura di un settore (tempo di trasferimento) • Da 30 a 80 MB/sec (fino a 320 MB/sec se il controllore del disco ha una cache built-in) • In più: tempo per le operazioni del disk controller (tempo per il controller) 7 Prestazioni dei dischi magnetici • Calcolo del tempo medio necessario a leggere o scrivere un settore di 512 byte sapendo che: – – – – Il disco ruota a 10000 RPM Il tempo medio di seek è 6 ms Il transfer rate è di 50 MB/sec L’overhead del controller è di 0.2 ms Tempo di seek + tempo medio di rotazione + tempo medio di trasferimento + overhead del controller = = 6 ms + (0.5/(10000/60))·1000 ms + 0.5 KB/(50 MB/sec) + 0.2 ms = (6.0 + 3.0 + 0.01 + 0.2) ms = = 9.2 ms 8 Affidabilità e disponibilità Fallimento (failure) Servizio Servizio accessibile interrotto Ripristino • Fallimento (failure): il comportamento del servizio non è conforme alle specifiche – Il fallimento è causato da un errore (error) – i.e. porzione di stato scorretto – La causa di un errore è un guasto (fault) • tipo: hw, sw o operativo • durata: transiente, permanente, intermittente • visibilità esterna: fail-stop, bizantino 9 Affidabilità e disponibilità (2) •Affidabilità - reliability: probabilità che il sistema funzioni secondo le specifiche di progetto continuamente dall’istante in cui viene attivato all’istante di “osservazione” – R(t) •Disponibilità all’istante t: probabilità che il sistema funzioni secondo le specifiche di progetto quando gli si chiede un servizio – A(t) •Disponibilità (a regime permanente) - availability: disponibilità quando t -> infinito Affidabilità e disponibilità (3) •Tempo medio di fallimento (mean time to failure o MTTF) –Tempo medio che intercorre tra l’istante in cui il servizio è ripristinato ed il fallimento successivo –E’ un indice dell’affidabilità (reliability) del servizio •Tempo medio di riparazione (mean time to repair o MTTR): –Tempo medio necessario per ripristinare il servizio Affidabilità e disponibilità (4) • Tempo medio tra due fallimenti (mean time between failures o MTBF) – Tempo medio tra due fallimenti consecutivi MTBF = MTTF + MTTR • Disponibilità (availability): Availability = • MTTF ----------------------MTTF + MTTR Per aumentare il MTTF – Evitare i guasti (p.e. uso di componenti più costosi) – Tollerare i guasti • Tolleranza ai guasti: capacità del servizio di non subire fallimenti anche in presenza di guasti • Occorre introdurre ridondanze (spaziale, temporale) – Predire i guasti (evitare di usare sistemi con componenti prossimi al guasto) – manutenzione preventiva 12 RAID • Le prestazioni dei dischi crescono più lentamente di quelle dei processori – Accesso ai dischi migliorato di 5/10 volte in 20 anni • Idea di Patterson et al. nel 1987: usare in parallelo più dischi per aumentare le prestazioni dei dischi • Problema: un array di dischi (senza ridondanza dei dati) è inaffidabile! Affidabilità di un array da N dischi = Affidabilità di 1 disco/N • Soluzione: definire un’organizzazione dei dati memorizzati sui dischi in modo da ottenere un’elevata affidabilità (tolleranza ai guasti) replicando i dati sui vari dischi dell’array • RAID: Redundant Array of Inexpensive (Independent) Disks – Insieme di dischi a basso costo ma coordinati in azioni comuni per ottenere diversi livelli di tolleranza ai guasti 13 Livelli RAID 14 RAID 0 • Nessuna ridondanza dei dati • Solo striping dei dati – Striping: allocazione di blocchi logicamente sequenziali su dischi diversi per aumentare le prestazioni rispetto a quelle di un singolo disco – Lettura e scrittura in parallelo di strip (strisce) su dischi diversi • Non è un vero RAID perché non c’è nessuna ridondanza • E’ la migliore soluzione in scrittura, perchè non ci sono overhead per la gestione della ridondanza, ma non in lettura 15 RAID 1 • Mirroring (o shadowing) • Ciascun disco è completamente replicato su un disco ridondante (mirror), avendo così sempre una copia – Usa il doppio dei dischi rispetto a RAID 0 • Ottime prestazioni in lettura – Molte possibilità di migliorare le prestazioni (es.: leggere dal disco con il minimo tempo di seek, leggere due file contemporanemanete su dischi “gemelli”) • Una scrittura logica richiede due scritture fisiche • E’ la soluzione RAID più costosa 16 RAID 2 • Rivelazione e correzione degli errori (codice di Hamming) • Striping a livello di parola o di byte (in RAID 0 e 1 strip di settori) – Es. in figura: 4 bit (nibble) più 3 bit (codice di Hamming a 7 bit) • Svantaggio: rotazione dei dischi sincronizzata • Resiste a guasti semplici • Ad ogni scrittura bisogna aggiornare i dischi di “parità” anche per la modifica di un singolo bit di informazione • Forte overhead per pochi dischi (in figura +75%), ha senso con molti dischi, ad esempio: – Parola da 32 bit+(6+1) bit di parità 39 dischi – Overhead del 22% (=7/32) • In disuso 17 RAID 3 • Un bit di parità orizzontale ed uno verticale – versione semplificata di RAID 2 • Resiste ad un guasto (transiente o permanente) alla volta • Overhead abbastanza contenuto • Solo un’operazione su disco per volta – Ciascuna operazione coinvolge tutti i dischi • Soluzione diffusa per applicazioni che operano su grandi quantità di dati in lettura, disco di parità collo di bottiglia in caso di scrittura 18 RAID 3: esempio Record logico 10010011 11001101 10010011 ... Record fisici • P contiene il bit di parità dei bit (strip) memorizzati negli altri dischi • Se un disco fallisce (in modo transeiente o permanente), utilizzando P, i bit di parità verticale e i bit degli altri dischi si recupera l’informazione mancante • Overhead accettabile (poco più di un terzo nell’esempio) P 1 0 0 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 1 0 0 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 19 RAID 4 • Evoluzione di Raid 3 con striping a blocchi (come RAID 0) – la strip nell’ultimo disco contiene i bit di parità dell’insieme di bit omologhi di tutte le altre strip • No rotazione sincronizzata (come in RAID 2 e 3) • Resiste a guasti singoli (transienti e permanenti) • Consente letture indipendenti sui diversi dischi – Se si legge una quantità di dati contenuta in una sola strip • Il disco di parità è il collo di bottiglia 20 RAID 4: lettura e scrittura D0 D1 D2 D3 P D4 D5 D6 D7 P D8 D9 D10 D11 P D12 D13 D14 D15 P D16 D17 D18 D19 P D20 D21 D22 D23 P Dentro 5 dischi • Lettura piccola: coinvolge un solo disco • Scrittura : anche se si aggiorna un solo disco si deve aggiornare anche strip di parità • Esempio: lettura piccola per D0 e D5, scrittura grande per D12D15 Strip disco 0 disco 1 disco 2 disco 3 disco 4 21 Scrittura in RAID 3 e RAID 4 • Esempio di scrittura piccola in RAID 4: – Opzione 1: si leggono i dati sugli altri dischi, si calcola la nuova parità P’ e la si scrive sul disco di parità (come per RAID 3) • Es.: 1 scrittura logica = 3 letture fisiche + 2 scritture fisiche – Opzione 2: poiché il disco di parità ha la vecchia parità, si confronta il vecchio dato D0 con il nuovo D0’, si aggiunge la differenza a P, e si scrive P’ sul disco di parità • Es.: 1 scrittura logica = 2 letture fisiche + 2 scritture fisiche 22 RAID 5 • Blocchi di parità distribuita • Le strip di parità sono distribuite su più dischi in modalità round-robin (circolare) • Si evita il collo di bottiglia del disco di parità in RAID 4 • La scrittura piccola è gestita come in RAID 4 23 RAID 5: scrittura • Sono possibili scritture indipendenti in virtù della parità interallacciata • Esempio: la scrittura di D0 e D5 usa i dischi 0, 1, 3, 4 D0 D1 D2 D3 P D4 D5 D6 P D7 D8 D9 P D10 D11 D12 P D13 D14 D15 P D16 D17 D18 D19 D20 D21 D22 D23 P disco 0 disco 1 disco 2 disco 3 disco 4 24 RAID 6 • Ridondanza P+Q (si aumenta la distanza di Hamming) • Anziché la parità, si usa uno schema che consente di ripristinare anche un secondo guasto – la singola parità consente di recuperare un solo guasto • Overhead di memorizzazione doppio rispetto a RAID 5 25 Bus • Rappresenta il canale di comunicazione tra le varie componenti del calcolatore – Mezzo di trasmissione condiviso, al quale sono collegati più componenti – Un calcolatore contiene svariati bus • Potenziale collo di bottiglia essendo le sue prestazioni limitate da: – Lunghezza – Numero di dispositivi connessi • Bus composto da: – Linee dati (e indirizzi) • Informazioni: dati, indirizzi (anche comandi complessi) • Ampiezza: numero di linee dati • Possibile condividere le linee per dati e indirizzi (multiplexing) – Linee di controllo • Per controllare l’accesso e l’uso delle linee dati ed indirizzi • Richieste ed ack, tipo di informazione sulle linee dati 26 Transazioni sul bus • Transazione sul bus – Invio dell’indirizzo e del comando da parte dell’unità master – Invio o ricezione dei dati da parte dell’unità slave • Operazione di input (o transazione di scrittura): trasferimento dati dal dispositivo di I/O alla memoria – Linee di controllo: indicano che in memoria occorre eseguire una scrittura – Linee di dati: contengono l’indirizzo di memoria in cui scrivere il dato • Operazione di output (o transazione di lettura): trasferimento dati dalla memoria al dispositivo di I/O – Linee di controllo: indicano che in memoria occorre eseguire una lettura – Linee di dati: contengono l’indirizzo di memoria in cui leggere il dato 27 Tipologie di bus • Bus processore-memoria – Lunghezza ridotta, alta velocità – In generale proprietario – Progettato per massimizzare la banda di trasferimento processore-memoria • Bus di I/O – Tipicamente di lunghezza maggiore e più lenti – Una gran varietà di dispositivi di I/O connessi – Standard, ad es. Firewire (IEEE 1394), USB, SCSI • Bus backplane – Struttura di interconnessione all’interno dello chassis – Usati spesso come struttura intermedia tra i bus di I/O ed il bus processore-memoria 28 Esempio di organizzazione P ro c e s s o r-m e m o ry b u s P ro c e s s o r M e m o ry B us a d a p te r Bus I /O b u s a d a p te r B a c k p la n e bus Bus I /O b u s a d a p te r • Bus backplane connesso al bus processore-memoria • Bus di I/O connessi al bus backplane 29 Schemi di comunicazione su un bus • La comunicazione sul bus deve essere regolata attraverso un protocollo di comunicazione • Esistono due schemi principali di comunicazione (temporizzazione) su di un bus – Bus sincroni: protocollo sincrono – Bus asincroni: protocollo asincrono 30 Bus sincrono • Le linee di controllo del bus includono un segnale di sincronizzazione (clock) • Il protocollo di comunicazione è scandito dai cicli di clock • Ogni ciclo del bus per lettura/scrittura richiede più cicli di clock • Vantaggi – Molto veloce – Non richiede molta logica, perché tutti gli eventi sono sincroni con il clock • Svantaggi – Ogni dispositivo deve essere sincronizzato con il clock – Non può avere lunghezza elevata (problemi di clock skew) • I bus processore-memoria sono spesso sincroni – Hanno lunghezza ridotta – Hanno pochi elementi connessi 31 Bus sincrono: transazione di lettura I dati sono pronti per essere letti dal processore • Read: segnale di controllo che indica la richiesta di lettura (o scrittura) • Wait: indica al processore di non aspettare • Sono necessari più cicli di clock per leggere un dato dalla memoria 32 Bus asincrono • Non è dotato di clock • La comunicazione tra le due parti avviene tramite un protocollo di handshaking • Vantaggi: – Può avere lunghezza elevata e connettere molti dispositivi – Il tempo impiegato dalle singole operazioni sul bus è legato esclusivamente alla velocità delle parti coinvolte • Svantaggi: – Più lento dei bus sincroni • Spesso i bus di I/O sono asincroni 33 Bus asincrono: ciclo di lettura Trasferimento dati da memoria a dispositivo I/O ReadReq 1 3 Address/data bus Data 2 2 4 6 4 Ack 5 7 DataRdy 1) 2) 3) 4) 5) 6) 7) Quando la memoria vede ReadReq, legge l’indirizzo dal bus Address/Data bus e asserisce Ack Il dispositivo di I/O vede Ack asserito, nega ReadReq e rilascia l’ Address/Data bus (mette le sue uscite in alta impedenza) La memoria vede che ReadReq è negato e nega Ack Quando la memoria ha il dato pronto, lo mette sull’Address/Data bus ed asserisce DataRdy Il dispositivo di I/O vede DataRdy asserito, legge il dato ed asserisce Ack La memoria vede Ack asserito, nega DataRdy e rilascia l’Address/Data bus (mette le sue uscite in alta impedenza) Il dispositivo di I/O nega Ack 34 Bus asincroni: protocollo di handshaking • Lo schema asincrono visto è incentrato sul seguente protocollo di handshaking tra produttore e consumatore (ci sono due macchine a stati finiti): – – – – ReadReq viene asserito Ack viene asserito in risposta a ReadReq ReadReq viene non asserito in risposta ad Ack Ack viene non asserito in risposta a ReadReq – – – – DataRdy viene asserito Ack viene asserito in risposta a DataRdy DataRdy viene non asserito in risposta ad Ack Ack viene non asserito in risposta a DataRdy 35 Temporizzazione sincrona o asincrona? Lungo Clock skew (funzione della lunghezza del bus) Asincrona Sincrona Corto Simili Velocità dei dispositivi di I/O Eterogenee 36 Comunicazione sul bus (quando ci sono più richiedenti di informazioni) • Problema: ottenere l’accesso al bus (mezzo di comunicazione condiviso) • Accesso regolato tramite ruoli master e slave – Unità master: può iniziare attivamente una transazione di lettura o scrittura – Il processore è sempre un master, la memoria uno slave – Un bus può avere molteplici master • Architettura più semplice: un solo bus master (un processore), che media tutte le comunicazioni – Svantaggio: il processore deve prendere parte ad ogni transazione sul bus • Alternativa: avere più master e seguire un protocollo per coordinare le richieste dei master – Occorre un meccanismo di arbitraggio del bus 37 Arbitraggio del bus • Permette di decidere quale dispositivo sarà il prossimo bus master autorizzato all’utilizzo del bus – Consente di risolvere possibili contese per l’accesso • Obiettivi: – Assegnare il bus ai dispositivi con priorità più alta – Garantire che non si verifichino situazioni di attesa indefinita o di paralisi del sistema • Schemi di arbitraggio centralizzati: – Un controllore decide a chi assegnare il bus – Daisy chain e livelli multipli di priorità • Schemi di arbitraggio distribuiti (decentralizzati): – Nessun controllore centralizzato: i dispositivi seguono un algoritmo per il controllo d’accesso e cooperano nella condivisione del bus – Possibili politiche: Round-robin, rilevamento della collisione 38 Daisy chain • Ad ogni dispositivo è assegnata una priorità • Sceglie il dispositivo che richiede l’accesso al bus e possiede priorità maggiore (più vicino all’arbitro) • Problema: non garantisce la fairness – favorisce alcuni dispositivi rispetto ad altri Linea di occupazione Linea di disponibilità Linea di richiesta 39 Livelli multipli di priorità • Anche detto parallelo centralizzato • Diverse linee di richiesta associate a diversi livelli di priorità – In caso di conflitto favorite le catene a priorità più alta – All’interno di ciascuna catena vale la posizione (daisy chain) – In genere, se c’è un solo bus con anche la memoria, il processore ha priorità più bassa dei dispositivi di I/O Catena a priorità massima Catena a priorità minima 40 Schemi di arbitraggio distribuiti • Round-robin – Assegnazione circolare del bus – Scambio ciclico di un segnale di disponibilità tra le unità utilizzatrici del bus • Rilevamento delle collisioni – Esiste un’unica linea su cui è segnalato lo stato del bus (libero/occupato) – Più unità contemporaneamente possono occupare il bus: situazione di collisione – Occorre rilevare la collisione ed annullare la trasmissione – La trasmissione sarà ripetuta dopo un intervallo di tempo (il cui valore è generato in modo casuale) – Simile a rete Ethernet 41 Bus interni ed esterni • I bus in un calcolatore si possono anche distinguere in bus interni ed esterni • Bus interni (o locali) – Confinati all’interno di una singolo chip (tra processore e cache) o tra processore e memoria – Elevata velocità per massimizzare la banda passante – Tecnologia proprietaria • Bus esterni – Collegano dispositivi diversi – Maggiore lunghezza – Velocità inferiore 42 Banda passante di un bus • Un bus trasmette sequenze di dati: la rapidità con cui si passa da un dato al successivo è detta ciclo di bus • Più alta è la frequenza, maggiori sono le prestazioni del bus (bandwidth o banda passante) • Per ricavare la massima banda passante teorica: max banda = frequenza * numero di linee [MB/sec] • Le fasi di inattività e di scambio comandi riducono la banda passante reale • I limiti fisici all’aumento della frequenza sono: – alte frequenze creano disturbi (interferenze) – bus skew (segnali su linee diverse che viaggiano a velocità diverse) 43 Tecniche per aumentare la banda passante • Parallelismo delle linee dati – Aumento del numero di linee • Linee dati ed indirizzi separate – Aumento del numero di linee • Trasferimento di dati a blocchi – Riduzione del tempo di risposta • Protocollo split transaction – La transazione sul bus è divisa in due parti: transazione di richiesta e transazione di risposta • al termine della transazione di richiesta viene rilasciato il bus; per la transazione di risposta occorre nuovamente competere per l’accesso al bus – Vantaggio: si evitano tempi di non utilizzo del bus, sfruttando meglio la banda del bus – Svantaggio: tempi di transazione più lunghi – Usato nei sistemi multiprocessore che condividono il bus di memoria 44 Opzioni di progettazione di un bus Opzione Prestazioni elevate Costo basso Parallelismo bus Linee indirizzi e dati separate Linee indirizzi e dati multiplexate Parallelismo dati Ampio (es. 64 bit) Limitato (es. 8-16 bit) Dimensione del trasferimento Più parole per trasferimento riduce l’overhead Trasferimento di singole parole più semplice Bus master Multiplo (necessario arbitraggio) Singolo (nessun arbitraggio) Split transaction Sì (pacchetti request/reply separati forniscono più banda) No (una connessione continua è più economica ed ha latenza minore) Temporizzazione Sincrona Asincrona 45 Alcuni standard per bus IDE/Ultra ATA SCSI PCI PCI-X Ampiezza dati 16 bit 8 o 16 bit 32 o 64 bit 32 o 64 bit Frequenza clock Fino a 100 MhZ 10 MhZ (Fast) 33 o 66 MHz 20 MhZ (Ultra) 40 MhZ (Ultra2) 80 MhZ (Ultra3) 160 MhZ (Ultra4) 66, 100, 133 MhZ Numero di bus master 1 multipli multipli multipli Bandwidth (picco) 200 MB/sec 320 MB/sec 528 MB/sec 1064 MB/sec Temporizzazione asincrono asincrono sincrono sincrono PCI (Peripheral Component Interconnect) e PCI-X usati per connettere la memoria principale ai dispositivi periferici; IDE/Ultra ATA e SCSI (Small Component System Interface) per dispositivi di storage 46 Bus paralleli e seriali • Bus paralleli – Più bit alla volta: i bit vengono inviati contemporaneamente su più linee • Bus seriali – Un bit alla volta: i bit vengono inviati in tempi diversi su un’unica linea – Un bus seriale può avere una frequenza di funzionamento superiore rispetto ad un bus parallelo • Necessità di avere a disposizione una velocità di trasferimento dei dati sempre più elevata: maggiore attenzione verso bus seriali e collegamenti punto-punto 47 Esempi di bus ad alte prestazioni • PCI Express – Evoluzione seriale del bus PCI (che è un bus parallelo) – Bus bidirezionale (full-duplex) usato principalmente da Intel – Costituito da un serie di canali, che possono essere aggregati per aumentare la banda • Banda aggregata fino a 7,5 GB/sec • HyperTransport – Usato principalmente da AMD e Transmeta – Collegamento punto-punto unidirezionale ad alta velocità e bassa latenza – Ogni link è costituito da due canali (per le due direzioni di trasmissione) che operano in maniera indipendente e concorrente • Fino a 32 bit per link • Banda aggregata fino a 22,4 GB/sec 48 USB e Firewire • Sono due bus di I/O seriali: – Permettono di collegare con un unico bus molte periferiche (fino a 63 per FireWire e 127 per USB 2.0) – Supportano entrambi l’inserimento a caldo • Firewire (IEEE 1394) – Bus ad alta velocità progettato per dispositivi di I/O ad alta capacità (dispositivi di archiviazione e acquisizione video) • Fino a 50 MB/sec – Ideato dalla Apple • USB (Universal Serial Bus) – Bus economico per la gestione di dispositivi di I/O a medio/bassa velocità • Fino a 60 MB/sec per USB 2.0 – Flessibilità, semplicità: • Un unico bus per molte periferiche • Non sono necessari dispositivi di controllo e porte dedicate • Facilmente espandibile 49 Esempio tipico per desktop 50 Esempio: Pentium 4 DDR (double-data rate): invio dei dati sia sul fronte di salita che sul fronte di discesa del clock Il tasso di trasferimento tra north bridge e south bridge è 266 MB/sec: per questo AGP (Accelerated Graphics Port) e la Gigabit Ethernet sono connesse al north bridge anziché al south bridge AGP non è un vero e proprio bus ma un collegamento punto-punto 51 Invio dei comandi ad un dispositivo di I/O • I comandi devono essere inviati al corrispondente device controller • Un’istruzione di I/O in un linguaggio ad alto livello viene trasformata in una serie di comandi per il controller – La trasformazione avviene ad opera del compilatore che traduce l’istruzione in una chiamata al sistema operativo • A runtime la chiamata del sistema operativo richiama uno dei moduli del SO che si occupano della gestione dell’I/O (device driver) • Il device controller ha una serie di registri (porte di I/O) in cui memorizza – Lo stato della periferica (ad es.: idle, busy, down, …) – Il comando in esecuzione – I dati da/verso il dispositivo di I/O 52 Invio dei comandi ad un dispositivo di I/O (2) • Il device controller può essere visto come un processore (con potenzialità ridotte) – Si parla di processori di I/O • Per richiedere un’operazione di I/O il processore deve – Predisporre il contenuto dei registri del controller a valori predeterminati – Avviare il controller stesso • L’operazione di selezione del controller e di predisposizione dei suoi registri può avvenire in due modi – Memory-mapped I/O – Istruzioni di I/O dedicate 53 Memory-mapped I/O • Lo spazio di indirizzamento dell’I/O appartiene allo stesso spazio di indirizzamento della memoria – I registri dei vari device controller sono considerati logicamente come locazioni di memoria, pur essendo fisicamente localizzati all’interno del device controller • I device controller devono essere quindi dotati di un meccanismo che permetta loro di riconoscere le transazioni ad essi indirizzate • I controller ascoltano tutti i segnali in transito sul bus (bus snooping) e si attivano solo quando riconoscono sul bus un indirizzo corrispondente ad una propria locazione di memoria 54 Istruzioni dedicate • Lo spazio di indirizzamento di I/O è separato dallo spazio di indirizzamento della memoria • Per consentire al processore di accedere ai registri dei controller delle periferiche vengono inserite delle istruzioni specifiche nell’insieme delle istruzioni, dedicate alla gestione dell’I/O • Queste istruzioni dedicate fanno riferimento esplicitamente al dispositivo interessato all’operazione di I/O 55 Modalità di esecuzione delle operazioni di I/O • I dispositivi di I/O sono molto più lenti del processore; inoltre, essi procedono in modo autonomo – È quindi necessario introdurre qualche meccanismo di sincronizzazione per la gestione delle operazioni di I/O • Principali tecniche per la gestione dei dispositivi di I/O – – – – A controllo di programma Polling I/O interrupt driven Direct Memory Access 56 I/O a controllo di programma • Completo coinvolgimento del processore nella gestione dell’operazione di I/O richiesta • Il processore, dopo avere predisposto il controller all’esecuzione dell’operazione di I/O interroga continuamente il controller per verificare l’esito dell’operazione • Ad operazione ultimata, il processore provvede a trasferire il dato (nel caso di operazione di input) o ad eseguire una nuova istruzione • Il processore è coinvolto durante tutta l’operazione di I/O per svolgere il ruolo di controllore • Il ciclo svolto dal processore in attesa dello svolgimento dell’operazione è detto busy waiting 57 I/O a controllo di programma (2) • L’I/O a controllo di programma è molto semplice ma dispendioso – Il processore spreca tempo nel ciclo di busy waiting, perché non svolge nessun’altra attività se non quella di osservare lo stato della periferica • Questa tecnica non deve essere usata nella gestione di periferiche lente, perché forza il processore ad operare alla stessa velocità delle periferiche – Di conseguenza, la potenza di calcolo del processore viene sprecata • Un (lieve) miglioramento della tecnica a controllo di programma è il polling 58 Polling • Durante un ciclo di busy waiting su un dispositivo, il processore esegue il polling (appello) degli altri dispositivi di I/O • Quando un dispositivo necessita di un qualche intervento, il processore soddisfa la richiesta di trasferimento e poi continua il polling • I miglioramenti di prestazioni rispetto al controllo di programma sono limitati • Problemi principali del polling – Con periferiche lente: un eccessivo spreco di tempo di processore, che per la maggior parte del tempo è occupato nel ciclo di busy waiting – Con periferiche veloci: il lavoro svolto dal processore è quasi esclusivamente dovuto all’effettivo trasferimento dati 59 I/O interrupt driven • Per evitare il busy waiting è necessario introdurre un metodo basato sulla gestione delle interruzioni • Il processore invia al device controller il comando di I/O e prosegue la sua computazione, disinteressandosi dello svolgimento dell’operazione da parte del controller • Il controller esegue il comando inviatogli dal processore; quando è pronto allo scambio dei dati invia al processore un segnale di interrupt (interrupt request) • Il processore, attraverso una routine di gestione dell’interrupt (interrupt handler), provvederà a salvare il contesto esecutivo ed elaborare l’interrupt – Prima di gestire l’interrupt, il processore deve salvare le informazioni che permetteranno di riprendere l’esecuzione del programma corrente dal punto in cui è stata interrotta 60 I/O interrupt driven (2) • Un interrupt è un meccanismo che consente di interrompere l’esecuzione di un programma al fine di eseguire una routine di SO • L’interrupt (a differenza di eccezioni e trap) non è causato dall’istruzione correntemente eseguita, ma da un evento esterno, generalmente scorrelato rispetto all’istruzione stessa • Un segnale di interrupt è un evento asincrono rispetto alle attività correnti del processore – L’interrupt di I/O non è associato con nessuna istruzione, ma può capitare durante l’esecuzione di un’istruzione – L’interrupt di I/O non preclude il completamento dell’istruzione • Il meccanismo di I/O interrupt driven non svincola il processore dal dover eseguire l’operazione di trasferimento dati 61 I/O interrupt driven (3) • Meccanismi per identificare il dispositivo di I/O che ha generato l’interruzione: – Più linee di interruzione • Non è pratico dedicare molte linee del bus agli interrupt • Usato in combinazione ad uno degli altri 3 meccanismi • Semplice per priorità dell’interrupt – Interrogazione software (software poll) • Quando rileva un’interruzione, il processore esegue una routine che interroga i dispositivi di I/O per individuare chi l’ha causata • Svantaggio: perdita di tempo – Interrogazione hardware, vettorizzata • Linea di richiesta di interruzione comune a tutti i dispositivi di I/O • Quando rileva l’interruzione, il processore invia a sua volta un interruzione di riconoscimento • Il dispositivo richiedente risponde inviando un vettore, usato dal processore come puntatore alla routine di gestione appropriata – Arbitraggio del bus (vettorializzato) • Il dispositivo deve ottenere il controllo del bus prima di poter asserire la linea di richiesta dell’interruzione 62 Priorità delle interruzioni • Quando ci sono diversi dispositivi che possono inviare interruzioni al processore, oltre ad identificare il dispositivo che ha generato l’interruzione e la routine di gestione opportuna, occorre anche: – Gestire la priorità delle interruzioni – Gestire interruzioni annidate • Arriva un’interruzione mentre si sta gestendo un’altra interruzione • Gestione della priorità – Semplice con linee di interruzioni individuali – Con l’interrogazione hardware (linea di interruzione comune) la priorità si gestisce tramite un’organizzazione dei dispositivi di tipo daisy chain • L’interruzione di riconoscimento viene ricevuta prima dal dispositivo a priorità più elevata e da questi eventualmente propagato al dispositivo successivo 63 Interruzioni annidate • Soluzione semplice: si disabilitano le interruzioni durante il servizio di un interruzione – Soluzione restrittiva, in contrasto con le differenti priorità dei dispositivi • Soluzione più adottata: un’interruzione a priorità più alta può interrompere il servizio di un interruzione a priorità minore 64 Direct Memory Access • Con l’I/O interrupt driven, per periferiche veloci l’attività di trasferimento è comunque preponderante – Il processore è impegnato nel trasferimento dei dati tra dispositivo di I/O e memoria • Per evitare l’intervento del processore durante il trasferimento si usa l’accesso diretto alla memoria (Direct Memory Access o DMA) • Il DMA controller è un processore specializzato nel trasferimento dei dati tra dispositivi di I/O e memoria principale – Il DMA controller attua direttamente il trasferimento dati tra periferiche e memoria principale senza l’intervento del processore 65 Direct Memory Access (2) • Il processore ha solo il compito di supervisore; a fronte di una richiesta di I/O, il processore invia al DMA controller: – – – – Tipo di operazione richiesta Dispositivo di I/O Indirizzo di memoria da cui iniziare a leggere/scrivere i dati Numero di byte da leggere/scrivere • Il DMA controller avvia l’operazione richiesta e trasferisce i dati da/verso la memoria • Completato il trasferimento, il DMA controller invia un’interruzione al processore per segnalare il completamento dell’operazione richiesta • Tra il momento in cui termina l’invio del comando di I/O al controller e la ricezione dell’interruzione inviata dal DMA controller, il processore è completamente svincolato dall’operazione di I/O e può dedicarsi ad altre attività 66 Direct Memory Access (3) • Possibili configurazioni DMA – Bus singolo, DMA isolato Processore DMA Bus di sistema … I/O I/O – Bus singolo, DMA-I/O integrati Processore DMA Bus di sistema Memoria DMA I/O I/O – Bus di I/O Processore Memoria … I/O Bus processore-memoria DMA Memoria Bus di I/O I/O … I/O 67 DMA, memoria virtuale e cache • In sistemi con memoria virtuale, il DMA deve trasferire usando indirizzi virtuali o indirizzi fisici? – Se usa indirizzi fisici, il trasferimento non può riguardare facilmente più di una pagina • Più pagine non corrispondono generalmente a locazioni sequenziali in memoria – Se usa indirizzi virtuali, li deve tradurre in indirizzi fisici • Il sistema operativo fornisce delle tabelle di traduzione quando inizia il trasferimento • In sistemi con cache – Possibili due copie di un elemento (una in cache e una in memoria) – Altro problema derivante dalla strategia di scrittura write-back – Come mantenere la coerenza? 68