Input/Output
1
Livelli del sottosistema di I/O
Modo
utente
Software di I/O di livello utente
Software di sistema indipendente dal
dispositivo
Driver dei dispositivi
Modo
kernel
Gestori delle interruzioni
Hardware
2
I controllori dei dispositivi
Monitor
Bus
La parte meccanica viene controllata da un
controllore del dispositivo (device
controller) o adapter
3
I controllori dei dispositivi (2)
• Esempio di controllore di una porta.
Dati da/per
la periferica
Unità di
controllo
Dispositivo
porta
Registro/i dati
Registro/i controllo
Controllore I/O
Operazione /
esiti
Bus controllo
Bus indirizzi
Bus dati
4
I controllori dei dispositivi (3)
• Problema 1 : come si accede ai registri dei
controllori ?
– Si utilizzano istruzioni assembler ‘speciali’ per
l’I/O (es. IN, OUT)
• ogni registro dei controllori è contraddistinto da un
numero di porta di I/O es. IN R0, 4
– Si ‘mappano’ i registri del controllore su
particolari indirizzi di memoria, e si utilizzano
le normali LOAD/STORE (memory mapped
I/O)
5
Memory-Mapped I/O
(a) Spazi di memoria ed I/O separati
(b) Memory-mapped I/O
(c) Modello ibrido
6
Accesso diretto alla memoria (DMA)
• Vari tipi di gestione delle interazioni con le
periferiche
– a controllo di programma : il processore esegue
personalmente tutti i trasferimenti dalla RAM
alle periferiche e viceversa
– in DMA (Direct Memory Access) l’interfaccia
può accedere direttamente alla RAM
• possibilità di trasferire dati mentre il processore
elabora
• la periferica avverte quando ha finito con una
interruzione
7
Accesso diretto alla memoria DMA (2)
Operazioni effettuate durante un trasferimento DMA
– da notare: memoria virtuale, pinning
8
Livelli del sottosistema di I/O
Modo
utente
Software di I/O di livello utente
Software di sistema indipendente dal
dispositivo
Driver dei dispositivi
Modo
kernel
Gestori delle interruzioni
Hardware
9
Gestori delle Interruzioni (Interrupt Handlers)
•
Tipicamente i driver sono bloccati in attesa che
arrivi una interruzione dalla periferica che
stanno controllando
–
•
es: il driver si blocca dopo aver iniziato una
operazione di I/O
Quando arriva una interruzione
–
–
viene mandato in esecuzione il gestore delle
interruzioni (GI) di quel tipo (selezionato in base al
vettore di interruzione)
GI sblocca il driver utilizzando un opportuno
meccanismo di IPC
10
Gestori delle Interruzioni (2)
•
Abbiamo già visto il meccanismo delle
interruzioni in dettaglio. Le operazioni
effettuate dai GI sono :
–
–
–
–
–
•
invocare la routine assembler che salva i registri del
processo interrotto
segnalare al controllore delle interruzioni quando
può inviare una nuova interruzione
svegliare il driver opportuno
chiamare lo scheduler
invocare la routine assembler che carica il nuovo
processo
I GI usano uno stack a parte nel kernel
11
Livelli del sottosistema di I/O
Modo
utente
Software di I/O di livello utente
Software di sistema indipendente dal
dispositivo
Driver dei dispositivi
Modo
kernel
Gestori delle interruzioni
Hardware
12
Driver dei Dispositivi (1)
13
Driver dei Dispositivi (2)
• Il driver di un dispositivo è la parte del
sistema operativo che interagisce con il
dispositivo
– legge/scrive i registri di controllo
– tratta le caratteristiche a basso livello
– fornisce una interfaccia astratta del dispositivo
indipendente dai dettagli hw al resto del sistema
operativo
– tipicamente è sviluppato dal costruttore del
dispositivo (…)
14
Driver dei Dispositivi (3)
Tipico funzionamento di un driver :
1. Inizializza il dispositivo
2. Accetta richieste di operazioni e ne controlla la correttezza
3. Gestisce le code delle richieste che non possono essere
subito servite
4. Sceglie la prossima richiesta da servire e la traduce in una
sequenza S di comandi a basso livello da inviare al
controllore
5. Trasmette i comandi in S al controllore eventualmente
bloccandosi in attesa del completamento dell’esecuzione di
un comando
6. Controlla l’esito di ciascun comando gestendo eventuali
errori
7. Invia l’esito dell’operazione ed eventuali dati al richiedente
15
Driver dei Dispositivi (4)
• Tipicamente le interfacce astratte fornite dai
driver vengono classificate in due categorie
principali :
– interfacce a blocchi (block-oriented) :
• la lettura/scrittura sul dispositivo fisico avviene un
blocco alla volta,
• tipicamente i dati scritti vengono bufferizzati nel SO
finchè non si raggiunge l’ampiezza di un blocco
• es : dischi, nastri …
16
Driver dei Dispositivi (5)
• Tipicamente le interfacce astratte fornite dai
driver vengono classificate in due categorie
principali (cont.):
– interfacce a caratteri (character-oriented) :
• la lettura/scrittura sul dispositivo fisico avviene un
carattere alla volta,
• non c’è bufferizzazione,
• es : tipicamente tastiera, mouse,
• es : si possono avere interfacce a caratteri anche per
dischi, nastri
17
Driver dei Dispositivi (6)
• Alcuni driver possono fornire sia interfaccia
a caratteri che a blocchi
– es. driver del disco
• Le interfacce fissano un insieme di
chiamate di funzioni standard fornite da
tutti i driver che le implementano
– es. tutti i driver che forniscono una interfaccia
a blocchi forniscono una implementazione di
una funzione read() per scrivere/leggere
blocchi con formato fissato
18
Livelli del sottosistema di I/O
Modo
utente
Software di I/O di livello utente
Software di sistema indipendente dal
dispositivo
Driver dei dispositivi
Modo
kernel
Gestori delle interruzioni
Hardware
19
Software di I/O Indipendente dal
dispositivo (1)
• Funzioni del software di I/O indipendente
dal dispositivo
– fornire funzionalità di sistema ai driver
attraverso una interfaccia uniforme
• es. allocazioni di memoria, etc….
–
–
–
–
bufferizzare le informazioni
segnalare, gestire errori
allocare e rilasciare le risorse
….
20
Software di I/O Indipendente dal
dispositivo (2)
• Accetta le richieste dal livello utente e
invoca il driver opportuno utilizzando le
funzioni di interfaccia
– problema: come si risale dal nome del
dispositivo al driver?
• Fornisce un insieme uniforme di funzioni
invocabili da chi scrive il driver
– allocazione di aree di memoria fisica contigua
per i buffer
– interazione con il controllore DMA, la MMU
21
Software di I/O Indipendente dal dispositivo (3)
Gestisce la bufferizzazione dove necessario :
(a) Input non bufferizzato, un interrupt per carattere (inefficiente)
(b) Input bufferizzato in spazio utente, (occupa RAM utente)
(c) Input bufferizzato nel kernel, seguito da una copia in spazio
utente (se la seconda è lenta si possono ancora perdere info)
(d) Doppia bufferizzazione nel kernel
22
Software di I/O Indipendente dal dispositivo (4)
La bufferizzazione può portare a molte copie
durante il cammino dei dati!
23
Livelli del sottosistema di I/O
Modo
utente
Software di I/O di livello utente
Software di sistema indipendente dal
dispositivo
Driver dei dispositivi
Modo
kernel
Gestori delle interruzioni
Hardware
24
Software di I/O in spazio utente
• Funzionalità del software di I/O che gira in
spazio utente :
– librerie linkabili da programmi utente (es. stdio,
unistd ...)
• passano i parametri alle SC nel modo giusto
• gestiscono la formattazione (es. printf()..)
– spooling
• processo utente (demone di stampa)
• directory di spool (in cui l’utente copia il file da
stampare)
25
Alcuni esempi di dispositivi
Disco rigido, RAID, video
26
Hardware del disco (1)
Testine (una per superfice)
Braccio (direzioni movimento)
1
Superfici
0
Struttura di un disco rigido
27
Hardware del disco (2)
settore
Unità minima di
informazione
leggibile/scrivibile
Ampiezza standard:
512 byte
traccia
• Ogni superficie è divisa in tracce concentriche
(una per ogni possibile posizione della testina)
28
Hardware del disco (3)
• Geometria fisica di un disco con due zone
• Una possibile geometria virtuale per lo stesso
disco
29
RAID
• Redundant Array of Independent Disks
• Sfrutta il parallelismo per rendere l’accesso
al disco più veloce
• Il controllore RAID mostra l’array come un
unico disco al resto del sistema
• I dati sono distribuiti sui dischi in modo da
favorire le letture parallele di parti dello
stesso file
– diverse strategie : RAID livello 0, 1, ….
30
Hardware di un RAID
Ogni strip è una fetta di k
settori consecutivi
Dischi di backup
Bit di parità
31
Hardware di un RAID (2)
Drive di parità
La parità viene calcolata come
XOR delle stripe corrispondenti
Distribuisce anche le parità
32
Formattazione del disco
• Formattazione a basso livello : Struttura di
un settore
preambolo
dati
dati
Permette alla testina di capire che
sta iniziando un nuovo settore, fornisce
il numero del settore etc
ECC
Codici correttori di errore :
dati in più per accorgersi se
la lettura è andata bene
33
Formattazione del disco (2)
Una illustrazione del cylinder skew
(pendenza del cilindro)
34
Formattazione del disco (3)
Senza
Interleaving
Singolo
Interleaving
Doppio
Interleaving
• Se il controllore dispone di buffer limitato
(un settore) è necessario tenerne conto nella
formattazione
• Controllori più moderni hanno buffer di
almeno una traccia
35
Formattazione del disco (4)
• Partizionamento : tipicamente nei PC
– Master Boot Record (settore 0)
– Codice di boot, tabella delle partizioni
– partizione di boot marcata attiva
• Formattazione ad alto livello
– inserisce un file system vuoto nella partizione
– boot block (primo blocco della partizione)
• Al boot
– BIOS carica ed esegue MBR
– caricamento boot block della partizione attiva
– caricamento ed esecuzione SO memorizzato nella
partizione
36
Gestione dello spazio disco (1)
• Praticamente tutti i file system:
– dividono i file in blocchi di ampiezza fissata ed
eseguono letture e scritture su blocchi o
multipli
– i blocchi non sono contigui su disco
• Problema 1 : come scegliere l’ampiezza del
blocco?
– Blocchi piccoli usano meglio lo spazio disco
• diminuiscono la frammentazione interna
– Blocchi grandi velocizzano gli accessi
• diminuiscono seek e rotational delay
37
Alcuni esempi di dispositivi (2)
Disco rigido, RAID
38
Hardware del disco (2)
Parametri del floppy disk del PC originale di IBM (anni 80) e
di un disco rigido Western Digital WD 18300 (2000) 39
Algoritmi di scheduling per il braccio (1)
• Il tempo necessario per leggere o scrivere
un blocco è determinato da tre fattori
– Tempo di seek
– Ritardo rotazionale (Rotational Delay)

Tempo di trasferimento vero e proprio
• Ad una nuova richiesta RD deve essere
pagato comunque
• Il tempo di seek dipende dalla distanza :
– viene ottimizzato dagli alg. di scheduling
40
Algoritmi di scheduling per il braccio (2)
Posizione
iniziale
Richieste
pendenti
L’algoritmo di scheduling Shortest Seek First (SSF)
41
Algoritmi di scheduling per il braccio (3)
Posizione
iniziale
L’algoritmo di scheduling “dell’ascensore”
42
Gestione dello spazio disco
• Problema 2 : come tenere traccia dei blocchi
liberi su disco ?
– Free list
• lista concatenata di blocchi pieni di indirizzi di
blocchi liberi
– Bitmap
• una mappa di bit con un bit per ogni blocco
• es. 0 blocco libero, 1 blocco in uso
• mantiene la contiguità dei blocchi (allocare un file
su blocchi vicini diminuisce il tempo di seek in
letture consecutive
43
Gestione dello spazio disco (3)
Free list
Bitmap
44
Affidabilità di un file system
• Problemi legati all’hw del disco
– settori difettosi
• sostituzione con spare sectors
– blocchi corrotti
• raccolti in file fittizi (bad block files)
45
Gestione degli errori del disco
• Una traccia con un settore difettoso
• Sostituzione del settore difettoso con un
settore di riserva
• Slittamento dei settori per evitare quello
difettoso
46
Affidabilità di un file system (2)
• Backup periodici
– copia delle informazioni del FS per poterle
utilizzare in caso di
• crash del disco, alluvioni etc ...
• cancellazioni accidentali
– backup fisico
• si copiano tutti i blocchi del disco (su tape o altro)
– backup logico
• si copiano file e directory modificati dopo una certa
data
47
Scarica

Gestione dell`IO