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
Scarica

Organizzazione del corso