La gestione dei dispositivi virtuali combina la gestione dei dispositivi fisici con quella di altre risorse, sia fisiche che astratte, per realizzare un’interfaccia orientata alle esigenze dei processi invece che alle caratteristiche dei dispositivi, migliorando quindi le prestazioni.
Dischi virtuali
Per velocizzare gli accessi al disco si può usare un disco virtuale, cioè una risorsa astratta che combina il dispositivo fisico e un’area di memoria RAM usata come cache. Agli utenti si presenta come un normale disco ma presenta tempi di accesso minori.
Il gestore del disco mantiene nella cache una copia dei blocchi a cui si accede più spesso; se un processo accede ripetutamente allo stesso blocco, il sistema operativo, in modo trasparente, copia il blocco in memoria, effettua le operazioni in memoria e poi lo riscrive su disco successivamente. Il salvataggio della copia modificata nella cache avviene quando la copia viene eliminata dalla cache in base alla scelta di un algoritmo di sostituzione. Si potrebbe effettuare il salvataggio ad ogni modifica ma aumenterebbe la frequenza degli accessi al disco. Un compromesso consiste nell’eseguire il salvataggio della cache a intervalli di tempo relativamente brevi. Il salvataggio può anche essere richiesto dai processi quando opportuno.
L’uso dei dischi virtuali crea problemi in caso di cadute di corrente perché i dati nella cache non sono salvati.
Spool
Per le periferiche che devono essere usate in modo dedicato (come stampanti e nastri) può essere simulata l’allocazione condivisa utilizzando la tecnica di allocazione a periferiche virtuali.
Con questa tecnica l’operazione di I/O non ha effetto realmente sulla periferica ma agisce su un’area del disco che simula la periferica (file di spool).
Il collegamento tra periferica virtuale e periferica reale viene realizzato dai programmi di SPOOL (Simultaneous Peripheral Operations On Line) che si occupano del trasferimento da e verso la periferica di ogni file di spool posto in coda.
Per esempio se più processi richiedono l’uso della stampante, ad ognuno di essi viene associato un file su disco in cui vengono memorizzate di volta in volta le informazioni da stampare. Solo quando un processo è terminato il file di spool può essere mandato alla stampante e cancellato dal disco. Se la stampante è occupata il file di stampa viene posto in una coda di stampa.
Vantaggi dello SPOOL di stampa:
- utilizzo efficiente delle stampanti che possono essere usate alla loro massima velocità,
- eliminazione del ritardo per i processi, che possono sempre stampare subito usando un dispositivo virtuale;
- possibilità di ordinare le stampe pendenti.
File speciali di dispositivo
I dispositivi, sia a caratteri che a blocchi, possono essere visti come file speciali.
I dispositivi sono divisi in dispositivi a caratteri e a blocchi:
- i dispositivi a caratteri lavorano a livello di singolo carattere; possono gestire caratteri presi singolarmente e sono detti anche ad accesso sequenziale (per esempio stampanti e terminali);
- i dispositivi a blocchi comunicano attraverso blocchi di dati di dimensioni predefinite e sono ad accesso casuale; hanno una bufferizzazione dei dati che li rende adatti ad ospitare un file system.
I file speciali di dispositivo rappresentano in modo uniforme dispositivi di natura molto diversa come stampanti o dischi, nascondendo le differenze tra dispositivi a blocchi e dispositivi a caratteri (per esempio i processi vedono il disco, invece che come un dispositivo a blocchi, come un dispositivo su cui fare operazioni sequenziali).
I file di dispositivo presentano verso i processi la stessa interfaccia dei file e permettono di eseguire le operazioni di input/output sui dispositivi come lettura o scrittura di sequenze di caratteri. Si usano le stesse operazioni, in modo uniforme, per le operazioni sui file e per le operazioni sui dispositivi. Tutto quello che viene scritto nel file di dispositivo viene inviato al dispositivo e tutto quello che viene letto viene recuperato dal dispositivo.