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