Dispositivi di IO Lucidi fatti in collaborazione con
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 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 1 0 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 D 0 D 1 D 2 D 3 P D 4 D 5 D 6 D 7 P D 8 D 9 D 10 D 11 P D 12 D 13 D 14 D 15 P D 16 D 17 D 18 D 19 P D 20 D 21 D 22 D 23 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 D 0 e D 5, scrittura grande per D 12 D 15 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 D 0 con il nuovo D 0’, 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 D 0 e D 5 usa i dischi 0, 1, 3, 4 D 0 D 1 D 2 D 3 P D 4 D 5 D 6 P D 7 D 8 D 9 P D 10 D 11 D 12 P D 13 D 14 D 15 P D 16 D 17 D 18 D 19 D 20 D 21 D 22 D 23 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 Address/data bus 1) 2) 3) 4) 5) 6) 7) Quando la memoria vede Read. Req, legge l’indirizzo dal bus Address/Data bus e asserisce Ack Il dispositivo di I/O vede Ack asserito, nega Read. Req e rilascia l’ Address/Data bus (mette le sue uscite in alta impedenza) La memoria vede che Read. Req è negato e nega Ack Quando la memoria ha il dato pronto, lo mette sull’Address/Data bus ed asserisce Data. Rdy Il dispositivo di I/O vede Data. Rdy asserito, legge il dato ed asserisce Ack La memoria vede Ack asserito, nega Data. Rdy 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): – – Read. Req viene asserito Ack viene asserito in risposta a Read. Req viene non asserito in risposta ad Ack viene non asserito in risposta a Read. Req – – Data. Rdy viene asserito Ack viene asserito in risposta a Data. Rdy viene non asserito in risposta ad Ack viene non asserito in risposta a Data. Rdy 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-X Ampiezza dati 16 bit 8 o 16 bit 32 o 64 bit Frequenza clock Fino a 100 Mh. Z 10 Mh. Z (Fast) 33 o 66 MHz 20 Mh. Z (Ultra) 40 Mh. Z (Ultra 2) 80 Mh. Z (Ultra 3) 160 Mh. Z (Ultra 4) 66, 100, 133 Mh. Z Numero di bus master 1 multipli Bandwidth (picco) 200 MB/sec 320 MB/sec 528 MB/sec 1064 MB/sec Temporizzazione asincrono 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 • Hyper. Transport – 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 Fire. Wire 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, 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 – Bus singolo, DMA-I/O integrati Processore DMA Bus di sistema Memoria DMA I/O – Bus di I/O Processore Memoria … I/O Bus processore-memoria DMA Memoria Bus di 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
- Slides: 69