Gestione I/O e mem secondaria
Dispositivi a blocchi / caratteri
I dati vengono letti o scritti a blocchi (512-1024 byte) Raw IO (op di read, write e seek per blocchi) Accesso tramite filesystem (op di read write e seek su file), il diver fornisce solo accesso raw Accesso tramite memory-mapped I/O (il contenuto di un file viene mappato in mem, l'accesso avviene tramite istruzioni di load/store del processore)
Interfaccia di comunicazione a caratteri
- i dati vengono letti/scritti un carattere alla volta
- raw I/O
- operazioni di get/put di un singolo carattere
- bufferizzazione
- lettura/scrittura di “una linea alla volta”
Tecniche di gestione dei dispositivi di I/O
- buffering
- caching
- spooling
- I/O scheduling
Tre motivazioni per il buffering per gestire una differenza di velocità tra il produttore e il consumatore di un certo flusso di dati per gestire la differenza di dimensioni nell'unità di trasferimento per implementare la “semantica di copia” delle operazioni di I/O
Caching mantiene una copia in memoria primaria di informazioni che si trovano in memoria secondaria è differente dal buffering nel buffer si trova l'unica istanza di un'informazione la cache mantiene la copia di un'informazione
Spool è un buffer che mantiene output per un dispositivo che non può accettare flussi di dati distinti ad esempio, stampanti
SSD
Caratterisstiche principali:
- Non hanno fragilità meccaniche
- Consumano meno energia dei dischi rotazionali
- Hanno un numero massimo di cicli di scrittura
- Velocità lettura > velocità scrittura
- Si legge a blocchi, si scrive a “banchi” (molti blocchi insieme)
- Accesso uniforme su tutto lo spazio di memoria
Dischi
un disco è composto da un insieme di piatti, suddivisi in tracce, le quali sono suddivise in settori
I dischi sono caratterizzati da tre parametri fondamentali:
- $r$: la velocità di rotazione, espressa in rpm (revolutions per minute)
- $T_s$: il tempo di seek, ovvero il tempo medio necessario affinchè la testina si sposti sulla traccia desiderata
- $V_r$: la velocità di trasferimento, espressa in byte al secondo
Il tempo di accesso:
- è il tempo necessario per leggere un settore del disco, composto da tempo di seek, ritardo rotazionale e tempo di trasferimento
Ritardo rotazionale:
- il tempo medio necessario affinchè il settore desiderato arrivi sotto la testina
- è uguale a $1 / 2r$
Transfer time:
- dipende dalla quantità di dati b da leggere (supponendo che siano contigui sulla stessa traccia) è uguale a $b/V$
Disk Scheduling
Gestione software dei dischi
- il gestore del disco può avere numerose richieste pendenti, da parte dei vari processi presenti nel sistema
- il sistema sarà più efficiente se le richieste pendenti verranno evase seguendo un ordine che minimizza il numero di operazioni che richiedono molto tempo (e.g. seek)
Valori tipici
- tempo di seek: 8-10 ms
- velocità rotazionale: 5400, 7200, 10000 rpm
FCFS
First Come, First Served (altrimenti detta FIFO)
è una politica di gestione fair, non minimizza il numero di seek, non può mai generare starvation

SSTF
Shortest Seek Time First, seleziona la richieste che prevede il minor spostamento della testina dalla posizione corrente. Nel caso di equidistanza, la direzione viene scelta casualmente. Può provocare starvation

LOOK
Detto anche algoritmo dell'ascensore Ad ogni istante, la testina è associata ad una direzione, la testina si sposta di richiesta in richiesta, seguendo la direzione scelta. Quando si raggiunge l'ultima richiesta nella direzione scelta, la direzione viene invertita e si eseguono le richieste nella direzione opposta
Caratteristiche
- è efficiente
- il tempo medio di accesso al disco non è omogeneo; sono privilegiate le tracce centrali
- è esente da starvation (parzialmente)

C-LOOK
Ha lo stesso principio di funzionamento del metodo LOOK, ma la scansione del disco avviene in una sola direzione. Quando si raggiunge l'ultima richiesta in una direzione, la testina si sposta direttamente alla prima richiesta.

LOOK e C-LOOK
Problema E' possibile che il braccio della testina non si muova per un periodo considerevole di tempo (e.g., se un certo numero di processi continua a leggere sullo stesso cilindro)
Soluzione La coda delle richieste può essere suddivisa in due sottocode separate. Mentre il disk scheduler sta soddisfacendo le richieste di una coda, le richieste che arrivano vengono inserite nell'altra. Quando tutte le richieste della prima coda sono state esaurite, si scambiano le due code.
RAID
Problema
- la velocità dei processori cresce secondo la legge di Moore, la velocità dei dispositivi di memoria secondaria molto più lentamente.
Considerazioni
- per aumentare la velocità di un componente, una delle possibilità è quella di utilizzare il parallelismo, l'idea è quella di utilizzare un array di dischi indipendenti, che possano gestire più richieste di I/O in parallelo. Dobbiamo però garantire che i dati letti in parallelo risiedano su dischi indipendenti
RAID: Redundant Array of Independent Disks
Standard per l'uso di piu dischi in parallelo, consiste in 7 schemi diversi (0-6) che rappresentano le diverse architetture di distribuzione dei dati.
Caratteristiche comuni ai sette schiemi:
- un array di dischi viene visto dal so come un solo singolo disco logico
- dati distribuiti tra i vari dischi dell'array
- la capacita' ridondante dei dischi puo essere usata per mem informazioni di parita' che garantiscono il recovery dei dati in caso di guasti.
Nota sui guasti: usare piu dischi contemporaneamente aumenta la prob di guasto. RAID offre meccanismi di parita' per contrastare questo problema
RAID 0 (striping)
No meccanismi di ridondanza. I dati vengono distribuiti tra i vari dischi. Vantaggi:
- se due richieste di I/O riguardano blocchi indipendenti di dati, c'è la possibilità che i blocchi siano su dischi differenti
- le due richieste possono essere servite in parallelo
*Striping:
- il sistema RAID viene visto come un disco logico
- i dati vengono suddivisi in strip
- strip consecutivi sono distribuiti su dischi diversi (aumento performance)

Performance:
- per grandi trasferimenti di dati
- per un gran numero di richieste indipendenti: efficiente in particolare se la quantità di dati richiesta è paragonabile alla dimensione degli strip
Ridondanza: nulla
RAID 1 (mirroring)
Differisce dagli schemi (1-6) per come la ridondanza e'gestita, ovvero duplicando tutti i dati su due insiemi indipendenti di dischi.
Il sistema e' basato su striping ma uno strip viene scritto su due dischi diversi
Il costo per unita' di mem raddoppia

Performance:
- Una richiesta di lettura puo essere servita da uno qualsiasi dei dischi che ospitano il dato
- una richiesta di scrittura deve essre servita da tutti i dischi che ospitano il dato (dipende dal disco con tempo di seek maggiore)
Ridondanza:
- il recovery e'molto semplice: se un disco si guasta i dati sono accessibili dall'altro disco. E' necessario sostituire il disco guasto e fare una copia del disco funzionante
RAID 4
Si usa il meccanismo di data striping con strip relativamente grandi Strip di parita':
- viene calcolato uno strip di parita' a partire dagli stri di dati corrispondenti, calcolato bit per bit
- lo strip di parita' viene posto sul disco di parita'

Lettura (in assenza di guasti)
- si individua lo strip corrispondente e si effettua la lettura dello strip
Lettura (in presenza di guasti)
- si individua lo strip corrispondente; se il disco corrispondente è guasto, si effettua la lettura di tutti gli strip rimasti e tramite il disco di parità di ottiene lo strip mancante
Scrittura (in assenza di guasti)
- quanti strip devono essere coinvolti?
- a prima vista, si direbbe tutti (lo strip dati da scrivere, tutti gli altri strip da leggere, lo strip di parità in scrittura)

RAID 5
Come RAID 4 ma i blocchi di parita' sono sparsi tra i vari dischi
Il vantaggio e'che non esiste un disco di parita' che diventa un bottleneck

RAID 6
Come RAID 5 ma si usano due strip di parita' invece di uno il vantaggio è che non esiste un disco di parità che diventa un bottleneck

RAID 6
Come RAID 5, ma si utilizzano due strip di parità invece di uno Aumenta l'affidabilità (è necessario il guasto di tre dischi affinché i dati non siano recuperabili)