Virtualizzazione
delle Periferiche
Corso di Sistemi Operativi
Introduzione
„
„
Una delle funzioni principali di un SO è di
controllare tutte le periferiche connesse al PC
SO deve:
… comandare
i dispositivi
… ascoltare gli interrupt
… gestire gli errori
„
„
Deve fornire un’interfaccia tra i dispositivi ed il
resto del sistema che sia semplice e facile da
usare.
Le interfacce dovrebbero essere le stesse per
tutti i dispositivi (device-independent).
Principi di I/O hardware
„
„
„
Per un elettronico una periferica è un insieme di
chip, di cavi, di condensatori, ecc..
Un informatico guarda all’interfaccia che la
perifericha gli mette a disposizione (comandi
che l’hardware accetta, funzioni che supporta,
errori che potrebbe restituire).
I dispositivi possono essere divisi in due grosse
categorie:
…a
blocchi
… a carattere
Virtualizzazione delle Periferiche
„
„
Classificazione non perfetta. Comunque questa
divisione è abbastanza generale per poter iniziare il
discorso sulla “virtualizzazione delle periferiche”.
Ad esempio il File System lavora con le periferiche e non
deve avere differenti modalità di accesso alle periferiche
se a blocchi o a carattere. File System lavora con
dispositivi a blocchi astratti, lasciando la vera e propria
implementazione ai device driver.
Gestione delle Periferiche
„
„
Le unità I/O sono generalmente composte da
componenti meccanici e da componenti
elettronici.
E’ possibile separare i due aspetti per
aumentare la generalizzazione:
… Il
componente elettronico: device controller
(adapter) è di solito una scheda che viene inserita nel
PC che permette al PC stesso di interfacciarsi con il
dispositivo.
… Il componente meccanico è il dispositivo stesso.
Gestione delle Periferiche (2)
CPU
SW
HWport
Mechanical
Perif
„
„
Abbiamo fatto la distinzione tra controller e dispositivo
perché il SO non tratta mai direttamente con il
dispositivo ma sempre con il controller.
A volte questa interfaccia è direttamente sul dispositivo e
questo si collega al system bus del PC.
Principi di I/O software
„
„
„
L’idea del SO di gestire l’I/O è attraverso la
strutturazione in livelli.
I livelli più bassi servono per mascherare le specifiche
hw dei dispositivi mentre quelli superiori servono per
fornire un interfaccia comune, regolare, carina agli utenti.
Cercare DEVICE INDEPENDENCE
Iniziamo affrontando un concetto chiave: indipendenza
del dispositivo. Dovrebbe essere possibile scrivere
programmi che lavorino indiferrentemente con un hard
disk o con un floppy senza modificare il codice.
…
Dovrebbe essere possibile scrivere: sort <input> output
sapendo che input potrebbe essere floppy o HD e che l’output
può essere floppy, HD, terminale o modem…
Principi di I/O software: Uniform Naming
„
„
„
Innanzitutto per ottenere l’indipendenza del dispositivo
devo avere uniform naming. Il nome di un dispositivo o
di un file deve essere una stringa e non dipendere dal
nome del dispositivo.
In UNIX file e dispositivi sono gestiti nello stesso modo: i
floppy e gli altri dispotivi sono montati ed il SO maschera
il fatto che sono “estranei” /usr/mnt/fd0
In Windows questo non avviene e devo specificare dove
si trovano (a:/ )
Principi di I/O software: Error Handling
„
„
„
Un’altra funzione importante del SO è l’error handling.
Error handling deve essere gestito il più vicino all’hw
possibile. Se il controller scopre errore, richiede di nuovo
il dato.
Solo se il problema non può essere risolto dai livelli più
bassi, i livelli più alti ne vengono informati (ad es.
qualcuno ha tolto il dischetto).
E’ anche fondamentale gestire in modo trasparente
le periferiche sincrone (blocking) e quelle asincrone
(interrupt).
Virtualizzazione delle Periferiche
„
„
„
Ultimo ma non secondario aspetto: SO deve gestire la
virtualizzazione delle periferiche (permettere a + utenti di
usare una sola stampante).
Alcune periferiche possono essere virualizzate (dischi,
stampante, rete) altre no (schermo, tastiera) ecc…
Per quanto riguarda le periferiche virtualizzate, SO si
occupa di gestire i possibili conflitti tra utenti (più utenti
vogliono scrivire sulla stampante o accedere ad un file).
Livelli di S.O.
User level software
Device independent OS software
Device driver
Interrupt Handler
Interrupt Handler
„
„
Gli interrupt sono nascosti nel cuore del sistema
operativo. Essi servono per segnalare via HW al SO il
verificarsi di determinati eventi (es un blocco di dati è
pronto).
Il processo che richiede dei dati si sospende in attesa di
questo interrupt.
Device Driver
„
„
„
Tutto il codice che dipende dal dispositivo va in questo
livello. Ogni device driver gestisce una o più classi di
dispositivi.
I controller hanno dei registri che sono usati per trasferire
dati/comandi. Il disk driver è quella parte del SO che
conosce quanti e quali registri ci sono nel controller.
Il disk driver conosce i comandi da usare per il dispositivo
e controlla che siano eseguiti correttamente. Lui solo
conosce quanti settori, cilindri, testine, ecc. ci sono nel
disco.
Device Driver (2)
„
„
Il compito di un driver è di accettare richieste
astratte provenienti dal device-independent software
e di controllare che queste siano eseguire.
Una richiesta tipica è ad es: “leggi il blocco n”. Il driver si
attiva per leggere da disco, se è occupato a fare un’altra
richiesta, quest’ultima viene messa in coda.
Se è pronta prende la richiesta e da astratta viene
tradotta in richiesta concreta determinando quale testina
usare e quando. Esso deve determinare le corrette
operazioni da eseguire.
Device Driver (3)
„
„
Quando i comandi sono stati scelti, vengono copiati nei
registri del dispositivo.
Quello che succede è che poi:
Il driver attende che l’operaziona restituisca il risultato.
…
Operazioni lunghe. Interrupt (si blocca in attesa: scrivo il disco).
Il driver si attiva per eseguire un’altra operazione.
… Operazioni brevi. (scrivo a video)
Dopo aver terminato l’operazione controlla che non ci siano stati
errori e rende il risultato al device independet layer.
DEVICE-INDEPENDENT I/O
SOFTWARE
„
Le funzioni base fornite da questo livello permettono al
SO di eseguire le operazioni I/O che sono comuni a tutti i
dispositivi e di fornire un’interfaccia comune all’user-level
software
…
…
…
…
…
Naming e Protezione
Device-independent block-size
Buffering
Allocare e rilasciare i dispositivi
Error handling
Naming e Protezione
„
„
Questo livello si occupa del gestire il mapping
tra i nomi simbolici dei driver (LPT1, A:, es.. ) ed
i driver a cui si riferiscono.
Protection: previnire accessi indesiderati ai
dispositivi (errori, intrusioni). In MS-DOS si
poteva fare tutto, non c’era protezione. In UNIX
ci sono i rwe bits, gestibili dal proprietario e
dall’amministratore.
Device-Independent block-size
„
„
I dischi possono avere differenti sector size.
Questo livello deve mascherare questa
differenza, trattando i blocchi in blocchi logici di
dimensioni fissate e poi occupandosi di gestire
le diffenti dimensioni dei dispositivi (sia per
blocchi che per stream di caratteri)
Buffering
„
Si occupa di
… Gestire
letture successive di grandi blocchi.
… Fornire dati tutti insieme.
„
Per stream di caratteri, utente scrive troppo
veloce sulla tastiera e non riesce a gestire
l’input.
Allocare e rilasciare dispositivi
„
„
I dispositivi possono essere usati da uno o più
utenti.
Questo scambio di “proprietario” è gestito dal
SO (anche per quanto riguarda i processi)
Error handling
„
„
Abbiamo visto l’error handling gestito dal device
depende level. Quando il livello più basso non
riesce a gestire l’errore (disco rotto) questo
livello ne viene informato.
L’ errore viene quindi gestito in modo
indipendente dal dispositivo (informando il
processo che aveva fatto la richiesta oppure
visualizza un messaggio di errore).
User-Space I/O Software
„
„
„
„
SO mettono a disposizione dei programmatori
delle librerie di funzioni che permettono, tra
l’altro, di usare i dispositivi connessi al PC.
Una chiamata classica è (linguaggio C):
count=write(fd, buffer,nbytes);
La funzione write appropriata verrà chiamata a
sceconda di cosa è fd (video, printer, disco,
modem..)
In questo modo ho anche superato la deviceindependence.
I/O request
Make I/O call, format I/O,
spooling
User processes
Device-Indep-Software
Naming, protection,
blocking, buffering,
allocation
Device-Drivers
Setup device register, check
status
Interrupr Handlers
Wakeup driver when I(O
completed
Perform I/O operations
Hardware
I/O reply